diff --git a/.codelyignore b/.codelyignore new file mode 100644 index 0000000..9e79c72 --- /dev/null +++ b/.codelyignore @@ -0,0 +1,72 @@ +# Codely ignore for Unity (git/Plastic style). Auto-generated by Codely/Continue. +# Library: only PackageCache is kept for indexing; rest is cache. + +# Library – ignore all except PackageCache +Library/* +!Library/PackageCache/ +!Library/PackageCache/** + +# Temp, Obj, Logs, UserSettings (conventional Unity ignores) +Temp/ +Obj/ +Logs/ +UserSettings/ +Build/ +Builds/ + +# Unity / IDE +.utmp/ +.vs/ +.consulo/ +.gradle/ +*.DotSettings.user +ExportedObj/ + +# MemoryCaptures / Recordings +MemoryCaptures/ +Recordings/ + +# Blender +*.blend1 +*.blend1.meta + +# JetBrains Rider (optional) +# Assets/Plugins/Editor/JetBrains* + +# Solution / project / IDE user files +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db +*.pidb.meta +*.pdb.meta +*.mdb.meta +sysinfo.txt +mono_crash.* + +# Build artifacts +*.apk +*.aab +*.app +crashlytics-build.properties +InitTestScene*.unity* + +# Addressables +ServerData +Assets/StreamingAssets/aa* +Assets/AddressableAssetsData/link.xml* +Assets/Addressables_Temp* +Assets/AddressableAssetsData/*/*.bin* + +# Visual Scripting generated +Assets/Unity.VisualScripting.Generated/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..ddb6ff8 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "visualstudiotoolsforunity.vstuc" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..da60e25 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,10 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Unity", + "type": "vstuc", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..154c59a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,71 @@ +{ + "files.exclude": { + "**/.DS_Store": true, + "**/.git": true, + "**/.vs": true, + "**/.gitmodules": true, + "**/.vsconfig": true, + "**/*.booproj": true, + "**/*.pidb": true, + "**/*.suo": true, + "**/*.user": true, + "**/*.userprefs": true, + "**/*.unityproj": true, + "**/*.dll": true, + "**/*.exe": true, + "**/*.pdf": true, + "**/*.mid": true, + "**/*.midi": true, + "**/*.wav": true, + "**/*.gif": true, + "**/*.ico": true, + "**/*.jpg": true, + "**/*.jpeg": true, + "**/*.png": true, + "**/*.psd": true, + "**/*.tga": true, + "**/*.tif": true, + "**/*.tiff": true, + "**/*.3ds": true, + "**/*.3DS": true, + "**/*.fbx": true, + "**/*.FBX": true, + "**/*.lxo": true, + "**/*.LXO": true, + "**/*.ma": true, + "**/*.MA": true, + "**/*.obj": true, + "**/*.OBJ": true, + "**/*.asset": true, + "**/*.cubemap": true, + "**/*.flare": true, + "**/*.mat": true, + "**/*.meta": true, + "**/*.prefab": true, + "**/*.unity": true, + "build/": true, + "Build/": true, + "Library/": true, + "library/": true, + "obj/": true, + "Obj/": true, + "Logs/": true, + "logs/": true, + "ProjectSettings/": true, + "UserSettings/": true, + "temp/": true, + "Temp/": true + }, + "files.associations": { + "*.asset": "yaml", + "*.meta": "yaml", + "*.prefab": "yaml", + "*.unity": "yaml", + }, + "explorer.fileNesting.enabled": true, + "explorer.fileNesting.patterns": { + "*.sln": "*.csproj", + "*.slnx": "*.csproj" + }, + "dotnet.defaultSolution": "Fishing2NetTest.slnx" +} \ No newline at end of file diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..f019fd0 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Plugins/vInspector/vInspector Data.asset b/Assets/AssetCaches.asset similarity index 57% rename from Assets/Plugins/vInspector/vInspector Data.asset rename to Assets/AssetCaches.asset index 5562d9c..a3b30f6 100644 --- a/Assets/Plugins/vInspector/vInspector Data.asset +++ b/Assets/AssetCaches.asset @@ -9,7 +9,8 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b7915df4cd4da490ab52fc8fa9ee9127, type: 3} - m_Name: vInspector Data - m_EditorClassIdentifier: - items: [] + m_Script: {fileID: 11500000, guid: 9fa072029bab4df48fef4d84ac836775, type: 3} + m_Name: AssetCaches + m_EditorClassIdentifier: NBC.Asset.Editor::NBC.Asset.Editor.Caches + Assets: [] + Bundles: [] diff --git a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset.meta b/Assets/AssetCaches.asset.meta similarity index 79% rename from Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset.meta rename to Assets/AssetCaches.asset.meta index 80d964b..91627d5 100644 --- a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset.meta +++ b/Assets/AssetCaches.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 570f929f99741ed49aad0cceac6c7105 +guid: bc2dab5b568ebf8429604de96d35e9a8 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/Plugins/vFavorites/vFavorites Data.asset b/Assets/CollectorSetting.asset similarity index 57% rename from Assets/Plugins/vFavorites/vFavorites Data.asset rename to Assets/CollectorSetting.asset index a6172ba..5f1abcd 100644 --- a/Assets/Plugins/vFavorites/vFavorites Data.asset +++ b/Assets/CollectorSetting.asset @@ -9,8 +9,7 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 066cf82f8f80d408c856e48fc8f1127b, type: 3} - m_Name: vFavorites Data - m_EditorClassIdentifier: - pages: [] - rowScale: 1 + m_Script: {fileID: 11500000, guid: fb797276877142dfb00042b5dc5064ba, type: 3} + m_Name: CollectorSetting + m_EditorClassIdentifier: NBC.Asset.Editor::NBC.Asset.Editor.CollectorSetting + Packages: [] diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset.meta b/Assets/CollectorSetting.asset.meta similarity index 79% rename from Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset.meta rename to Assets/CollectorSetting.asset.meta index 975113e..458d377 100644 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset.meta +++ b/Assets/CollectorSetting.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 79122942d190042669bd4a184e83db8b +guid: b5d230639ac2f4a4794bae0df8b72241 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/Plugins/CodeStage.meta b/Assets/HDRPDefaultResources.meta similarity index 77% rename from Assets/Plugins/CodeStage.meta rename to Assets/HDRPDefaultResources.meta index a75687c..04fb9ef 100644 --- a/Assets/Plugins/CodeStage.meta +++ b/Assets/HDRPDefaultResources.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cd0e9f4a4927f6145887bbb2b491ffe9 +guid: dc1e56621a87818448f6b50bbb69d901 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/HDRPDefaultResources/DefaultLookDevProfile.asset b/Assets/HDRPDefaultResources/DefaultLookDevProfile.asset new file mode 100644 index 0000000..0dd9b43 --- /dev/null +++ b/Assets/HDRPDefaultResources/DefaultLookDevProfile.asset @@ -0,0 +1,259 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: DefaultLookDevProfile + m_EditorClassIdentifier: + components: + - {fileID: 8761387877531654226} + - {fileID: 1902828633788537306} + - {fileID: 1880163708194025631} + - {fileID: 2340290907100754200} +--- !u!114 &1880163708194025631 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9008a067f4d626c4d8bc4bc48f04bb89, type: 3} + m_Name: AmbientOcclusion + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + rayTracing: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0.5 + directLightingStrength: + m_OverrideState: 0 + m_Value: 0 + radius: + m_OverrideState: 1 + m_Value: 1 + spatialBilateralAggressiveness: + m_OverrideState: 0 + m_Value: 0.15 + temporalAccumulation: + m_OverrideState: 0 + m_Value: 1 + ghostingReduction: + m_OverrideState: 0 + m_Value: 0.5 + blurSharpness: + m_OverrideState: 0 + m_Value: 0.1 + layerMask: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Bits: 4294967295 + specularOcclusion: + m_OverrideState: 0 + m_Value: 0.5 + occluderMotionRejection: + m_OverrideState: 0 + m_Value: 1 + receiverMotionRejection: + m_OverrideState: 0 + m_Value: 1 + m_StepCount: + m_OverrideState: 0 + m_Value: 6 + m_FullResolution: + m_OverrideState: 0 + m_Value: 0 + m_MaximumRadiusInPixels: + m_OverrideState: 0 + m_Value: 40 + m_BilateralUpsample: + m_OverrideState: 0 + m_Value: 1 + m_DirectionCount: + m_OverrideState: 0 + m_Value: 2 + m_RayLength: + m_OverrideState: 0 + m_Value: 3 + m_SampleCount: + m_OverrideState: 0 + m_Value: 2 + m_Denoise: + m_OverrideState: 0 + m_Value: 1 + m_DenoiserRadius: + m_OverrideState: 0 + m_Value: 0.5 +--- !u!114 &1902828633788537306 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ddcec8a8eb2d684d833ac8f5d26aebd, type: 3} + m_Name: HDShadowSettings + m_EditorClassIdentifier: + active: 1 + maxShadowDistance: + m_OverrideState: 1 + m_Value: 25 + directionalTransmissionMultiplier: + m_OverrideState: 0 + m_Value: 1 + cascadeShadowSplitCount: + m_OverrideState: 1 + m_Value: 2 + cascadeShadowSplit0: + m_OverrideState: 0 + m_Value: 0.05 + cascadeShadowSplit1: + m_OverrideState: 0 + m_Value: 0.15 + cascadeShadowSplit2: + m_OverrideState: 0 + m_Value: 0.3 + cascadeShadowBorder0: + m_OverrideState: 0 + m_Value: 0 + cascadeShadowBorder1: + m_OverrideState: 0 + m_Value: 0 + cascadeShadowBorder2: + m_OverrideState: 0 + m_Value: 0 + cascadeShadowBorder3: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &2340290907100754200 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 24f077503be6ae942a1e1245dbd53ea9, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 3 + threshold: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0.1 + scatter: + m_OverrideState: 0 + m_Value: 0.7 + tint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + dirtTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + dirtIntensity: + m_OverrideState: 0 + m_Value: 0 + anamorphic: + m_OverrideState: 0 + m_Value: 1 + m_Resolution: + m_OverrideState: 0 + m_Value: 2 + m_HighQualityPrefiltering: + m_OverrideState: 0 + m_Value: 0 + m_HighQualityFiltering: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &8761387877531654226 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f086a068d4c5889438831b3ae9afc11c, type: 3} + m_Name: Tonemapping + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 1 + useFullACES: + m_OverrideState: 0 + m_Value: 0 + toeStrength: + m_OverrideState: 0 + m_Value: 0 + toeLength: + m_OverrideState: 0 + m_Value: 0.5 + shoulderStrength: + m_OverrideState: 0 + m_Value: 0 + shoulderLength: + m_OverrideState: 0 + m_Value: 0.5 + shoulderAngle: + m_OverrideState: 0 + m_Value: 0 + gamma: + m_OverrideState: 0 + m_Value: 1 + lutTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + lutContribution: + m_OverrideState: 0 + m_Value: 1 + neutralHDRRangeReductionMode: + m_OverrideState: 0 + m_Value: 2 + acesPreset: + m_OverrideState: 0 + m_Value: 3 + fallbackMode: + m_OverrideState: 0 + m_Value: 1 + hueShiftAmount: + m_OverrideState: 0 + m_Value: 0 + detectPaperWhite: + m_OverrideState: 0 + m_Value: 0 + paperWhite: + m_OverrideState: 0 + m_Value: 300 + detectBrightnessLimits: + m_OverrideState: 0 + m_Value: 1 + minNits: + m_OverrideState: 0 + m_Value: 0.005 + maxNits: + m_OverrideState: 0 + m_Value: 1000 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control/Configuration.asset.meta b/Assets/HDRPDefaultResources/DefaultLookDevProfile.asset.meta similarity index 79% rename from Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control/Configuration.asset.meta rename to Assets/HDRPDefaultResources/DefaultLookDevProfile.asset.meta index 2194edc..9411447 100644 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control/Configuration.asset.meta +++ b/Assets/HDRPDefaultResources/DefaultLookDevProfile.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 15c6acaf90c83834db6cef8e66f3abc0 +guid: c0249bc9528ffb242a4f01ce0d2383f2 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset b/Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset new file mode 100644 index 0000000..f523a8a --- /dev/null +++ b/Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset @@ -0,0 +1,918 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8770122170507510650 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a76fd08475e21554b8f284f723dd7cf8, type: 3} + m_Name: WaterRendering + m_EditorClassIdentifier: + active: 1 + enable: + m_OverrideState: 1 + m_Value: 1 + triangleSize: + m_OverrideState: 0 + m_Value: 30 + ambientProbeDimmer: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &-8371540133157610761 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a7ff42a8c5be6646ad3975f3a54c1eb, type: 3} + m_Name: DiffusionProfileList + m_EditorClassIdentifier: Unity.RenderPipelines.HighDefinition.Runtime::UnityEngine.Rendering.HighDefinition.DiffusionProfileList + active: 1 + diffusionProfiles: + m_OverrideState: 1 + m_Value: + - {fileID: 11400000, guid: 404820c4cf36ad944862fa59c56064f0, type: 2} + - {fileID: 11400000, guid: 2384dbf2c1c420f45a792fbc315fbfb1, type: 2} +--- !u!114 &-7089757308646879465 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bcf384b154398e341b6b29969c078198, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 1 + m_Value: 1 + intensity: + m_OverrideState: 1 + m_Value: 0.5 + maximumVelocity: + m_OverrideState: 0 + m_Value: 200 + minimumVelocity: + m_OverrideState: 0 + m_Value: 2 + cameraMotionBlur: + m_OverrideState: 0 + m_Value: 1 + specialCameraClampMode: + m_OverrideState: 0 + m_Value: 0 + cameraVelocityClamp: + m_OverrideState: 0 + m_Value: 0.05 + cameraTranslationVelocityClamp: + m_OverrideState: 0 + m_Value: 0.05 + cameraRotationVelocityClamp: + m_OverrideState: 0 + m_Value: 0.03 + depthComparisonExtent: + m_OverrideState: 0 + m_Value: 1 + m_SampleCount: + m_OverrideState: 1 + m_Value: 8 +--- !u!114 &-6026464391438864705 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a7ff42a8c5be6646ad3975f3a54c1eb, type: 3} + m_Name: DiffusionProfileList + m_EditorClassIdentifier: + active: 1 + diffusionProfiles: + m_OverrideState: 1 + m_Value: + - {fileID: 11400000, guid: 404820c4cf36ad944862fa59c56064f0, type: 2} + - {fileID: 11400000, guid: 2384dbf2c1c420f45a792fbc315fbfb1, type: 2} +--- !u!114 &-1016694868962581565 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56b145d2b9ee1ac4f846968484e7485a, type: 3} + m_Name: ContactShadows + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + enable: + m_OverrideState: 1 + m_Value: 1 + length: + m_OverrideState: 0 + m_Value: 0.15 + opacity: + m_OverrideState: 0 + m_Value: 1 + distanceScaleFactor: + m_OverrideState: 0 + m_Value: 0.5 + maxDistance: + m_OverrideState: 0 + m_Value: 50 + minDistance: + m_OverrideState: 0 + m_Value: 0 + fadeDistance: + m_OverrideState: 0 + m_Value: 5 + fadeInDistance: + m_OverrideState: 0 + m_Value: 0 + rayBias: + m_OverrideState: 0 + m_Value: 0.2 + thicknessScale: + m_OverrideState: 0 + m_Value: 0.15 + m_SampleCount: + m_OverrideState: 0 + m_Value: 10 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: DefaultSettingsVolumeProfile + m_EditorClassIdentifier: + components: + - {fileID: 7686318427622180703} + - {fileID: -1016694868962581565} + - {fileID: 7502528774814404555} + - {fileID: 7542669330009093999} + - {fileID: 1501199423866068322} + - {fileID: 5315503232242033309} + - {fileID: 1932259527246508038} + - {fileID: 448115243408767295} + - {fileID: -7089757308646879465} + - {fileID: -8770122170507510650} + - {fileID: 4981354747274665315} + - {fileID: 5305602202033311358} + - {fileID: -8371540133157610761} +--- !u!114 &448115243408767295 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59b6606ef2548734bb6d11b9d160bc7e, type: 3} + m_Name: HDRISky + m_EditorClassIdentifier: + active: 1 + rotation: + m_OverrideState: 0 + m_Value: 0 + skyIntensityMode: + m_OverrideState: 0 + m_Value: 0 + exposure: + m_OverrideState: 1 + m_Value: 11 + multiplier: + m_OverrideState: 0 + m_Value: 1 + upperHemisphereLuxValue: + m_OverrideState: 1 + m_Value: 0.4660715 + upperHemisphereLuxColor: + m_OverrideState: 1 + m_Value: {x: 0.18750614, y: 0.29181972, z: 0.5} + desiredLuxValue: + m_OverrideState: 0 + m_Value: 20000 + updateMode: + m_OverrideState: 0 + m_Value: 0 + updatePeriod: + m_OverrideState: 0 + m_Value: 0 + includeSunInBaking: + m_OverrideState: 0 + m_Value: 0 + hdriSky: + m_OverrideState: 1 + m_Value: {fileID: 8900000, guid: 8253d41e6e8b11a4cbe77a4f8f82934d, type: 3} + distortionMode: + m_OverrideState: 0 + m_Value: 0 + flowmap: + m_OverrideState: 0 + m_Value: {fileID: 0} + upperHemisphereOnly: + m_OverrideState: 0 + m_Value: 1 + scrollOrientation: + m_OverrideState: 0 + m_Value: + mode: 1 + customValue: 0 + additiveValue: 0 + multiplyValue: 1 + scrollSpeed: + m_OverrideState: 0 + m_Value: + mode: 1 + customValue: 100 + additiveValue: 0 + multiplyValue: 1 + sunInitialRotation: + m_OverrideState: 0 + m_Value: -Infinity + lockSun: + m_OverrideState: 0 + m_Value: 0 + enableBackplate: + m_OverrideState: 0 + m_Value: 0 + backplateType: + m_OverrideState: 0 + m_Value: 0 + groundLevel: + m_OverrideState: 0 + m_Value: 0 + scale: + m_OverrideState: 0 + m_Value: {x: 32, y: 32} + projectionDistance: + m_OverrideState: 0 + m_Value: 16 + plateRotation: + m_OverrideState: 0 + m_Value: 0 + plateTexRotation: + m_OverrideState: 0 + m_Value: 0 + plateTexOffset: + m_OverrideState: 0 + m_Value: {x: 0, y: 0} + blendAmount: + m_OverrideState: 0 + m_Value: 0 + shadowTint: + m_OverrideState: 0 + m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1} + pointLightShadow: + m_OverrideState: 0 + m_Value: 0 + dirLightShadow: + m_OverrideState: 0 + m_Value: 0 + rectLightShadow: + m_OverrideState: 0 + m_Value: 0 + m_SkyVersion: 1 + enableDistortion: + m_OverrideState: 0 + m_Value: 0 + procedural: + m_OverrideState: 0 + m_Value: 1 + scrollDirection: + m_OverrideState: 0 + m_Value: 0 + m_ObsoleteScrollSpeed: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &1501199423866068322 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 24f077503be6ae942a1e1245dbd53ea9, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 1 + m_Value: 1 + threshold: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0.2 + scatter: + m_OverrideState: 0 + m_Value: 0.7 + tint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + dirtTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + dirtIntensity: + m_OverrideState: 0 + m_Value: 0 + anamorphic: + m_OverrideState: 0 + m_Value: 1 + m_Resolution: + m_OverrideState: 1 + m_Value: 2 + m_HighQualityPrefiltering: + m_OverrideState: 1 + m_Value: 0 + m_HighQualityFiltering: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &1932259527246508038 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d7593b3a9277ac4696b20006c21dde2, type: 3} + m_Name: VisualEnvironment + m_EditorClassIdentifier: + active: 1 + skyType: + m_OverrideState: 1 + m_Value: 1 + cloudType: + m_OverrideState: 0 + m_Value: 0 + skyAmbientMode: + m_OverrideState: 0 + m_Value: 0 + planetRadius: + m_OverrideState: 0 + m_Value: 6378.1 + renderingSpace: + m_OverrideState: 0 + m_Value: 0 + centerMode: + m_OverrideState: 0 + m_Value: 0 + planetCenter: + m_OverrideState: 0 + m_Value: {x: 0, y: -6378.1, z: 0} + windOrientation: + m_OverrideState: 0 + m_Value: 0 + windSpeed: + m_OverrideState: 0 + m_Value: 100 + fogType: + m_OverrideState: 0 + m_Value: 0 + m_Version: 1 +--- !u!114 &4981354747274665315 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d877ec3e844f2ca46830012e8e79319b, type: 3} + m_Name: PhysicallyBasedSky + m_EditorClassIdentifier: + active: 1 + rotation: + m_OverrideState: 0 + m_Value: 0 + skyIntensityMode: + m_OverrideState: 0 + m_Value: 0 + exposure: + m_OverrideState: 0 + m_Value: 0 + multiplier: + m_OverrideState: 0 + m_Value: 1 + upperHemisphereLuxValue: + m_OverrideState: 0 + m_Value: 1 + upperHemisphereLuxColor: + m_OverrideState: 0 + m_Value: {x: 0, y: 0, z: 0} + desiredLuxValue: + m_OverrideState: 0 + m_Value: 20000 + updateMode: + m_OverrideState: 0 + m_Value: 0 + updatePeriod: + m_OverrideState: 0 + m_Value: 0 + includeSunInBaking: + m_OverrideState: 0 + m_Value: 0 + type: + m_OverrideState: 0 + m_Value: 1 + atmosphericScattering: + m_OverrideState: 0 + m_Value: 1 + renderingMode: + m_OverrideState: 0 + m_Value: 0 + material: + m_OverrideState: 1 + m_Value: {fileID: -876546973899608171, guid: 02532cbb810fb404db49da84f1efe41e, type: 3} + airDensityR: + m_OverrideState: 0 + m_Value: 0.04534 + airDensityG: + m_OverrideState: 0 + m_Value: 0.10237241 + airDensityB: + m_OverrideState: 0 + m_Value: 0.23264056 + airTint: + m_OverrideState: 0 + m_Value: {r: 0.9, g: 0.9, b: 1, a: 1} + airMaximumAltitude: + m_OverrideState: 0 + m_Value: 55261.973 + aerosolDensity: + m_OverrideState: 0 + m_Value: 0.01192826 + aerosolTint: + m_OverrideState: 0 + m_Value: {r: 0.9, g: 0.9, b: 0.9, a: 1} + aerosolMaximumAltitude: + m_OverrideState: 0 + m_Value: 8289.296 + aerosolAnisotropy: + m_OverrideState: 0 + m_Value: 0.8 + ozoneDensityDimmer: + m_OverrideState: 0 + m_Value: 1 + ozoneMinimumAltitude: + m_OverrideState: 0 + m_Value: 10000 + ozoneLayerWidth: + m_OverrideState: 0 + m_Value: 30000 + groundTint: + m_OverrideState: 0 + m_Value: {r: 0.12156863, g: 0.105882354, b: 0.09411765, a: 1} + groundColorTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + groundEmissionTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + groundEmissionMultiplier: + m_OverrideState: 0 + m_Value: 1 + planetRotation: + m_OverrideState: 0 + m_Value: {x: 0, y: 0, z: 0} + spaceEmissionTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + spaceEmissionMultiplier: + m_OverrideState: 0 + m_Value: 1 + spaceRotation: + m_OverrideState: 0 + m_Value: {x: 0, y: 0, z: 0} + colorSaturation: + m_OverrideState: 0 + m_Value: 1 + alphaSaturation: + m_OverrideState: 0 + m_Value: 1 + alphaMultiplier: + m_OverrideState: 0 + m_Value: 1 + horizonTint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + zenithTint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + horizonZenithShift: + m_OverrideState: 0 + m_Value: 0 + m_SkyVersion: 3 + m_ObsoleteEarthPreset: + m_OverrideState: 0 + m_Value: 1 + planetaryRadius: + m_OverrideState: 0 + m_Value: 6378100 + planetCenterPosition: + m_OverrideState: 0 + m_Value: {x: 0, y: -6378100, z: 0} +--- !u!114 &5305602202033311358 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8c604242b4dd4c8caa4d1944b94189e0, type: 3} + m_Name: HighQualityLineRenderingVolumeComponent + m_EditorClassIdentifier: + active: 1 + enable: + m_OverrideState: 1 + m_Value: 1 + compositionMode: + m_OverrideState: 1 + m_Value: 0 + clusterCount: + m_OverrideState: 1 + m_Value: 24 + sortingQuality: + m_OverrideState: 1 + m_Value: 1 + tileOpacityThreshold: + m_OverrideState: 1 + m_Value: 0.95 + writeDepthAlphaThreshold: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &5315503232242033309 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2d08ce26990eb1a4a9177b860541e702, type: 3} + m_Name: Exposure + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 1 + meteringMode: + m_OverrideState: 0 + m_Value: 2 + luminanceSource: + m_OverrideState: 0 + m_Value: 1 + fixedExposure: + m_OverrideState: 0 + m_Value: 0 + compensation: + m_OverrideState: 0 + m_Value: 0 + limitMin: + m_OverrideState: 0 + m_Value: -10 + limitMax: + m_OverrideState: 0 + m_Value: 10 + curveMap: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: -10 + value: -10 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 20 + value: 20 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + limitMinCurveMap: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: -10 + value: -12 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 20 + value: 18 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + limitMaxCurveMap: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: -10 + value: -8 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 20 + value: 22 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + adaptationMode: + m_OverrideState: 0 + m_Value: 1 + adaptationSpeedDarkToLight: + m_OverrideState: 0 + m_Value: 3 + adaptationSpeedLightToDark: + m_OverrideState: 0 + m_Value: 1 + weightTextureMask: + m_OverrideState: 0 + m_Value: {fileID: 0} + histogramPercentages: + m_OverrideState: 0 + m_Value: {x: 40, y: 90} + histogramUseCurveRemapping: + m_OverrideState: 0 + m_Value: 0 + targetMidGray: + m_OverrideState: 0 + m_Value: 0 + centerAroundExposureTarget: + m_OverrideState: 0 + m_Value: 0 + proceduralCenter: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + proceduralRadii: + m_OverrideState: 0 + m_Value: {x: 0.3, y: 0.3} + maskMinIntensity: + m_OverrideState: 0 + m_Value: -30 + maskMaxIntensity: + m_OverrideState: 0 + m_Value: 30 + proceduralSoftness: + m_OverrideState: 0 + m_Value: 0.5 +--- !u!114 &7502528774814404555 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9008a067f4d626c4d8bc4bc48f04bb89, type: 3} + m_Name: AmbientOcclusion + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + rayTracing: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0.5 + directLightingStrength: + m_OverrideState: 0 + m_Value: 0 + radius: + m_OverrideState: 1 + m_Value: 1.5 + spatialBilateralAggressiveness: + m_OverrideState: 0 + m_Value: 0.15 + temporalAccumulation: + m_OverrideState: 0 + m_Value: 1 + ghostingReduction: + m_OverrideState: 0 + m_Value: 0.5 + blurSharpness: + m_OverrideState: 0 + m_Value: 0.1 + layerMask: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Bits: 4294967295 + specularOcclusion: + m_OverrideState: 0 + m_Value: 0.5 + occluderMotionRejection: + m_OverrideState: 0 + m_Value: 1 + receiverMotionRejection: + m_OverrideState: 0 + m_Value: 1 + m_StepCount: + m_OverrideState: 0 + m_Value: 6 + m_FullResolution: + m_OverrideState: 0 + m_Value: 0 + m_MaximumRadiusInPixels: + m_OverrideState: 0 + m_Value: 40 + m_BilateralUpsample: + m_OverrideState: 0 + m_Value: 1 + m_DirectionCount: + m_OverrideState: 0 + m_Value: 2 + m_RayLength: + m_OverrideState: 0 + m_Value: 3 + m_SampleCount: + m_OverrideState: 0 + m_Value: 2 + m_Denoise: + m_OverrideState: 0 + m_Value: 1 + m_DenoiserRadius: + m_OverrideState: 0 + m_Value: 0.5 +--- !u!114 &7542669330009093999 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f086a068d4c5889438831b3ae9afc11c, type: 3} + m_Name: Tonemapping + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 2 + useFullACES: + m_OverrideState: 0 + m_Value: 0 + toeStrength: + m_OverrideState: 0 + m_Value: 0 + toeLength: + m_OverrideState: 0 + m_Value: 0.5 + shoulderStrength: + m_OverrideState: 0 + m_Value: 0 + shoulderLength: + m_OverrideState: 0 + m_Value: 0.5 + shoulderAngle: + m_OverrideState: 0 + m_Value: 0 + gamma: + m_OverrideState: 0 + m_Value: 1 + lutTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + lutContribution: + m_OverrideState: 0 + m_Value: 1 + neutralHDRRangeReductionMode: + m_OverrideState: 0 + m_Value: 2 + acesPreset: + m_OverrideState: 0 + m_Value: 3 + fallbackMode: + m_OverrideState: 0 + m_Value: 1 + hueShiftAmount: + m_OverrideState: 0 + m_Value: 0 + detectPaperWhite: + m_OverrideState: 0 + m_Value: 0 + paperWhite: + m_OverrideState: 0 + m_Value: 300 + detectBrightnessLimits: + m_OverrideState: 0 + m_Value: 1 + minNits: + m_OverrideState: 0 + m_Value: 0.005 + maxNits: + m_OverrideState: 0 + m_Value: 1000 +--- !u!114 &7686318427622180703 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ddcec8a8eb2d684d833ac8f5d26aebd, type: 3} + m_Name: HDShadowSettings + m_EditorClassIdentifier: + active: 1 + interCascadeBorders: 1 + maxShadowDistance: + m_OverrideState: 1 + m_Value: 150 + directionalTransmissionMultiplier: + m_OverrideState: 0 + m_Value: 1 + cascadeShadowSplitCount: + m_OverrideState: 0 + m_Value: 4 + cascadeShadowSplit0: + m_OverrideState: 0 + m_Value: 0.05 + cascadeShadowSplit1: + m_OverrideState: 0 + m_Value: 0.15 + cascadeShadowSplit2: + m_OverrideState: 0 + m_Value: 0.3 + cascadeShadowBorder0: + m_OverrideState: 1 + m_Value: 0.06905067 + cascadeShadowBorder1: + m_OverrideState: 1 + m_Value: 0.05086228 + cascadeShadowBorder2: + m_OverrideState: 0 + m_Value: 0 + cascadeShadowBorder3: + m_OverrideState: 0 + m_Value: 0 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold SDF.asset.meta b/Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset.meta similarity index 79% rename from Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold SDF.asset.meta rename to Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset.meta index b6bb38e..880ba9d 100644 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold SDF.asset.meta +++ b/Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d87cbfe2ec8a9b04aa5c532acc09f9e7 +guid: 74a4cf74bd523614db86691e288028a3 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset b/Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset new file mode 100644 index 0000000..c19d82a --- /dev/null +++ b/Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset @@ -0,0 +1,863 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 781cc897cf8675041a751163b51f97dd, type: 3} + m_Name: HDRenderPipelineGlobalSettings + m_EditorClassIdentifier: Unity.RenderPipelines.HighDefinition.Runtime::UnityEngine.Rendering.HighDefinition.HDRenderPipelineGlobalSettings + m_CustomPostProcessOrdersSettings: + m_Version: 0 + m_BeforeTransparentCustomPostProcesses: + m_InjectionPoint: 0 + m_CustomPostProcessTypesAsString: [] + m_BeforeTAACustomPostProcesses: + m_InjectionPoint: 3 + m_CustomPostProcessTypesAsString: [] + m_BeforePostProcessCustomPostProcesses: + m_InjectionPoint: 1 + m_CustomPostProcessTypesAsString: [] + m_AfterPostProcessBlursCustomPostProcesses: + m_InjectionPoint: 4 + m_CustomPostProcessTypesAsString: [] + m_AfterPostProcessCustomPostProcesses: + m_InjectionPoint: 2 + m_CustomPostProcessTypesAsString: [] + beforeTransparentCustomPostProcesses: [] + beforePostProcessCustomPostProcesses: [] + afterPostProcessBlursCustomPostProcesses: [] + afterPostProcessCustomPostProcesses: [] + beforeTAACustomPostProcesses: [] + m_ShaderStrippingSetting: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 + m_ShaderVariantLogLevel: 0 + m_SupportRuntimeDebugDisplay: 0 + m_ExportShaderVariants: 1 + m_StripDebugVariants: 0 + DLSSProjectId: 000000 + useDLSSCustomProjectId: 0 + supportProbeVolumes: 0 + autoRegisterDiffusionProfiles: 1 + analyticDerivativeEmulation: 0 + analyticDerivativeDebugOutput: 0 + lensAttenuationMode: 0 + colorGradingSpace: 0 + m_ObsoleteDiffusionProfileSettingsList: [] + specularFade: 0 + rendererListCulling: 0 + m_ObsoleteDefaultVolumeProfile: {fileID: 0} + m_ObsoleteLookDevVolumeProfile: {fileID: 0} + m_ObsoleteRenderingPathDefaultCameraFrameSettings: + bitDatas: + data1: 5770166122053581 + data2: 12934340311651418136 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_ObsoleteRenderingPathDefaultBakedOrCustomReflectionFrameSettings: + bitDatas: + data1: 4643523019153229 + data2: 12898309406071980048 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_ObsoleteRenderingPathDefaultRealtimeReflectionFrameSettings: + bitDatas: + data1: 4638910381585229 + data2: 12898310333516513304 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_ObsoleteRenderingPath: + m_Version: 0 + m_Camera: + bitDatas: + data1: 5770166122053581 + data2: 12934340311651418136 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_CustomOrBakedReflection: + bitDatas: + data1: 4643523019153229 + data2: 12898309406071980048 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_RealtimeReflection: + bitDatas: + data1: 4638910381585229 + data2: 12898310333516513304 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_Settings: + m_SettingsList: + m_List: + - rid: 2550939681210236999 + - rid: 2550939681210237000 + - rid: 2550939681210237001 + - rid: 2550939681210237002 + - rid: 2550939681210237003 + - rid: 2550939681210237004 + - rid: 2550939681210237005 + - rid: 2550939681210237006 + - rid: 2550939681210237007 + - rid: 2550939681210237008 + - rid: 2550939681210237009 + - rid: 2550939681210237010 + - rid: 2550939681210237011 + - rid: 2550939681210237012 + - rid: 2550939681210237013 + - rid: 2550939681210237014 + - rid: 2550939681210237015 + - rid: 2550939681210237016 + - rid: 2550939681210237017 + - rid: 2550939681210237018 + - rid: 2550939681210237019 + - rid: 2550939681210237020 + - rid: 2550939681210237021 + - rid: 2550939681210237022 + - rid: 2550939681210237023 + - rid: 2550939681210237024 + - rid: 2550939681210237025 + - rid: 2550939681210237026 + - rid: 2550939681210237027 + - rid: 2550939681210237028 + - rid: 2550939681210237029 + - rid: 2550939681210237030 + - rid: 2550939681210237031 + - rid: 2550939681210237032 + - rid: 2550939681210237033 + - rid: 2550939681210237034 + m_RuntimeSettings: + m_List: [] + renderingLayerNames: + - Default + lightLayerName0: + lightLayerName1: + lightLayerName2: + lightLayerName3: + lightLayerName4: + lightLayerName5: + lightLayerName6: + lightLayerName7: + decalLayerName0: + decalLayerName1: + decalLayerName2: + decalLayerName3: + decalLayerName4: + decalLayerName5: + decalLayerName6: + decalLayerName7: + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + m_Version: 14 + references: + version: 2 + RefIds: + - rid: 2550939681210236999 + type: {class: HDRenderPipelineRuntimeTextures, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_DebugFontTex: {fileID: 2800000, guid: a3ad2df0e49aaa341a3b3a80f93b3f66, type: 3} + m_ColorGradient: {fileID: 2800000, guid: 4ea52e665573c1644bf05dd9b11fd2a4, type: 3} + m_MatcapTex: {fileID: 2800000, guid: e655445a13b501944a2641ea144edda5, type: 3} + m_BlueNoise16LTex: + - {fileID: 2800000, guid: efa2ea5416a18da46b64f1266464ffc7, type: 3} + - {fileID: 2800000, guid: 0330b95d1d741fc4281eac4aec9d2eae, type: 3} + - {fileID: 2800000, guid: 8a51abfa06f36a24e8621796aa6cd4b3, type: 3} + - {fileID: 2800000, guid: 29f15236a89d7d748abaa25d8f69f614, type: 3} + - {fileID: 2800000, guid: 6abadf255584bba4c944b1e00436ef03, type: 3} + - {fileID: 2800000, guid: 979eec7b1833b0441a2cc73bf8db2544, type: 3} + - {fileID: 2800000, guid: 8f520abb155364c46b0f0748ef34ec0d, type: 3} + - {fileID: 2800000, guid: 8b7bdf66a62cb51409d47548bb0d542f, type: 3} + - {fileID: 2800000, guid: fed7135c4936ff947b1477236ec392cd, type: 3} + - {fileID: 2800000, guid: 3c2108b42cf27e3479d8587367508c6f, type: 3} + - {fileID: 2800000, guid: b6fa54cec31997445a1b5fd8e2887484, type: 3} + - {fileID: 2800000, guid: 79f42a2cc0e32614ba4e0fee3e0f88b9, type: 3} + - {fileID: 2800000, guid: a75de30c08d74744c9e973e42c2e00e5, type: 3} + - {fileID: 2800000, guid: c6c47a7f59293a847a8471bb74b9a262, type: 3} + - {fileID: 2800000, guid: 55e474b0d2c992240aed7e3bcbebb78a, type: 3} + - {fileID: 2800000, guid: b987ab952dc89bc439eebfaf7b977f51, type: 3} + - {fileID: 2800000, guid: f242013130364874486ad0854d54b5d9, type: 3} + - {fileID: 2800000, guid: 5e40f3339a0a5be4ea4442562c53575a, type: 3} + - {fileID: 2800000, guid: 6f6e861d2ff8cd641b424245a18393a0, type: 3} + - {fileID: 2800000, guid: 96b4b7db9e972c54db03d280a7924fb8, type: 3} + - {fileID: 2800000, guid: f8c387db83f623d4c875b355974b1398, type: 3} + - {fileID: 2800000, guid: ba5d54ee870713c41a40c8435ad4fdea, type: 3} + - {fileID: 2800000, guid: 98de916e94bbf4541981fe7c1bd7008f, type: 3} + - {fileID: 2800000, guid: e013b0f34384ea242b2366eafe8d66b4, type: 3} + - {fileID: 2800000, guid: 08e7f74e876f85247ad1104f35322e19, type: 3} + - {fileID: 2800000, guid: eaed38d1a2336e14b8fd351f65d3eddb, type: 3} + - {fileID: 2800000, guid: 9b47ce76307ef714d9c08f1f7d37a173, type: 3} + - {fileID: 2800000, guid: 4cf893d4f07705d40a404330fb6694d5, type: 3} + - {fileID: 2800000, guid: 4ba6dd9a348fff64aba90f736da533bd, type: 3} + - {fileID: 2800000, guid: faedd3bf25384dc47b38a94a658e19fc, type: 3} + - {fileID: 2800000, guid: cb7d595d4b67de146abf1b1f4d45f417, type: 3} + - {fileID: 2800000, guid: a836cbb14cfefd54a8b9ca37d6aadde6, type: 3} + m_BlueNoise16RGBTex: + - {fileID: 2800000, guid: b232903ea527aba4786ab9a725e610e9, type: 3} + - {fileID: 2800000, guid: fe6c6d7fed228ae4c9034639926613ff, type: 3} + - {fileID: 2800000, guid: 1dae10311eb6da5428b4247f883f9f0c, type: 3} + - {fileID: 2800000, guid: 668a0101474cc3149bdf7b69bdaad1eb, type: 3} + - {fileID: 2800000, guid: a3a352512b3774b44aeeb7414aafce58, type: 3} + - {fileID: 2800000, guid: f3767acdf061ed14380a360366ffe91c, type: 3} + - {fileID: 2800000, guid: a0d5f1353077a9d4d9bf0fdfbc07d718, type: 3} + - {fileID: 2800000, guid: 5a195bcf888979144a5db9a99c43a747, type: 3} + - {fileID: 2800000, guid: 8d79e4efe64973b4ab5c6e3982b15772, type: 3} + - {fileID: 2800000, guid: eaf67a58951a945428cb394e81ed3765, type: 3} + - {fileID: 2800000, guid: 287dda93fa25eea4fbb9f7f5ef014718, type: 3} + - {fileID: 2800000, guid: 4cb7c602f368c2d44b42c51c353e5b2c, type: 3} + - {fileID: 2800000, guid: 3fa94aebb9c04c54aa0cebde90c210ff, type: 3} + - {fileID: 2800000, guid: aa35bbfe9eac94d49bb95cd8804c51a7, type: 3} + - {fileID: 2800000, guid: ba3b2a48f5297c74eb3b4b2771629d60, type: 3} + - {fileID: 2800000, guid: 17165acde01c02f4bb45d0ffd25d5158, type: 3} + - {fileID: 2800000, guid: 280a79ac7e2b6e940a7199b8f7e10407, type: 3} + - {fileID: 2800000, guid: b75a320b602f27c4ab28904a10142a98, type: 3} + - {fileID: 2800000, guid: 226149deca448e745a7c377133e6ca7f, type: 3} + - {fileID: 2800000, guid: 059fba768df29964e9f07bd4fffb5776, type: 3} + - {fileID: 2800000, guid: 9dee14979276d81489a17afa605f3030, type: 3} + - {fileID: 2800000, guid: 3963568f414ac1545b64e5f1ff5daf5d, type: 3} + - {fileID: 2800000, guid: a96a5d146fa164d4ebd67318a957a75a, type: 3} + - {fileID: 2800000, guid: b5fa2a735b9278349a91f3dbb77691c0, type: 3} + - {fileID: 2800000, guid: d3c864eb1f6e4b34c91d1931ad0064a3, type: 3} + - {fileID: 2800000, guid: 97f308a7009457545a975a9a498499ce, type: 3} + - {fileID: 2800000, guid: daa405d7e1e253a40952bed9e9ca63cc, type: 3} + - {fileID: 2800000, guid: 4dbadef8044229d47b9a391147dad1c4, type: 3} + - {fileID: 2800000, guid: 7ce9507d3d1997743b39f335a7f868fd, type: 3} + - {fileID: 2800000, guid: 7641a2b116fafd64d9c3d6459fdfe801, type: 3} + - {fileID: 2800000, guid: c6a5e40e6746fef4fa486e8f620ee8d4, type: 3} + - {fileID: 2800000, guid: fd4189357c6dfb94fa2d36afbce72086, type: 3} + m_OwenScrambledRGBATex: {fileID: 2800000, guid: b0fe077c1ee7d80428f3d8dfa28a027d, type: 3} + m_OwenScrambled256Tex: {fileID: 2800000, guid: 2a205358e67aa9e4a94a128ac9362f4e, type: 3} + m_ScramblingTex: {fileID: 2800000, guid: bf25cd6288e2c8d43854a61a8496a830, type: 3} + m_RankingTile1SPP: {fileID: 2800000, guid: f2fe0251f704c4c478a8063775cffedb, type: 3} + m_ScramblingTile1SPP: {fileID: 2800000, guid: 6185473f62ad3e74da4acac5d482917a, type: 3} + m_RankingTile8SPP: {fileID: 2800000, guid: af4bd638a4b3eb14781e6441adcdfbb9, type: 3} + m_ScramblingTile8SPP: {fileID: 2800000, guid: 152f8b933250a7b448fc2d4d301b9944, type: 3} + m_RankingTile256SPP: {fileID: 2800000, guid: 1e604a266c415cd46b36d97cd9220aa8, type: 3} + m_ScramblingTile256SPP: {fileID: 2800000, guid: 882fb55d7b3e7c94598a318df9376e32, type: 3} + m_EyeCausticLUT: {fileID: 11700000, guid: d4ec12283a044584794485916f4142a9, type: 3} + m_HairAttenuationLUT: {fileID: 11700000, guid: d37662e2b254e594abf839dddc5ab653, type: 2} + m_HairAzimuthalScatteringLUT: {fileID: 11700000, guid: d217deac7ff61094080126811521ab5b, type: 2} + m_HairLongitudinalScatteringLUT: {fileID: 11700000, guid: 0da412d38ea6ba3459322abe6984ca9b, type: 2} + m_FilmGrainTex: + - {fileID: 2800000, guid: 284a1ac236869fa4eacf377d73c7dff8, type: 3} + - {fileID: 2800000, guid: bd74961b009b93145a998ae93a5fc186, type: 3} + - {fileID: 2800000, guid: 58c1a5135746f854e8841c70a4b588b9, type: 3} + - {fileID: 2800000, guid: bdc6fb6e37de5824bb06e17ac19a8a1d, type: 3} + - {fileID: 2800000, guid: e4d8303457ba4854090965d854a7a741, type: 3} + - {fileID: 2800000, guid: 75e19bf5d3ef41d489aa05586243b58b, type: 3} + - {fileID: 2800000, guid: 6cafd4bed3e420a45a5702d61df0762c, type: 3} + - {fileID: 2800000, guid: a187955d1d88a954cb32c3c4e5f0aeda, type: 3} + - {fileID: 2800000, guid: 3f3cb0f4924d7a241b82a9081875f30d, type: 3} + - {fileID: 2800000, guid: a35bdcb2008832646b3c8d2eb11e38a9, type: 3} + m_SMAASearchTex: {fileID: 2800000, guid: dc95d70472e232b438d0fd38651e7ec2, type: 3} + m_SMAAAreaTex: {fileID: 2800000, guid: 92e0d85ab4eca874098e7fcf6f8f674e, type: 3} + m_DefaultHDRISky: {fileID: 8900000, guid: 8253d41e6e8b11a4cbe77a4f8f82934d, type: 3} + m_DefaultCloudMap: {fileID: 2800000, guid: 57a33fc2476a01644865bfde5f06e2f4, type: 3} + - rid: 2550939681210237000 + type: {class: HDRPDefaultVolumeProfileSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_VolumeProfile: {fileID: 11400000, guid: 74a4cf74bd523614db86691e288028a3, type: 2} + - rid: 2550939681210237001 + type: {class: VolumetricCloudsRuntimeResources, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_VolumetricCloudsCS: {fileID: 7200000, guid: f911a8577fa9a4546a6b255bcf888baf, type: 3} + m_VolumetricCloudsTraceCS: {fileID: 7200000, guid: 66eaa9becc91a8646a88c15375af8b86, type: 3} + m_VolumetricCloudsTraceShadowsCS: {fileID: 7200000, guid: f350c5c3b41fd1b408aac9076f96610e, type: 3} + m_VolumetricCloudsShadowFilterCS: {fileID: 7200000, guid: 771ea9a52996c024095906ac37a8a71f, type: 3} + m_VolumetricCloudMapGeneratorCS: {fileID: 7200000, guid: 6b22771f0aa98744cb09f455a5a818cb, type: 3} + m_VolumetricCloudsCombinePS: {fileID: 4800000, guid: 12f1a69ddf916f042ae6ce8a994506f3, type: 3} + m_CloudLutRainAO: {fileID: 2800000, guid: e0bcfddf26ed5584ba3d8b94d3200114, type: 3} + m_WorleyNoise128RGBA: {fileID: 11700000, guid: 1fe54a721d0e2504e89f121c723404a8, type: 3} + m_WorleyNoise32RGB: {fileID: 11700000, guid: ec156c314a242914dbb706f73ad78cf2, type: 3} + m_PerlinNoise32RGB: {fileID: 11700000, guid: d1aae012f8a4f23478471851f17ff915, type: 3} + - rid: 2550939681210237002 + type: {class: LookDevVolumeProfileSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_VolumeProfile: {fileID: 11400000, guid: c0249bc9528ffb242a4f01ce0d2383f2, type: 2} + - rid: 2550939681210237003 + type: {class: HDRPRayTracingResources, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_ReflectionRayTracingRT: {fileID: 4807578003741378534, guid: 1a500e5079fba734aa90fe92e70ea131, type: 3} + m_ReflectionRayTracingCS: {fileID: 7200000, guid: 591207652a75a4844a89c0b9f45a61f2, type: 3} + m_ReflectionBilateralFilterCS: {fileID: 7200000, guid: 07c445e7aa373284a9cc1584ca9b3f84, type: 3} + m_ShadowRayTracingRT: {fileID: 4807578003741378534, guid: 6f93cb4dc095de14993f8d2baa972d5b, type: 3} + m_ContactShadowRayTracingRT: {fileID: 4807578003741378534, guid: acaf840af875ab541b8f10069b7444c8, type: 3} + m_ShadowRayTracingCS: {fileID: 7200000, guid: fc95b5dff16ba594896e211a389c03fc, type: 3} + m_ShadowFilterCS: {fileID: 7200000, guid: f71fd853a538bf74e9e5a7228fc14dae, type: 3} + m_ForwardRayTracing: {fileID: 4807578003741378534, guid: d3a89a2d3f73b3e4da6f191e844fe68c, type: 3} + m_LightClusterBuildCS: {fileID: 7200000, guid: c0625ea908b52854bbf1d456e34026e4, type: 3} + m_LightClusterDebugS: {fileID: 4800000, guid: c4d81c6e573560444bb1ea11ae4acfcb, type: 3} + m_LightClusterDebugCS: {fileID: 7200000, guid: d48a3a5496d98a44c89f335934805d10, type: 3} + m_IndirectDiffuseRayTracingOffRT: {fileID: 4807578003741378534, guid: fbcaf423d9f8e3843b2c046420608293, type: 3} + m_IndirectDiffuseRayTracingL1RT: {fileID: 4807578003741378534, guid: 653044b9878c5764e818b20399112284, type: 3} + m_IndirectDiffuseRaytracingL2RT: {fileID: 4807578003741378534, guid: 866a72c4868acec4088b0956b9ca73f9, type: 3} + m_IndirectDiffuseRayTracingCS: {fileID: 7200000, guid: c5ad968b7cd39114d85dd860b3809087, type: 3} + m_AoRayTracingRT: {fileID: 4807578003741378534, guid: 82dc8cd069971d2488c502b0f32b94fb, type: 3} + m_AoRayTracingCS: {fileID: 7200000, guid: 10c05366baf9b0a44a827f3ef890b9e6, type: 3} + m_SubSurfaceRayTracingRT: {fileID: 4807578003741378534, guid: b29a18f967c92364492508dddf78cff7, type: 3} + m_SubSurfaceRayTracingCS: {fileID: 7200000, guid: 4e5684a8dba46fe42a47642f9b0a6b89, type: 3} + m_SimpleDenoiserCS: {fileID: 7200000, guid: 74a980f1da9a4f842996035350fe756c, type: 3} + m_ReflectionDenoiserCS: {fileID: 7200000, guid: 1b12fb238086d0f49983b4aa72768349, type: 3} + m_DiffuseShadowDenoiserCS: {fileID: 7200000, guid: 9af806eab5889a74dad838edc9b07d07, type: 3} + m_ReblurPreBlurCS: {fileID: 7200000, guid: 0be88ddf5240d49468d9159340465bfd, type: 3} + m_ReblurTemporalAccumulationCS: {fileID: 7200000, guid: 11794ae415a38c747ba65d57d1bb60f9, type: 3} + m_ReblurMipGenerationCS: {fileID: 7200000, guid: 44195ddb6d9240646847cbf4f38dfa98, type: 3} + m_ReblurHistoryFixCS: {fileID: 7200000, guid: 4cc204b99166a9c40819bc04927c4feb, type: 3} + m_ReblurBlurCS: {fileID: 7200000, guid: cff077c60ac76074893014e2f49e3159, type: 3} + m_ReblurPostBlurCS: {fileID: 7200000, guid: 965700f9b9e0fec4bb31415ae91f0e09, type: 3} + m_ReblurCopyHistoryCS: {fileID: 7200000, guid: 0d5230c403883b84cbf9d1d3b9e57beb, type: 3} + m_ReblurTemporalStabilizationCS: {fileID: 7200000, guid: 4feaa605aeff33840b659850ce6bfcc2, type: 3} + m_GBufferRayTracingRT: {fileID: 4807578003741378534, guid: e4c61a77b91f35845bbb546b848b18e5, type: 3} + m_DeferredRayTracingCS: {fileID: 7200000, guid: 6e5ef632062bc484f812c7976f450ed1, type: 3} + m_PathTracingRT: {fileID: 4807578003741378534, guid: c4f4525a058009a409fea974f9ad8d03, type: 3} + m_PathTracingSkySamplingDataCS: {fileID: 7200000, guid: 8ef71a4b666992544ac5575a0e599a68, type: 3} + m_RayMarchingCS: {fileID: 7200000, guid: 78d9a89700295a4418d0921bf27e1857, type: 3} + m_RayBinningCS: {fileID: 7200000, guid: cddcb515ffe9a914893d6d8fc1d85454, type: 3} + m_CountTracedRaysCS: {fileID: 7200000, guid: e1f3fa867f1dfbd4ab7dd4d39d2b96d8, type: 3} + m_ReflectionFilterMappingTexture: {fileID: 2800000, guid: 82eec49626a00b047ba86244607816c8, type: 3} + m_RtasDebugRT: {fileID: 4807578003741378534, guid: 7f98079d20376fd4f8590d58be99ab0d, type: 3} + - rid: 2550939681210237004 + type: {class: DiffusionProfileDefaultSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_AutoRegisterDiffusionProfiles: 0 + - rid: 2550939681210237005 + type: {class: AnalyticDerivativeSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_AnalyticDerivativeEmulation: 0 + m_AnalyticDerivativeDebugOutput: 0 + - rid: 2550939681210237006 + type: {class: RenderGraphSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_DynamicRenderPassCulling: 0 + - rid: 2550939681210237007 + type: {class: SpecularFadeSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_SpecularFade: 0 + - rid: 2550939681210237008 + type: {class: ColorGradingSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_ColorGradingSpace: 0 + - rid: 2550939681210237009 + type: {class: LensSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_LensAttenuationMode: 0 + - rid: 2550939681210237010 + type: {class: HDRenderPipelineEditorMaterials, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_DefaultMaterial: {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + m_DefaultParticleMaterial: {fileID: 2100000, guid: b739a3f02ff77bf48b7636e64c3e3b4c, type: 2} + m_DefaultTerrainMaterial: {fileID: 2100000, guid: 22ff8771d87ef27429e670136399094b, type: 2} + m_DefaultMirrorMat: {fileID: 2100000, guid: 6b17274157b33bc45b6a40e7d4ff51fe, type: 2} + m_DefaultDecalMat: {fileID: 2100000, guid: 500e733574922d04ea961553b1b26a63, type: 2} + m_GUITextureBlit2SRGB: {fileID: 2100000, guid: 6e95c04e4e686554e8bed96ee69f690c, type: 2} + - rid: 2550939681210237011 + type: {class: WaterSystemGlobalSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 1 + m_EnableMaskAndCurrentWaterDecals: 0 + - rid: 2550939681210237012 + type: {class: CustomPostProcessOrdersSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_BeforeTransparentCustomPostProcesses: + m_InjectionPoint: 0 + m_CustomPostProcessTypesAsString: [] + m_BeforeTAACustomPostProcesses: + m_InjectionPoint: 3 + m_CustomPostProcessTypesAsString: [] + m_BeforePostProcessCustomPostProcesses: + m_InjectionPoint: 1 + m_CustomPostProcessTypesAsString: [] + m_AfterPostProcessBlursCustomPostProcesses: + m_InjectionPoint: 4 + m_CustomPostProcessTypesAsString: [] + m_AfterPostProcessCustomPostProcesses: + m_InjectionPoint: 2 + m_CustomPostProcessTypesAsString: [] + - rid: 2550939681210237013 + type: {class: WaterSystemRuntimeResources, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_WaterMaterial: {fileID: -876546973899608171, guid: 3fda5e465882bec4d8e64161b681806c, type: 3} + m_WaterExclusionMaterial: {fileID: 2100000, guid: 1e520c84f7fd17c46af5586f6632155c, type: 2} + m_WaterDecalMaterial: {fileID: -876546973899608171, guid: 7e2c0d424490bfc4698c37245b8c63ed, type: 3} + m_WaterSimulationCS: {fileID: 7200000, guid: 32ac7f445960a854595586a600c24034, type: 3} + m_FourierTransformCS: {fileID: 7200000, guid: bc2ee21836a0b5147900ef35a6e1f508, type: 3} + m_WaterEvaluationCS: {fileID: 7200000, guid: c24e765a2bbaace4d9a0ecec600e1967, type: 3} + m_WaterPS: {fileID: -6465566751694194690, guid: 3fda5e465882bec4d8e64161b681806c, type: 3} + m_WaterLightingCS: {fileID: 7200000, guid: 05d00ad19f202ee4891fdaa90d6d1b23, type: 3} + m_WaterLineCS: {fileID: 7200000, guid: 1e7e38362b5026d44ab4f3ff4a612026, type: 3} + m_WaterCausticsPS: {fileID: 4800000, guid: 020d64d10886f754e91664d240248c13, type: 3} + m_WaterDecalPS: {fileID: 4800000, guid: cf863cbd7bbd44a43b414caed214ba29, type: 3} + m_WaterDeformationCS: {fileID: 7200000, guid: 9b8063fa5834d4243bfca8c68a92d9f1, type: 3} + m_WaterFoamCS: {fileID: 7200000, guid: 0d16d14b783e65f4d81dbcece2bd0ef9, type: 3} + m_WaterDecalMigrationShader: {fileID: -6465566751694194690, guid: 9f1661ed5b4d6ee4685ad5683b09a903, type: 3} + m_FoamMask: {fileID: 2800000, guid: ca1d72d84c34dba4390eab4c86e62f62, type: 3} + - rid: 2550939681210237014 + type: {class: HDRenderPipelineEditorAssets, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_DefaultSettingsVolumeProfile: {fileID: 11400000, guid: f940a8037e6cda542891dc1aac1fa4e8, type: 2} + m_LookDevDefaultLookDevVolumeProfile: {fileID: 11400000, guid: 254c4fe87beb7be4fa72e1681edbed02, type: 2} + m_DefaultDiffusionProfileSettingsList: + - {fileID: 11400000, guid: 404820c4cf36ad944862fa59c56064f0, type: 2} + - {fileID: 11400000, guid: 2384dbf2c1c420f45a792fbc315fbfb1, type: 2} + - rid: 2550939681210237015 + type: {class: HDRenderPipelineEditorTextures, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_MoonAlbedo: {fileID: 2800000, guid: cce9f0cf7e606e547a7317aedb4ad6d9, type: 3} + - rid: 2550939681210237016 + type: {class: HDRenderPipelineRuntimeAssets, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_DefaultDiffusionProfile: {fileID: 11400000, guid: 2b7005ba3a4d8474b8cdc34141ad766e, type: 2} + m_ComputeMaterialLibrary: {fileID: 11400000, guid: 833ab0ec618db411699ea8cb1a221d0d, type: 2} + m_EmissiveCylinderMesh: {fileID: 2534964839176971238, guid: accb6d90f0d50fe4ca0f68159b4323de, type: 3} + m_EmissiveQuadMesh: {fileID: 4300000, guid: 1d5a8595286f94f4bb54171d49f473c3, type: 3} + m_SphereMesh: {fileID: 4300000, guid: 9e0af751bc36ea146940ba245193e28c, type: 3} + - rid: 2550939681210237017 + type: {class: HDRenderPipelineRuntimeShaders, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_DefaultShader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_CameraMotionVectorsPS: {fileID: 4800000, guid: 035941b63024d1943af48811c1db20d9, type: 3} + m_ColorPyramidPS: {fileID: 4800000, guid: 2fcfb8d92f45e4549b3f0bad5d0654bf, type: 3} + m_ColorPyramidCS: {fileID: 7200000, guid: 4e3267a1135742441a14298d8dcac04a, type: 3} + m_DepthPyramidCS: {fileID: 7200000, guid: 64a553bb564274041906f78ffba955e4, type: 3} + m_MaxZCS: {fileID: 7200000, guid: e95abf8c7230c344595f41c4dd5ff517, type: 3} + m_ApplyDistortionPS: {fileID: 4800000, guid: 02ae56f4306413c4a96dcf005cde1971, type: 3} + m_CustomPassUtils: {fileID: 4800000, guid: 7e3722d0388000848acb25fd3cc8c088, type: 3} + m_CustomPassRenderersUtils: {fileID: 4800000, guid: cef5ba33ee5063d4c8b495d2292e394d, type: 3} + m_ClearStencilBufferPS: {fileID: 4800000, guid: 8ea49ef16606acd489439e676ab84040, type: 3} + m_CopyStencilBufferPS: {fileID: 4800000, guid: 3d1574f1cdfa0ce4995f9bc79ed7f8ec, type: 3} + m_CopyDepthBufferPS: {fileID: 4800000, guid: 42dfcc8fe803ece4096c58630689982f, type: 3} + m_BlitPS: {fileID: 4800000, guid: e22fc1942c664490980b8793dd4a163d, type: 3} + m_BlitColorAndDepthPS: {fileID: 4800000, guid: b22ad378c678348729d3a3f981b9f270, type: 3} + m_DownsampleDepthPS: {fileID: 4800000, guid: 67d6171b0acc6554aad48c845ec7e67f, type: 3} + m_UpsampleTransparentPS: {fileID: 4800000, guid: 2ad7ce40f0dbaf64dadef1f58d8524d3, type: 3} + m_ResolveStencilCS: {fileID: 7200000, guid: 65b89cac5f286b043a31bf8041776ee7, type: 3} + m_DebugDisplayLatlongPS: {fileID: 4800000, guid: c1d1d149a043a5349ba367da6c2051ba, type: 3} + m_DebugViewMaterialGBufferPS: {fileID: 4800000, guid: 439949ea1bfa91b4ba0d04269fcde33d, type: 3} + m_DebugViewTilesPS: {fileID: 4800000, guid: c7c2bd17b06ceb4468e14081aaf1b96f, type: 3} + m_DebugFullScreenPS: {fileID: 4800000, guid: e874aca2df8300a488258738c31f85cf, type: 3} + m_DebugColorPickerPS: {fileID: 4800000, guid: 8137b807709e178498f22ed710864bb0, type: 3} + m_DebugExposurePS: {fileID: 4800000, guid: 0ef322534f047a34c96d29419d56d17a, type: 3} + m_DebugHDRPS: {fileID: 4800000, guid: 9bc5229549892084da43ad706d84f1bc, type: 3} + m_DebugLightVolumePS: {fileID: 4800000, guid: 8e706c0e71fcec34a8f5c9713e5e2943, type: 3} + m_DebugLightVolumeCS: {fileID: 7200000, guid: f5d5d21faef5cf445ac2c5d8ff9c4184, type: 3} + m_DebugBlitQuad: {fileID: 4800000, guid: cf5ca5b6ef18b3f429ed707ee9ceac9f, type: 3} + m_DebugViewVirtualTexturingBlit: {fileID: 4800000, guid: 55d195396b03b804eb78c92d468e3c8e, type: 3} + m_MaterialError: {fileID: 4800000, guid: 79a966a5200a456188dec0d48d805614, type: 3} + m_MaterialLoading: {fileID: 4800000, guid: 392325671f122f540be9033ca5ae7a56, type: 3} + m_ClearDebugBufferCS: {fileID: 7200000, guid: 7fc6041d5cf70004aa33bb1ac64e3c06, type: 3} + m_DebugWaveformPS: {fileID: 4800000, guid: 0024f9d09a828734192f3e1cd5931745, type: 3} + m_DebugWaveformCS: {fileID: 7200000, guid: 62b785f79355903428a21d5d8f8aeabe, type: 3} + m_DebugVectorscopePS: {fileID: 4800000, guid: 7a09af24008164d40ae85ccd6bf87e17, type: 3} + m_DebugVectorscopeCS: {fileID: 7200000, guid: 6a70efb18a2b2964c8eb0fc04aba20e9, type: 3} + m_DebugImageHistogramCS: {fileID: 7200000, guid: 52cc17ef5a5ffc443a5c142f9b745a85, type: 3} + m_DebugHDRxyMappingCS: {fileID: 7200000, guid: f055d2983d992b64494f1a03fc725cde, type: 3} + m_ProbeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 22de19bc461f84742857dd64c56b0397, type: 3} + m_PlanarReflectionFilteringCS: {fileID: 7200000, guid: 9f3f8a01b8caaaa4595591dc96d43dd2, type: 3} + m_ScreenSpaceGlobalIlluminationCS: {fileID: 7200000, guid: 96170a954eb538b40a5ff369552c3629, type: 3} + m_ScreenSpaceReflectionsCS: {fileID: 7200000, guid: d1de9ac7d9016204da289affe9677942, type: 3} + m_ClearDispatchIndirectCS: {fileID: 7200000, guid: fc1f553acb80a6446a32d33e403d0656, type: 3} + m_ClearLightListsCS: {fileID: 7200000, guid: 743eb3491795b9545955695d591195a1, type: 3} + m_BuildDispatchIndirectCS: {fileID: 7200000, guid: 4eb1b418be7044c40bb5200496c50f14, type: 3} + m_BuildScreenAABBCS: {fileID: 7200000, guid: 728dce960f8a9c44bbc3abb3b851d8f6, type: 3} + m_BuildPerTileLightListCS: {fileID: 7200000, guid: 65af3444cbf4b3747a4dead7ee00cfee, type: 3} + m_BuildPerBigTileLightListCS: {fileID: 7200000, guid: 5ee1f9d6e09abe045b2f5e0b784b9072, type: 3} + m_BuildPerVoxelLightListCS: {fileID: 7200000, guid: 0bb1b7e0ddcd5c44baf3ddc7456eb196, type: 3} + m_LightListClusterClearAtomicIndexCS: {fileID: 7200000, guid: 1e3472a94b14a334a93230bbc700d7b2, type: 3} + m_BuildMaterialFlagsCS: {fileID: 7200000, guid: fb3eda953cd6e634e877fb777be2cd08, type: 3} + m_DeferredCS: {fileID: 7200000, guid: 0b64f79746d2daf4198eaf6eab9af259, type: 3} + m_VolumeVoxelizationCS: {fileID: 7200000, guid: c20b371db720da244b73830ec74a343a, type: 3} + m_VolumetricLightingCS: {fileID: 7200000, guid: b4901a10df2d1e24282725e9fbc77c97, type: 3} + m_VolumetricLightingFilteringCS: {fileID: 7200000, guid: ef9a910d0ec6ebb41ae3f5c7a69daf46, type: 3} + m_DefaultFogVolumeShader: {fileID: -6465566751694194690, guid: 95060fe3e070428418e64e6bed27b111, type: 3} + m_ScreenSpaceMultipleScatteringCS: {fileID: 7200000, guid: 29c79555731a206478f0ea448352340c, type: 3} + m_SubsurfaceScatteringCS: {fileID: 7200000, guid: b06a7993621def248addd55d0fe931b1, type: 3} + m_SubsurfaceScatteringDownsampleCS: {fileID: 7200000, guid: 4f8aaf0160a259e499fdfac512ca2692, type: 3} + m_CombineLightingPS: {fileID: 4800000, guid: 2e37131331fbdca449b1a2bc47a639ca, type: 3} + m_BlitCubemapPS: {fileID: 4800000, guid: d05913e251bed7a4992c921c62e1b647, type: 3} + m_OpaqueAtmosphericScatteringPS: {fileID: 4800000, guid: 32f724728cf19904291226f239ec16f0, type: 3} + m_HdriSkyPS: {fileID: 4800000, guid: 9bd32a6ece529fd4f9408b8d7e00c10d, type: 3} + m_IntegrateHdriSkyPS: {fileID: 4800000, guid: 48db2705cf2856d4e893eb30a6892d1b, type: 3} + m_SkyboxCubemapPS: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0} + m_GradientSkyPS: {fileID: 4800000, guid: 2b5d4f1b26f03dc4a873b093e0c4adb1, type: 3} + m_AmbientProbeConvolutionCS: {fileID: 7200000, guid: 6d048f7b1bd45e840b4e79ec92639fa8, type: 3} + m_GroundIrradiancePrecomputationCS: {fileID: 7200000, guid: eb6ae6f326207ee4d987a3e5adddf63a, type: 3} + m_InScatteredRadiancePrecomputationCS: {fileID: 7200000, guid: 70c69d514688f8545855680760d77418, type: 3} + m_PhysicallyBasedSkyPS: {fileID: 4800000, guid: a06934a4863e778498be65d8f865b7a4, type: 3} + m_CloudLayerPS: {fileID: 4800000, guid: 001a47fa123e95a4bba13ecb0442d944, type: 3} + m_BakeCloudTextureCS: {fileID: 7200000, guid: 09a7f6850ee9fb4439e5ebd632127da5, type: 3} + m_BakeCloudShadowsCS: {fileID: 7200000, guid: 3e7317e0800c066448ee07a3e47f102b, type: 3} + m_SkyLUTGenerator: {fileID: 7200000, guid: 79224112d91b32241be6b65802863db4, type: 3} + m_LineStagePrepareCS: {fileID: 7200000, guid: 53231d98bbe64477aacc1adc14ba2619, type: 3} + m_LineStageSetupSegmentCS: {fileID: 7200000, guid: 028836c66d494d8d94e1b2ca7d5382ae, type: 3} + m_LineStageShadingSetupCS: {fileID: 7200000, guid: fefde0fac988da24a93bc2d8d6e0a0a1, type: 3} + m_LineStageRasterBinCS: {fileID: 7200000, guid: 17d1e3e43f0e4c878b40b52848a58a77, type: 3} + m_LineStageWorkQueueCS: {fileID: 7200000, guid: dae4ea8aeff24b16be3f0b2948e0acc5, type: 3} + m_LineStageRasterFineCS: {fileID: 7200000, guid: 8691ac13e67d457abb92eca75e88e995, type: 3} + m_LineCompositePS: {fileID: 4800000, guid: 8d9fbe0862434a2298748d335b9abea5, type: 3} + m_PreIntegratedFGD_GGXDisneyDiffusePS: {fileID: 4800000, guid: 123f13d52852ef547b2962de4bd9eaad, type: 3} + m_PreIntegratedFGD_CharlieFabricLambertPS: {fileID: 4800000, guid: 3b3bf235775cf8b4baae7f3306787ab0, type: 3} + m_PreIntegratedFGD_WardPS: {fileID: 4800000, guid: d279c46a545b0af4f9f0c4fa82cd489e, type: 3} + m_PreIntegratedFGD_CookTorrancePS: {fileID: 4800000, guid: a6402c19b020b4a4fb7073aaa2e26aba, type: 3} + m_PreIntegratedFGD_MarschnerPS: {fileID: 4800000, guid: 31f36caf0a5e7f848a1b5328b6ad3eb8, type: 3} + m_PreIntegratedFiberScatteringCS: {fileID: 7200000, guid: 4a087c9d074552c48aeb85184d56312e, type: 3} + m_VolumetricMaterialCS: {fileID: 7200000, guid: 26f18c9cb0bccbf4481f8c84579affb1, type: 3} + m_EyeMaterialCS: {fileID: 7200000, guid: 76f78ba05cea1ed449c1ef613ab90597, type: 3} + m_FilterAreaLightCookiesPS: {fileID: 4800000, guid: c243aac96dda5fa40bed693ed5ba02c4, type: 3} + m_BuildProbabilityTablesCS: {fileID: 7200000, guid: b9f26cf340afe9145a699753531b2a4c, type: 3} + m_ComputeGgxIblSampleDataCS: {fileID: 7200000, guid: 764a24bb47ef5ba4781d9ae82ca07445, type: 3} + m_GGXConvolvePS: {fileID: 4800000, guid: 123ed592ad5c2494b8aed301fd609e7b, type: 3} + m_CharlieConvolvePS: {fileID: 4800000, guid: 5685fd17e71045e4ca9fefca38a7c177, type: 3} + m_GpuPrefixSumCS: {fileID: 7200000, guid: 76fcf27f72d24907b1846939a7a2d83f, type: 3} + m_GpuSortCS: {fileID: 7200000, guid: e485b8d649234276ababbd36fcec8c1a, type: 3} + m_BilateralUpsampleCS: {fileID: 7200000, guid: 68e831c555284d741b985e05369f0e63, type: 3} + m_TemporalFilterCS: {fileID: 7200000, guid: 741979ff70f7bd6489fbcb464280ecff, type: 3} + m_DiffuseDenoiserCS: {fileID: 7200000, guid: b4ed2382141619f40af1f743a84ccaea, type: 3} + m_FurnaceTestCS: {fileID: 7200000, guid: 9c19385e40e70ea41811a942a46b04a3, type: 3} + m_ObjectIDPS: {fileID: -6465566751694194690, guid: 89daf81f8e8f6634da726cbca859ca38, type: 3} + m_ComputeThicknessPS: {fileID: 4800000, guid: 4d2c6daf0d4968748bb5b82d5016fdea, type: 3} + m_CopyChannelCS: {fileID: 7200000, guid: a4d45eda75e8e474dbe24a31f741f3b4, type: 3} + m_ClearBuffer2D: {fileID: 7200000, guid: fa9b66253270e9c47a67ae142f669eb4, type: 3} + m_EncodeBC6HCS: {fileID: 7200000, guid: aa922d239de60304f964e24488559eeb, type: 3} + m_CubeToPanoPS: {fileID: 4800000, guid: 595434cc3b6405246b6cd3086d0b6f7d, type: 3} + m_BlitCubeTextureFacePS: {fileID: 4800000, guid: d850d0a2481878d4bbf17e5126b04163, type: 3} + m_ClearUIntTextureCS: {fileID: 7200000, guid: d067ad4b88af51c498875426894aef76, type: 3} + m_Texture3DAtlasCS: {fileID: 7200000, guid: 81522e314a83afd4a8ed43bd00757051, type: 3} + m_XrMirrorViewPS: {fileID: 4800000, guid: e6255f98cf405eb45ab6f9006cf11e1f, type: 3} + m_XrOcclusionMeshPS: {fileID: 4800000, guid: 46a45b32bb110604fb36216b63bcdb81, type: 3} + m_ContactShadowCS: {fileID: 7200000, guid: 3e6900e06dc185a4380af4dacb4db0a4, type: 3} + m_ScreenSpaceShadowPS: {fileID: 4800000, guid: bfa43a48695613b4ea19c58858ae1a61, type: 3} + m_ShadowClearPS: {fileID: 4800000, guid: e3cab24f27741f44d8af1e94d006267c, type: 3} + m_EvsmBlurCS: {fileID: 7200000, guid: fb36979473602464fa32deacb9630c08, type: 3} + m_DebugHDShadowMapPS: {fileID: 4800000, guid: 93d40cc9a6e13994f86f576a624efa18, type: 3} + m_DebugLocalVolumetricFogAtlasPS: {fileID: 4800000, guid: 8371b763f09c7304889c22aa97ebdfd2, type: 3} + m_MomentShadowsCS: {fileID: 7200000, guid: 4dea53e2ff15ed0448817c2aa4246e53, type: 3} + m_ShadowBlitPS: {fileID: 4800000, guid: ca059f1af4587a24b9a9eed3b66cff0f, type: 3} + m_DecalNormalBufferPS: {fileID: 4800000, guid: fd532bf1795188c4daaa66ea798b8b0a, type: 3} + m_GTAOCS: {fileID: 7200000, guid: 6710b06492bd58c4bb8aec0fdc1fced3, type: 3} + m_GTAOSpatialDenoiseCS: {fileID: 7200000, guid: 2cb33c21587d12b4388d7866ab6c65f6, type: 3} + m_GTAOTemporalDenoiseCS: {fileID: 7200000, guid: 31e0ca4c210f97c468037d11a5b832bb, type: 3} + m_GTAOCopyHistoryCS: {fileID: 7200000, guid: 7f43be57ffd12ff469d4fc175c00c4b4, type: 3} + m_GTAOBlurAndUpsample: {fileID: 7200000, guid: 9eb1abde882538a4ea46fa23e49ab9fa, type: 3} + m_CopyAlphaCS: {fileID: 7200000, guid: c2c7eb6611725264187721ef9df0354b, type: 3} + m_NanKillerCS: {fileID: 7200000, guid: 83982f199acf927499576a99abc9bea9, type: 3} + m_ExposureCS: {fileID: 7200000, guid: 976d7bce54fae534fb9ec67e9c18570c, type: 3} + m_HistogramExposureCS: {fileID: 7200000, guid: 222da48299136f34b8e3fb75ae9f8ac7, type: 3} + m_ApplyExposureCS: {fileID: 7200000, guid: 1a6fea1dc099b984d8f2b27d504dc096, type: 3} + m_UberPostCS: {fileID: 7200000, guid: f1bf52f7c71bffd4f91e6cd90d12a4f7, type: 3} + m_LutBuilder3DCS: {fileID: 7200000, guid: 37f2b1b0ecd6f1c439e4c1b4f2fdb524, type: 3} + m_DepthOfFieldKernelCS: {fileID: 7200000, guid: 7869415cc3e4eaa4d82ac21a752a2780, type: 3} + m_DepthOfFieldCoCCS: {fileID: 7200000, guid: 048b235b54fbfaa4d80ec85ea847d4f8, type: 3} + m_DepthOfFieldCoCReprojectCS: {fileID: 7200000, guid: 4980decaa3878d6448569489f5fc7931, type: 3} + m_DepthOfFieldDilateCS: {fileID: 7200000, guid: 1c93af4338c0c1b42b92464992eebc10, type: 3} + m_DepthOfFieldMipCS: {fileID: 7200000, guid: d3ef53de069ded64e8377cba6eb951fa, type: 3} + m_DepthOfFieldMipSafeCS: {fileID: 7200000, guid: 2d24ee7b2c804d947a5c371c12ed46bd, type: 3} + m_DepthOfFieldPrefilterCS: {fileID: 7200000, guid: f2b89d19910854346b792fe7177ce634, type: 3} + m_DepthOfFieldTileMaxCS: {fileID: 7200000, guid: 84f84585ea8a7a849bea4a581adb93a7, type: 3} + m_DepthOfFieldGatherCS: {fileID: 7200000, guid: 486be52dddc4e054fb10a7b9b78788c2, type: 3} + m_DepthOfFieldCombineCS: {fileID: 7200000, guid: c8049ca85c4c7d047ba28f34d800c663, type: 3} + m_DepthOfFieldPreCombineFarCS: {fileID: 7200000, guid: 3b4a2acd03d1ce2438d93c325d588735, type: 3} + m_DepthOfFieldClearIndirectArgsCS: {fileID: 7200000, guid: 69905045e1d0a65458b205d6ab55502b, type: 3} + m_PaniniProjectionCS: {fileID: 7200000, guid: 0ddbf72c8fbb6e44b983f470c8384ef6, type: 3} + m_DofCircleOfConfusion: {fileID: 7200000, guid: 75332b7b315c80d4babe506820aa0bfd, type: 3} + m_DofGatherCS: {fileID: 7200000, guid: 1e6b16a7970a1494db74b1d3d007d1cc, type: 3} + m_DofCoCMinMaxCS: {fileID: 7200000, guid: c70dd492c3d2fe94589d6ca8d4e37915, type: 3} + m_DofMinMaxDilateCS: {fileID: 7200000, guid: 757a3f81b35177b44b2b178909b49172, type: 3} + m_DofCombineCS: {fileID: 7200000, guid: d9b940a90a2d0884f94990a0dde43a53, type: 3} + m_DofComputeSlowTilesCS: {fileID: 7200000, guid: b89f86a76de81ee42ae16daad78eb382, type: 3} + m_DofComputeApertureShapeCS: {fileID: 7200000, guid: dd5acecb27e20334fa3be332e85172df, type: 3} + m_MotionBlurMotionVecPrepCS: {fileID: 7200000, guid: ed9438fa777911d48933402087203b15, type: 3} + m_MotionBlurGenTileCS: {fileID: 7200000, guid: 336e1fdbb3a1b8647b06208415f87804, type: 3} + m_MotionBlurMergeTileCS: {fileID: 7200000, guid: cd14ddf849edeed43b0e3ccf66023038, type: 3} + m_MotionBlurNeighborhoodTileCS: {fileID: 7200000, guid: 5ea9865df3e53b448856785b88f8e7b9, type: 3} + m_MotionBlurCS: {fileID: 7200000, guid: 2af5c49c7865edb4b823826970ec176a, type: 3} + m_BloomPrefilterCS: {fileID: 7200000, guid: 243b24008041aaa4a91800690f63c684, type: 3} + m_BloomBlurCS: {fileID: 7200000, guid: 133a68380d324de4ea8d3ff8657b02d8, type: 3} + m_BloomUpsampleCS: {fileID: 7200000, guid: 5dbb0ac12cb11f84084b7e5633481bd1, type: 3} + m_DepthValuesPS: {fileID: 4800000, guid: 6e6a4a3dbb788234594aa74f2d6aeb6f, type: 3} + m_ColorResolvePS: {fileID: 4800000, guid: dd7047092f3c82b40b3a07868f9c4de2, type: 3} + m_ResolveMotionVecPS: {fileID: 4800000, guid: ea18ca9826385e943979c46cf98968cc, type: 3} + m_FXAACS: {fileID: 7200000, guid: 1535d29f35ea86b4282b6ca652002e2a, type: 3} + m_FinalPassPS: {fileID: 4800000, guid: 5ac9ef0c50282754b93c7692488e7ee7, type: 3} + m_ClearBlackPS: {fileID: 4800000, guid: 3330c1503ea8c6d4d9408df3f64227eb, type: 3} + m_SMAAPS: {fileID: 4800000, guid: 9655f4aa89a469c49aceaceabf9bc77b, type: 3} + m_TemporalAntialiasingPS: {fileID: 4800000, guid: 3dd9fd928fdb83743b1f27d15df22179, type: 3} + m_SharpeningCS: {fileID: 7200000, guid: 667941138a753f447bad3bf94052f590, type: 3} + m_LensFlareDataDrivenPS: {fileID: 4800000, guid: 85330b3de0cfebc4ba78b2d61b1a2899, type: 3} + m_LensFlareScreenSpacePS: {fileID: 4800000, guid: 97abfc9f0525e1849b417eaae10f0329, type: 3} + m_LensFlareMergeOcclusionCS: {fileID: 7200000, guid: 07492750f384d9a4da9aaf5d2feeed4a, type: 3} + m_DLSSBiasColorMaskPS: {fileID: 4800000, guid: 017a05924c0b0484ca29717ed0c60343, type: 3} + m_CompositeUIAndOETFApplyPS: {fileID: 4800000, guid: 08b7ad21d2b8e9142b730b22d7355821, type: 3} + m_ContrastAdaptiveSharpenCS: {fileID: 7200000, guid: 560896aec2f412c48995be35551a4ac6, type: 3} + m_EdgeAdaptiveSpatialUpsamplingCS: {fileID: 7200000, guid: f054fa9fe2c85bb42b9489e2f9ffb643, type: 3} + m_VTFeedbackDownsample: {fileID: 7200000, guid: 32d963548086c2c439aeb23a93e9a00a, type: 3} + m_AccumulationCS: {fileID: 7200000, guid: ed80add7a217efa468d137d6f7c668f3, type: 3} + m_BlitAndExposeCS: {fileID: 7200000, guid: 4b9a355e064de034dbfafe4583ba766b, type: 3} + m_AlphaInjectionPS: {fileID: 4800000, guid: 4edd96259a5e8b44c90479928f0cd11e, type: 3} + m_ChromaKeyingPS: {fileID: 4800000, guid: 49feb6b111e82ec4eb6d3d08e4b6903e, type: 3} + m_CustomClearPS: {fileID: 4800000, guid: 9cef3686fa32c8840947ed99b561195c, type: 3} + - rid: 2550939681210237018 + type: {class: RenderingPathFrameSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_Version: 0 + m_Camera: + bitDatas: + data1: 5770166122053581 + data2: 12934340311651418136 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_CustomOrBakedReflection: + bitDatas: + data1: 4643523019153229 + data2: 12898309406071980048 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + m_RealtimeReflection: + bitDatas: + data1: 4638910381585229 + data2: 12898310333516513304 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + - rid: 2550939681210237019 + type: {class: HDRenderPipelineEditorShaders, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_GpuInlineDebugDrawerLine: {fileID: 4800000, guid: 039c5248164c71b4aa6d780131c1bfaf, type: 3} + m_AutodeskInteractive: {fileID: 4800000, guid: 7252379db4c18b641b517f2c91bb57e1, type: 3} + m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: ee2ce0be66f45d9449d71ba9b49c2acd, type: 3} + m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 29c4adff654862b40a2e9fb2015a42c3, type: 3} + m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 4819724840ee9444f9da841b477038ce, type: 3} + m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: d81c74dd5f463104ca482aa23ef2c798, type: 3} + - rid: 2550939681210237020 + type: {class: HDRenderPipelineRuntimeMaterials, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime} + data: + m_PBRSkyMaterial: {fileID: -876546973899608171, guid: 02532cbb810fb404db49da84f1efe41e, type: 3} + m_AreaLightMaterial: {fileID: 2100000, guid: ef5f65c980e25304098a95e28f3bd20b, type: 2} + m_AreaLightCookieMaterial: {fileID: 2100000, guid: 78c6825c5d9c3664f9879ae8609618c7, type: 2} + - rid: 2550939681210237021 + type: {class: HDRenderingLayersLimitSettings, ns: UnityEditor.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Editor} + data: + m_Version: 0 + - rid: 2550939681210237022 + type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime} + data: + m_Version: 0 + m_InstanceDataBufferCopyKernels: {fileID: 7200000, guid: f984aeb540ded8b4fbb8a2047ab5b2e2, type: 3} + m_InstanceDataBufferUploadKernels: {fileID: 7200000, guid: 53864816eb00f2343b60e1a2c5a262ef, type: 3} + m_TransformUpdaterKernels: {fileID: 7200000, guid: 2a567b9b2733f8d47a700c3c85bed75b, type: 3} + m_WindDataUpdaterKernels: {fileID: 7200000, guid: fde76746e4fd0ed418c224f6b4084114, type: 3} + m_OccluderDepthPyramidKernels: {fileID: 7200000, guid: 08b2b5fb307b0d249860612774a987da, type: 3} + m_InstanceOcclusionCullingKernels: {fileID: 7200000, guid: f6d223acabc2f974795a5a7864b50e6c, type: 3} + m_OcclusionCullingDebugKernels: {fileID: 7200000, guid: b23e766bcf50ca4438ef186b174557df, type: 3} + m_DebugOcclusionTestPS: {fileID: 4800000, guid: d3f0849180c2d0944bc71060693df100, type: 3} + m_DebugOccluderPS: {fileID: 4800000, guid: b3c92426a88625841ab15ca6a7917248, type: 3} + - rid: 2550939681210237023 + type: {class: ProbeVolumeGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_ProbeVolumeDisableStreamingAssets: 0 + - rid: 2550939681210237024 + type: {class: STP/RuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3} + m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3} + m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3} + - rid: 2550939681210237025 + type: {class: RenderGraphGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_EnableCompilationCaching: 1 + m_EnableValidityChecks: 1 + - rid: 2550939681210237026 + type: {class: ShaderStrippingSetting, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 + - rid: 2550939681210237027 + type: {class: RenderingDebuggerRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + - rid: 2550939681210237028 + type: {class: ProbeVolumeBakingResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + dilationShader: {fileID: 7200000, guid: 6bb382f7de370af41b775f54182e491d, type: 3} + subdivideSceneCS: {fileID: 7200000, guid: bb86f1f0af829fd45b2ebddda1245c22, type: 3} + voxelizeSceneShader: {fileID: 4800000, guid: c8b6a681c7b4e2e4785ffab093907f9e, type: 3} + traceVirtualOffsetCS: {fileID: -6772857160820960102, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3} + traceVirtualOffsetRT: {fileID: -5126288278712620388, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3} + skyOcclusionCS: {fileID: -6772857160820960102, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3} + skyOcclusionRT: {fileID: -5126288278712620388, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3} + renderingLayerCS: {fileID: -6772857160820960102, guid: 94a070d33e408384bafc1dea4a565df9, type: 3} + renderingLayerRT: {fileID: -5126288278712620388, guid: 94a070d33e408384bafc1dea4a565df9, type: 3} + - rid: 2550939681210237029 + type: {class: ProbeVolumeRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeBlendStatesCS: {fileID: 7200000, guid: a3f7b8c99de28a94684cb1daebeccf5d, type: 3} + probeVolumeUploadDataCS: {fileID: 7200000, guid: 0951de5992461754fa73650732c4954c, type: 3} + probeVolumeUploadDataL2CS: {fileID: 7200000, guid: 6196f34ed825db14b81fb3eb0ea8d931, type: 3} + - rid: 2550939681210237030 + type: {class: VrsRenderPipelineRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_TextureComputeShader: {fileID: 7200000, guid: cacb30de6c40c7444bbc78cb0a81fd2a, type: 3} + m_VisualizationShader: {fileID: 4800000, guid: 620b55b8040a88d468e94abe55bed5ba, type: 3} + m_VisualizationLookupTable: + m_Data: + - {r: 1, g: 0, b: 0, a: 1} + - {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 1, b: 0, a: 1} + - {r: 0.75, g: 0.75, b: 0, a: 1} + - {r: 0, g: 0.75, b: 0.55, a: 1} + - {r: 0.5, g: 0, b: 0.5, a: 1} + - {r: 0.5, g: 0.5, b: 0.5, a: 1} + - {r: 0, g: 0, b: 1, a: 1} + m_ConversionLookupTable: + m_Data: + - {r: 1, g: 0, b: 0, a: 1} + - {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 1, b: 0, a: 1} + - {r: 0.75, g: 0.75, b: 0, a: 1} + - {r: 0, g: 0.75, b: 0.55, a: 1} + - {r: 0.5, g: 0, b: 0.5, a: 1} + - {r: 0.5, g: 0.5, b: 0.5, a: 1} + - {r: 0, g: 0, b: 1, a: 1} + - rid: 2550939681210237031 + type: {class: RenderGraphUtilsResources, ns: UnityEngine.Rendering.RenderGraphModule.Util, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_CoreCopyPS: {fileID: 4800000, guid: 12dc59547ea167a4ab435097dd0f9add, type: 3} + - rid: 2550939681210237032 + type: {class: LightmapSamplingSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_UseBicubicLightmapSampling: 0 + - rid: 2550939681210237033 + type: {class: ProbeVolumeDebugResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeDebugShader: {fileID: 4800000, guid: 3b21275fd12d65f49babb5286f040f2d, type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 3a80877c579b9144ebdcc6d923bca303, type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: bf54e6528c79a224e96346799064c393, type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: db8bd7436dc2c5f4c92655307d198381, type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 20be25aac4e22ee49a7db76fb3df6de2, type: 3} + numbersDisplayTex: {fileID: 2800000, guid: 73fe53b428c5b3440b7e87ee830b608a, type: 3} + - rid: 2550939681210237034 + type: {class: IncludeAdditionalRPAssets, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_IncludeReferencedInScenes: 1 + m_IncludeAssetsByLabel: 1 + m_LabelToInclude: HDRP:IncludeInBuild diff --git a/Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset.meta b/Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 0000000..ea19be7 --- /dev/null +++ b/Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afe1e7ba9d73b904ab81ad733223d822 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit.meta deleted file mode 100644 index ec998c7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 52c313066dda63c459f7c826dbb8eed1 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/API.txt b/Assets/Plugins/CodeStage/AntiCheatToolkit/API.txt deleted file mode 100644 index 37b7ad8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/API.txt +++ /dev/null @@ -1,2 +0,0 @@ -Please, check out latest Anti-Cheat Toolkit Code Library API Docs here: -https://codestage.net/uas_files/actk/api/ \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/API.txt.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/API.txt.meta deleted file mode 100644 index 118d2e8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/API.txt.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: f4c375fd5bde53c42b0ebc6ee503f7a1 -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/CHANGELOG.md b/Assets/Plugins/CodeStage/AntiCheatToolkit/CHANGELOG.md deleted file mode 100644 index b43a40f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/CHANGELOG.md +++ /dev/null @@ -1,1215 +0,0 @@ -# Anti-Cheat Toolkit Changelog -Changelog format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - -#### Types of changes -- **Added** for new features. -- **Changed** for changes in existing functionality. -- **Deprecated** for soon-to-be removed features. -- **Removed** for now removed features. -- **Fixed** for any bug fixes. -- **Security** in case of vulnerabilities - -_Please, always remove previous plugin version before updating!_ - -## [2023.2.6] - 2024-01-14 - -### Fixed -- Fix Obscured Types json serialization could produce exception in obfuscated build (thx Thiago) - -## [2023.2.5] - 2024-01-04 - -### Fixed -- Fix ObscuredPrefs.HasKey() could return wrong value when migrating from v1 format (thx Avocco) - -## [2023.2.4] - 2023-12-19 - -### Changed -- Make sure domain reload support is editor-only - -### Fixed -- Fix CodeHashGenerator warnings in Editor - -## [2023.2.3] - 2023-09-12 - -### Fixed -- Fix harmless errors in console while using Prefs Editor (thx Rono) -- Fix rare RuntimeInitializeOnLoadMethodAttribute errors (thx Silent) - -## [2023.2.2] - 2023-07-08 - -### Changed -- Improve disabled domain reload compatibility (thx KonstantGames) - -## [2023.2.1] - 2023-06-16 - -### Fixed -- Fix ObscuredFilePrefs didn't allow saving after removing a key (thx Tyle) - -## [2023.2.0] - 2023-05-31 - -### Changed -- Improve ObscuredDateTime compatibility -- ObscuredDateTime.GetDecrypted() now returns DateTime instead of binary long value -- Improve AppInstallationSource accuracy for PackageInstaller source -- Make ObscuredBigInteger serialize into JSON as human-readable string instead of b64 bytes - -### Fixed -- Fix wrong Culture could be used while deserializing obscured types from JSON (thx spikyworm5) - -## [2023.1.0] - 2023-05-20 - -### Added -- Add ObscuredDateTime (thx spikyworm5) - -### Changed -- Include ObscuredDecimal into the obscured types validation - -### Fixed -- Fix ObscuredDecimal might not parse properly from the Inspector -- Fix ObscuredString equality check against regular string (thx haeggongs) - -## [2023.0.1] - 2023-05-11 - -### Added -- Add switch for the ACTK_NEWTONSOFT_JSON conditional in ACTk Settings - -### Fixed -- Fix CodeHashGeneratorPostprocessor.HashesGenerated event didn't invoke on post build step (thx mhosoya) - -## [2023.0.0] - 2023-05-09 - -### Added -- Add AppInstallationSourceValidator to easily figure out Android app installation source -- Add ObscuredCheatingDetector.LastDetectionInfo property with detection context -- Add built-in Newtonsoft Json Converter for Obscured Types -- Add CodeHashGenerator.GenerateAsync() API -- Add CodeHashGeneratorPostprocessor APIs: - - CalculateBuildReportHashesAsync() method - - CalculateExternalBuildHashesAsync() method -- Add HashGeneratorResult.PrintToConsole() API for debugging purposes -- Add state corruption checks when API accessed too early (before Awake) -- Add Windows build hashing progress bar in Editor -- Add Normalize() method and normalized property to ObscuredVector2, ObscuredVector3, ObscuredQuaternion -- Add buildPath argument to CalculateExternalBuildHashes so you could calculate hashes for any build path from CLI -- Add migration notes to the User Manual to help you migrate from v2021 to v2023 - -### Changed -- Update minimum Unity version to 2019.4 -- Improve Obscured Types equality checks -- Improve how ObscuredFile handles custom path in some rare cases -- Significantly improve CodeHashGenerator performance: - - Utilize all available cores in Editor's CodeHashGeneratorPostprocessor - - Utilize specified threads count in Runtime CodeHashGenerator - - Make Summary Hash generation magnitudes faster -- Change CodeHashGeneratorPostprocessor API: - - Refactor Instance.callbackOrder to static CallbackOrder - - Refactor Instance.HashesGenerated to static HashesGenerated - - Refactor HashesGenerated delegate BuildHashes[] hashedBuilds argument to IReadOnlyList hashedBuilds -- Refactor BuildHashes.FileHashes property type from Array to IReadOnlyList -- Refactor HashGeneratorResult.FileHashes property type from Array to IReadOnlyList -- Improve CodeHashGeneratorPostprocessor progress reporting in Editor -- Improve CodeHashGenerator filtering to include all .dex and .so files on Android -- Prepare CodeHashGenerator filtering to include content files so whole build could be covered in future -- Introduce various minor improvements - -### Removed -- Remove static CodeHashGeneratorPostprocessor.Instance property - -### Fixed -- Fix InjectionDetector build processor could keep the service temp file if build fails -- Fix ObscuredBigInteger.Equals(ObscuredBigInteger) check didn't work properly -- Fix ObscuredBigInteger.GetHashCode() did return value affected by random crypto key -- Fix ObscuredFile could have inconsistent path delimiters in the FilePath -- Fix some critical errors didn't print to console -- Fix regression where ACTK_PREVENT_READ_PHONE_STATE didn't remove permissions caused by SystemInfo.deviceUniqueIdentifier - -## [2021.6.4] - 2023-03-09 -_I know it's 2023 already, fine? xD_ - -### Changed -- Improve Unity 2023 compatibility - -### Fixed -- Fix inspector fields regression introduced at v2021.2.1 for Unity versions below 2022.2 (thx mrm83) -- Fix possible SpeedHackDetector false positives regression introduced at v2021.3.0, now DSP module is optional and off by default with proper warning about its sensitivity (thx mrm83, Kazeon, gpedrani and others 🙏) -- Fix some buttons didn't open Project Settings in Unity 2019+ - -## [2021.6.3] - 2022-12-19 - -### Added -- Add few more operators to the ObscuredBigInteger to better match BigInteger API. - -### Changed -- Change CodeHashGenerator Editor warning to error to make it more visible and reduce possible confusion - -## [2021.6.2] - 2022-11-12 - -### Changed -- Make ObscuredCheatingDetector to print logs when ACTK_DETECTION_BACKLOGS is enabled -- Improve Obscured Types serialization Validation logs to include exact path and location - -## [2021.6.1] - 2022-11-10 - -### Fixed -- Fix rare SpeedHackDetector false positive - -## [2021.6.0] - 2022-11-09 - -### Added -- Add new WallHackDetector compatibility check and safety warning (thx naezith) -- Add serialization corruption detection for Obscured Types - -### Changed -- Improve ObscuredVector2Int and ObscuredVector3Int vector components access performance - -### Fixed -- Reduce rare SpeedHackDetector false positive possibility -- Fix few rare ObscuredCheatingDetector false positives (thx thiagolr) - -## [2021.5.1] - 2022-09-10 - -### Changed -- Improve ObscuredFilePrefsAutoSaver behavior in Editor (thx YeahBoi) - -### Fixed -- Fix ObscuredBigInteger corruption (thx jaeyoung) -- Fix ambiguous APIs at the ObscuredBigInteger - -## [2021.5.0] - 2022-07-31 - -### Added -- Add IDisposable implementation to the SHA1Wrapper class -- Add DurationSeconds property to the CodeHashGenerator results - -### Changed -- Improve CodeHashGenerator accuracy in Editor for IL2CPP platforms -- Deprecate few obsolete CodeHashGenerator APIs -- Improve Unity 2023 compatibility - -### Fixed -- Fix WebGL compilation regression - -## [2021.4.2] - 2022-07-25 - -### Fixed -- ObscuredCheatingDetector: fix possible rare false positive (thx tbiz5270) - -## [2021.4.1] - 2022-07-21 - -### Fixed -- SpeedHackDetector: fix possible rare false positive in Editor - -## [2021.4.0] - 2022-07-16 - -### Added -- Add LastOnlineTimeResult instance property to the TimeCheatingDetector -- Add automatic ProGuard configuration to prevent errors due to minification -- Add new menu item to configure proguard-user.txt on demand - -### Changed -- Make ProGuard configuration more granular to obfuscate more of the native code -- Expose internal TimeCheatingDetector.IsReadyForForceCheck() API - -### Fixed -- Fix possible TimeCheatingDetector error due to certificate validation (thx murat303) - -## [2021.3.0] - 2022-07-10 - -### Changed -- Improve Speed Hack Detector sensitivity in sandboxed environments -- Improve detectors' keepAlive logic when using additive scenes -- Improve WebGL file system compatibility at Obscured File and Obscured File Prefs - -### Fixed -- Fix possible undesired detector self-destroy on additive scene load - -## [2021.2.1] - 2022-07-04 - -### Changed -- Change some property drawers to use Delayed fields to reduce CPU overhead while editing obscured fields in inspector - -## [2021.2.0] - 2022-06-29 - -### Added -- Add ObscuredBigInteger type -- Add BigInteger type support to the ObscuredPrefs / ObscuredFilePrefs -- Add TriggerDetection() utility method to all detectors -- Add 'Trigger detection' context menu item to all detectors components - -## [2021.1.1] - 2022-05-04 - -### Added -- Add TimeCheatingDetector.GetOnlineTimeTask() overloads with CancellationToken argument - -## [2021.1.0] - 2022-04-11 - -### Added -- Add ObscuredFilePrefs Auto Save on mobile platforms (enabled by default) - - Automatically saves unsaved changes on app loose focus / pause -- Add API to disable ObscuredFilePrefs Auto Save (disables Auto Save on both mobile and non-mobile platforms) -- Introduce IObscuredFileSettings to improve API usage experience - -### Changed -- Add locks to the ObscuredFilePrefs sync operations to improve stability when accessing it from different threads -- Move ObscuredFilePrefs Save-On-Quit code to the Auto Save feature entity so it's disableable now - -### Fixed -- Prevent ObscuredFilePrefs Save-On-Quit while not initialized -- Fix ObscuredFilePrefs behavior with disabled Reload Domain -- Fix compilation error at Unity 2018 Android -- Fix compilation warnings for WebGL platform - -## [2021.0.10] - 2022-03-09 - -### Fixed -- Fix ObscuredString name in Inspector might render incorrect in arrays (thx Sungmin An) - -## [2021.0.9] - 2022-03-06 - -### Changed -- CodeHashGenerator's Summary Hash is no longer printed for AAB builds -- Skip Android Patch Packages hashing by CodeHashGenerator - -### Fixed -- Fix obsolete API usage leading to compilation error in Unity 2022.1 - -## [2021.0.8] - 2022-02-08 - -### Changed -- Minor Prefs Editor UI improvements - -### Fixed -- Fix Prefs Editor window didn't update properly under specific conditions (thx Todd Gillissie) - -## [2021.0.7] - 2021-11-18 - -### Fixed -- Fix iOS Conditional compilation constants settings could not apply in some Unity versions (thx Hesham) -- Fix empty ObscuredString fields automatic migration (thx thiagolr) - -## [2021.0.6] - 2021-11-18 - -### Changed -- Warn when trying to use ObscuredFile with StreamingAssets on Android and WebGL (thx Harama) - -### Fixed -- Fix automatic ObscuredString migration didn't happen properly in some cases (thx thiagolr) -- Fix exception in ObscuredFilePrefs on iOS could happen under rare conditions -- Fix ObscuredString example log - -## [2021.0.5] - 2021-10-26 - -### Changed -- Improve ObscuredPrefs and ObscuredFilePrefs compatibility with Obscured types - -### Fixed -- Fix TimeUtils could be disposed unexpectedly (thx Hesham) -- Fix TimeUtils might not reinitialize properly in rare case - -## [2021.0.4] - 2021-10-02 - -### Fixed -- Fix BehaviorDesigner integration package compilation errors (thx Levent) - -## [2021.0.3] - 2021-09-27 - -### Changed -- Improve TimeCheatingDetector performance a bit - -### Fixed -- Fix missing script at the example scene -- Fix CodeHashGeneratorListener example compilation errors - -## [2021.0.2] - 2021-09-17 - -### Fixed -- Fix empty string was read as null from ObscuredPrefs and ObscuredFilePrefs (thx C0dingschmuser) - -## [2021.0.1] - 2021-09-10 - -### Changed -- Improve exceptions logging a bit - -### Fixed -- Fix compilation exception for iOS platform (thx Vladnee) - -## [2021.0.0] - 2021-09-06 - -### Added -- Add new ObscuredFile and ObscuredFilePrefs tools to the ACTk 🧰 - - Encrypted and plain modes - - All modes have data consistency validation - - All modes have lock to device feature - - ObscuredFilePrefs has simple and easy to use PlayerPrefs-like APIs - - Async compatible - - Supports UWP starting from Unity 2019.1 - - BehaviorDesigner and PlayMaker Actions -- Add generic APIs to ObscuredPrefs -- Add new types support to ObscuredPrefs: - - rest of simple C# types (SByte, Byte, Int16, UInt16, Char) - - System.DateTime - - Color (it's possible to save HDR colors now) - - Matrix4x4, RangeInt, Ray, Ray2D, RectInt, Vector2Int, Vector3Int, Vector4 -- Add ObscuredQuaternion property drawer (now it's editable from inspector) -- Add automatic link.xml generation option to complement fix for WallHack Detector false positives due to stripping -- Add additional information to the important error logs -- Make ThreadSafeRandom utility public -- Add Copy Player Prefs path context menu item to the Prefs Editor tab -- Add ObscuredPrefs Vector2Int and Vector3Int support to BehaviorDesigner integration -- Add new support contact, let's chat at [Discord](https://discord.gg/Ppsb89naWf)! - -### Changed -- Swap Changelog to md version to better match Unity packages format ([Keep a Changelog](https://keepachangelog.com/en/1.0.0/)) -- Rename following ObscuredPrefs API in order to better suite coding style: - - OnAlterationDetected -> NotGenuineDataDetected - - OnPossibleForeignSavesDetected -> DataFromAnotherDeviceDetected - - lockToDevice -> DeviceLockLevel -- Move ObscuredPrefs.DeviceLockLevel enum out from the ObscuredPrefs type -- Introduce DeviceLockTamperingSensitivity instead of readForeignSaves and emergencyMode settings for additional clarity -- Decimal values processing at ObscuredPrefs are much faster now with much lesser GC-allocations footprint -- Improve exceptions handling across whole codebase -- Improve incorrect type usage handling at ObscuredPrefs (thx David E) -- Improve Settings UI a bit -- Improve detectors startup a bit -- Improve Prefs Editor error handling -- Minor code refactoring and cleanup -- Update some API docs - -### Deprecated -- Deprecate non-generic ObscuredPrefs APIs (to be removed in future versions) - -### Removed -- Remove .NET 3.5 scripting runtime version support - -### Fixed -- Fix possible data corruption at all Obscured types in super rare scenarios (only one rare case for ObscuredBool was found) -- Fix possible false positives from WallHackDetector on Unity 2019.3 or newer when IL2CPP "Strip Engine Code" setting is used (thx Hesham) -- Fix compilation warning on UWP platform -- Fix redundant injection detector support were added into IL2CPP builds in some conditions -- Fix exceptions in Unity 2021.2 and newer while browsing ACTk settings -- Fix code hash pre-generation was run redundantly when building with Create Visual Studio Solution option enabled -- Fix Behavior Tree at BehaviorDesigner's integration ObscuredPrefsExample scene -- Fix other minor stuff here and there - -2.3.4 -- backport from 3.0.0-beta.2: fix null reference exception in Unity 2021.2 and newer while browsing ACTk settings (IL2CPP section) -- want to participate in ACTk v3 Beta and get a chance to win v3 voucher or any other Code Stage plugin voucher of your choice? - reach out at https://codestage.net/contacts or https://discord.gg/Ppsb89naWf - -2.3.3 -- backport from 3.0.0-alpha: fix possible exception in Unity 2021.2 and newer while browsing ACTk settings - -2.3.2 -- prepare for legacy .NET 3.5 support deprecation in upcoming 3.0 major release -- fix inverted ACTK_US_EXPORT_COMPATIBLE logic -- improve minor stuff - -2.3.1 -- fix possible code corruption due to the obfuscation (thx firediver98) - -2.3.0 -- update minimum Unity version to 2018.4 -- remove legacy code -- add DateTime value to the TimeCheatingDetector's OnlineTimeResult - -2.2.4 -- fix compilation warnings for non-IL2CPP UWP platform -- fix build errors on non-IL2CPP UWP platform (thx Aymen) - -2.2.3 -- fix possible SharpZipLib.dll conflicts (thx Nathaniel) - -2.2.2 -- fix possible null reference exception when migrating from ACTkv1 (thx RonoVanBono) -- fix HasKey() did not checked ACTkv1 keys (thx Albert) - -2.2.1 -- fix compilation error in Unity 2018.1 - 2018.4 with .NET 3.5 scripting (thx Vladimir) - -2.2.0 -- add new APIs to CodeHashGenerator to return all files hashes for accurate checks - * allows to check split builds hashes (e.g. from aab) -- improve CodeHashGenerator performance -- improve CodeHashGenerator Android native part errors processing -- clean and refactor some code -- fix possible error in CodeHashGenerator example code - -2.1.3 -- fix Code Hashing example compilation error -- add ProGuard notice to the Readme (thx Vladimir) - -2.1.2 -- fix compilation warnings and errors with TimeCheatingDetector disabled (thx Gary) - -2.1.1 -- fix ObscuredString.GetDecrypted returning value (thx Jose) - -2.1.0 -- add ignoreSetCorrectTime option to TimeCheatingDetector -- add IsStarted property to all detectors -- fix possible wrong TimeCheatingDetector check result (thx esteban16108) - -2.0.6 -- add ACTK_US_EXPORT_COMPATIBLE symbol (see Readme for details) -- fix possible data loss after removing all obscured prefs (thx n0lex) - -2.0.5 -- fix incorrect CodeHashGenerator result Success calculation (thx murat303) -- ignore more standard prefs at the Prefs Editor (thx n0lex) - -2.0.4 -- remove few extra debug logs from Android native plugin -- add code obfuscation and overall code protection notes to the readme - -2.0.3 -- add few API proxies to the ObscuredString for better compatibility -- fix ObscuredString.GetHashCode returned incorrect values (thx quanbp) - -2.0.2 -- fix incorrect ObscuredString.Length property value (thx Davy) - -2.0.1 -- move settings from User to Project space - -2.0.0 -- add new feature: CodeHashGenerator (Unity 2018.1 and newer) - * generate hash for your code in Editor to save in resources or on your server - * generate hash for your code in Runtime for further validation - * hash generation performs on separate thread - * hash Mono, IL2CPP, Android App Bundle builds - * support for Standalone Windows and Android, more to come -- add new feature: SpeedHackProofTime class - * use speed-hack resistant timers to let you ignore speedhack - * proxy to Time.* until speed hack is detected to avoid extra resources waste - * mimic non-fixed Time.* APIs (e.g. time, deltaTime, unscaledTime, etc.) -- Obscured types update: - * make obscured types handle crypto keys fully automatically - * automatically randomize crypto key for each new instance - * close few key-related vulnerabilities - * refactor and update API and docs for consistency - * add GenerateKey() API - * improve ObscuredString performance - * reduce ObscuredString GC allocations by 24% - * fix overridden obscured types indication in Unity 2018.3+ -- Obscured Prefs update: - * make ObscuredPrefs handle crypto keys fully automatically - * change encryption bits with automatic migration from ACTk v1 - * make SetRawValue and GetRawValue to take encrypted key into account - * remove support for pre-1.4.0 prefs migration, use ACTk v1 to migrate - * remove unobscured mode, please use PrefsEditor to view obscured prefs - * refactor and cleanup -- Injection Detector update: - * add dynamic whitelist generation (no more default whitelist) - * dramatically improve injection check performance (Unity 2018.3 and newer) - * include only used assemblies in whitelist (Unity 2018.3 and newer) - * enable Injection Detector feature from the detector's inspector - * fix lots false positives with old default whitelist - * fix detector didn't disable for IL2CPP builds in some cases - * add detection event delegate for addition argument clarity -- Speed Hack Detector update: - * add Threshold property to allow tiny clocks speed difference on different HW - * slightly improve and refactor internals -- Wall Hack Detector update: - * improve warnings and errors UI in inspector - * fix false positive for volumetric fog (volumetric atmospheric scattering in HDRP) - * fix rare false positive for Linear color space in 2017.4.1 and newer - * fix rare false positive for Post-processing stack - * fix rare false positives due to Unity rendering glitches -- Settings update: - * move Settings window to the Unity Editor Preferences section - * add new buttons-icons for quick access to the important related resources - * add IL2CPP section with "Switch to IL2CPP" button for supported platforms - * add "add support to build" toggle in Injection Detector section - * add validation for Injection Detector to have support toggle enabled - * add validation for Wallhack Detector wireframe shader to be always included - * add custom whitelist entries count to the button which opens whitelist editor - * make all ACTk settings to be per-project - * update and refactor UI a bit - * prevent compilation conditional changes while editor is compiling anything - * fix ACTK_IS_HERE state check missed -- add StringToBytes() and BytesToString() helper methods to ObscuredString -- add IsCheatDetected property to all detectors -- add Assembly Definitions -- make all detectors return their instances from StartDetection methods -- make PrefsEditor aware of TimeCheatingDetector service pref -- make PrefsEditor aware of more standard Unity prefs to hide them -- fix and improve lots of other stuff across codebase -- fix various compilation warnings in newest Unity versions -- remove deprecated components from example scenes preventing warnings in 2019.3 -- fix possible data corruption while incrementing ObscuredShort -- fix compilation errors regression in PlayMaker integration package -- update project to Unity 2017.4.1 -- refactor all detectors code to have nicer inheritance -- refactor menu-related code a bit for better readability and clarity -- refactor other minor parts of code base -- remove legacy code - -1.6.7 [Maintenance Update before big 2.0 release!] -- update to Unity 5.6.1 -- improve random key generation performance in some cases -- add few missing assemblies to the default InjectionDetector whitelist -- prevent detectors duplicates on same Game Object -- workaround for Android 4.2.* HEAD request bug -- fix RandomRangeInt can only be called from the main thread in some cases -- fix possible null ref exception in ObscuredPrefs.SetString -- other minor changes - -1.6.6 -- update to Unity 5.6 -- fix Unity 2018.3 project settings open code didn't compiled -- fix ObscuredQuaternion was shown in inspector -- fix ObscuredVector3 and ObscuredQuaternion migration (thx friuns3) -- fix migration of prefab instances in scene after prefabs migration - -1.6.5 -- ObscuredPrefs actions refactored to events to properly allow multiple listeners -- example code refactored and updated -- add support for dynamic assemblies to InjectionDetector (thx Michal) -- fix InjectionDetector whitelist had no some .NET Core assemblies (thx Michal) -- fix InjectionDetector crash when user whitelist has incorrect chars (thx Michal) - -1.6.4 -- celebrating 5 years of free updates! \o/ -- file names and structure refactored - please remove previous version completely! -- TimeCheatingDetector got more attention again (breaks existing APIs): - * core rewritten and now works with WebGL and UWP .NET (thank you Vincent!) - * logic to exclude false positives when user just has wrong time - * now detects both wrong time and actual time cheating with separate thresholds - * few old events deprecated in favor of new more generic CheatChecked event - * fixed possible Sockets errors - * fixed incorrect check interval calculation after resuming unity player -- add static method FromEncrypted() to all obscured variable types -- added new detectors prefab with another layout (each detector on separate object) -- improved UI of settings window -- added few new conditional symbols options for better debug and compatibility -- updated InjectionDetector whitelist to match Unity 2018.3.0b2 -- detectors inspector UI updated to make it easier to read settings -- fixed obscured values initialization in inspector was inconsistent in some cases -- fixed warnings when KeepAlive detectors were started from nested objects -- readme got list of contents with hyperlinks for quicker navigation -- some legacy redundant code removed -- other minor fixes and improvements - -1.6.3 -- SpeedHackDetector on Android improvements: - * now detects root level speed hack on Android 8.0 and newer (no root required) - * more accurate algorythm removing chance of false positives - * resources usage significantly improved -- fixed possible ObscuredCheatingDetector false positive on SetEncryptred() (thx Matt) -- fixed TimeCheatingDetector compilation for the UWP IL2CPP platform - -1.6.2 -- fixed 1.6.1 critical compilation error for Android platform (sorry!) -- fixed missing ObscuredVector2, ObscuredVector3 and ObscuredQuaternion migration -- fixed WallHackDetector false positive when Linear color space is used (thx Fiete) -- fixed wrong plugin path at Unity 2018 packages (thx Fiete) -- fixed compilation error when enabling WALLHACK_DEBUG flag (thx Fiete) -- fixed test scene null reference errors in some cases when cheats are detected -- fixed exception when removing entry at the user-defined Whitelist window (thx Matt) -- other minor fixes -- minor refactorings - -1.6.1 -- SpeedHackDetector now able to detect root-level speed hack on Android (beta) -- organized usings in all code to prevent ambiguity with third-party classes -- TimeCheatingDetector: - * ForceCheckEnumerator method execution slightly changed to improve stability - * added force check examples to the ActTesterGui -- removed some legacy code - -1.6.0 -- TimeCheatingDetector got some more love: - * enabled for Windows Universal Platform with IL2CPP - * stability improvements (thx Nilooo & off3nd) - * Error and CheckPassed events exposed in public API now - * new ErrorKind enum for error events - * added new callback for successful check passes - * interval 0 is now supported for the manual ForceCheck() execution only - * added ForceCheckEnumerator() for yielding from coroutine - * added awaitable ForceCheckTask() for async methods (.NET 4.6+, no WebGL) - * added LastResult and LastError properties -- all Detectors: - * added new AddToSceneOrGetExisting() API (execute from Start phase or later) - * exposed CheatDetected event for subscription - * now you may have multiple listeners for the detection event -- added IComparable implementations to all native obscured types - * now native obscured types are sortable and LINQ-friendly -- exposed double epsilon at the ObscuredCheatingDetector -- added Paste functionality to the prefs editor -- get rid of internals usage at editor scripts (allows asmdef usage) -- improved ObscuredDouble/Float security, migration required (thx off3nd) -- added ObscuredDouble/Float migration from 1.5.2.0 - 1.5.8.0 to 1.6.0+ : - * auto migration at runtime with ACTK_OBSCURED_AUTO_MIGRATION flag - * manual migration at all prefabs and opened scenes via menu commands - * runtime API to migrate values got with GetEncrypted() - * removed legacy pre-1.5.2.0 support for Obscured types migration -- now detector object is automatically selected in scene after creation -- BehaviorDesigner integration package updated: - * added TimeCheatingDetected conditional - * fixed compatibility issues -- PlayMaker integration package updated: - * added TimeCheatingDetected action - * fixed compatibility issues -- updated InjectionDetector whitelist to match Unity 2018.2.0b3 -- switched to X.X.X version tracking format -- fixed compiler errors on UWP platform (thx Wajdi) -- fixed possible incorrect readout of string pref at PrefsEditor -- fixed incorrect behavior when copying unobscured string pref -- fixed incorrect behavior of InjectionDetector in editor in debug mode -- fixed missing Reflection.Obfuscation attributes at TimeCheatingDetector -- fixed compilation flags set/get code to avoid obsolete platforms -- fixed duplicate flags setting for some platforms (cleanup needed) -- fixes and additions in API docs -- minor refactor -- other minor fixes - -1.5.8.0 -- TimeCheatingDetector got some love: - * added new ForceCheck method for manual execution - * added new IsCheckingForCheat property - * first check on Start now removed - * fixed callbacks could run not on the main thread - * improved overall stability of the TimeCheatingDetector (thx Nilo) - * reduced min range for the TimeCheatingDetector interval to 0.1 min -- updated default whitelist of InjectionDetector up to Unity 2018 beta - -1.5.7.0 -- added obscured versions of Vector2Int and Vector3Int from Unity 2017.2+ -- base Unity version increased to 5.1.0f3 -- InjectionDetector whitelist updated up to Unity 2017.3b6 -- added ObscuredDecimalDrawer (thx mcmorry) -- added IsRunning read-only property to all detectors -- added ObscuredByte.EncryptDecrypt(byte[] value) API variants -- added proper help urls for all detectors -- added error callback to the TimeCheatingDetector -- reduced GC allocations count at WallHackDetector for Unity 5.3+ -- removed urls-related code from the examples for better compatibility -- fixed non-blocking error while switching the condition compilation symbols -- minor refactorings -- minor improvements - -1.5.6.1 -- TimeCheatingDetector now uses async methods to reduce main thread locks -- disabled TimeCheatingDetector for Windows Universal Platform -- fixed initialization of Obscured types with SetEncrypted call (thx Keith) -- added version output at the Settings window -- added tooltips to the compilation symbols at the Settings window -- updated InjectionDetector whitelist to match Unity 2017.2.0b4 -- minor improvements -- minor fixes - -1.5.6.0 -- brand new TimeCheatingDetector (needs Internet connection) -- another kind of SpeedHack detection added (thx lol) -- third-party integration packages paths are match ACTk path now -- added switches for all important conditional compilation symbols - to the Settings window -- improved Unity 2017 compatibility - -1.5.5.0 -- menu items migrated to the "Tools > Code Stage > Anti-Cheat Toolkit" -- added new utility script to migrate ObscuredDouble and ObscuredFloat - instances on prefabs when updating from 1.5.1.0 and previous to the - 1.5.2.0 +; you can run it via menu Tools > Code Stage > ACTk > Migrate... -- improved compatibility with Unity 5.5+ -- fixed ObscuredCheatingDetector false positives (huge thx Fiete) -- fixed vulnerability of the obscured types -- fixed ObscuredShort inspector output in Unity 5.0+ -- fixed false cheating detections for obscured types which are able to - show up in the inspector in some cases (thx mrm83) - -1.5.4.0 -- added (x,y) constructor and same Encrypt API to the ObscuredVector2 -- added (x,y,z) constructor and same Encrypt API to the ObscuredVector3 -- added (x,y,z,w) constructor and same Encrypt API to the ObscuredQuaternion -- added new GetDecrypted API to all obscured memory types -- added ObscuredShort inspector output for Unity 5.0+ -- fixed incorrect InjectionDetector execution with argument in callback - -1.5.3.0 -- plugin moved to Plugins folder, please remove previous ACTk version! -- added ObscuredString.Length property for better compatibility -- added ULong support to the ObscuredPrefs -- added Decimal support to the ObscuredPrefs -- added ObscuredUInt inspector output for Unity 5.0+ -- added ObscuredULong inspector output for Unity 5.0+ - -1.5.2.3 -- improved Unity 5.6 compatibility -- added workaround for a Unity bug related to ObscuredDouble on prefabs - -1.5.2.2 -- updated InjectionDetector whitelist up to the Unity 5.5 -- fixed possible data corruption leading to false positives in Obscured types -- updated third-party integration packages to the new APIs -- improved compatibility with Unity 5.5 -- reduced chance of the wrong encrypted pref detection at the prefs editor - -1.5.2.1 -- added back classic parameterless callback support to the InjectionDetector - -1.5.2.0 -- InjectionDetector callbacks now should accept string with detection cause -- improved Window > CodeStage > Anti-Cheat Toolkit menu appearance -- added new Prefs Editor window mode: as an utility window (via new menu item) -- renamed DEBUG conditional symbols to the ACTK_DEBUG to avoid collisions -- added few more standard prefs to the Prefs Editor ignores -- ObscuredFloat GC allocations on initialization removed (thx pachash) -- ObscuredDecimal GC allocations on initialization removed (thx pachash) -- added proper reaction in case obscured data can't be decrypted in Prefs Editor -- fixed "E" button width when adding new pref -- fixed wrong prefs readout in rare cases in Prefs Editor (thx mcmorry) -- fixed "Cutting off characters" error by checking string length (thx mcmorry) -- fixed errors if working from the Plugins folder in Unity 5.3+ (thx demigiant) -- fixed pref deletion wasn't saved on Mac - -1.5.1.0 -- added ObscuredPrefs Editor! - * edit both PlayerPrefs and Obscured prefs in Unity Editor - * encrypt regular PlayerPrefs with configurable encryption key - * decrypt ObscuredPrefs to the regular PlayerPrefs - * search in prefs names - * sort prefs by name, type, or encrypted state - * smart prefs reading progress bar - * shows 50 prefs per page allowing to work with huge collections - * overwrite notice to prevent data loss - * coloration of obscured prefs for easier navigation - * copy prefs to clipboard - * copy raw obscured prefs to clipboard - * works on Win, Mac, Linux -- ObscuredFloat/Double now may be assigned to ObscuredInt -- changed the randomize crypto key logic for all obscured types -- added support for the Unity 5.4 SceneManager.sceneLoaded delegate -- more editor actions are undoable now -- minor ObscuredPrefs API changes - -1.5.0.6 -- SetRawValue and GetRawValue APIs added to the ObscuredPrefs -- fixed possible issues for the Unity 4.7 - -1.5.0.5 -- added warning when new detector self-destroying because of another instance -- added new item to the readme's troubleshooting section -- added explicit operator for the ObscuredFloat > ObscuredDecimal conversion -- fixed InjectionDetecor may not start in Editor in debug mode properly in some cases - -1.5.0.4 -- WallHackDetector: - * slightly decreased amount of the generated garbage - -1.5.0.3 -- WallHackDetector: - * fixed false positive when used in scenes with fog (thx Andrey Pakhomov!) - * minor resources usage optimizations - -1.5.0.2 -- WallHackDetector: - * added extra editor check for the proper Physics Layers settings - * additional debug output -- minor refactorings - -1.5.0.1 -- ObscuredLong can now be exposed to the inspector -- fixed wrong inspector height of the ObscuredVectors in not wide mode - -1.5.0.0 -- Project updated to the Unity 4.6 -- TestScene changed to better represent ACTk features -- Changes for all detectors: - * new Detection Event exposed to the inspector - * new Auto Start option (see readme for details) - * improvements in placement algorithm - * fixed incorrect behavior in rare cases after disabling and re-enabling - * fixed incorrect behavior on scenes switch in some cases - * inspector appearance improvements and fixes -- WallHackDetector changes: - * new "Raycast" option to detect shooting through the walls - * new "Wireframe" option to detect looking through the walls - * new option maxFalsePositives allows to set allowed detections in a row - * now you can separately control Rigidbody and Character Controller modules - * now you can enable and disable all detection modules at any time - * fixes and improvements - * ACTK_WALLHACK_DEBUG conditional introduced, see readme for details -- InjectionDetector changes: - * default whitelist updated (up to Unity 5.3 Beta 2) - * workaround for the IL2CPP bug (Issue ID 711312) - * debug conditionals renamed and their defines removed, use Player Settings - * iOS support removed since this target doesn't allow to inject Assemblies -- Obscured vars changes: - * RandomizeCryptoKey() API introduced to hide from 'unknown value' search - * vars with same value are treated as equal now even if crypto keys differ - * fixed bold texts in the inspectors of the prefabs with obscured vars -- ObscuredPrefs changes: - * API change: DeviceID -> DeviceId - * fixed incorrect Color storage in the unobscuredMode - * fixed DeleteKey removed PlayerPrefs value with enabled preservePlayerPrefs -- ObscuredVector2 now can be exposed to the inspector -- ObscuredVector3 now can be exposed to the inspector -- ObscuredDouble now can be exposed to the inspector in Unity 5 and higher -- ObscuredInt and ObscuredUInt are now able to explicitly cast to each other -- ObscuredVector2 now able to implicitly cast to the Vector3 -- ACTK_EXCLUDE_OBFUSCATION conditional introduced, see readme for details -- PREVENT_READ_PHONE_STATE is ACTK_PREVENT_READ_PHONE_STATE now -- BehaviorDesigner integration package changes: - * RandomizeCryptoKey API for all SharedObscured types - * WallHackDetector added to the example scene - * fixed absent crypto key in the ObscuredPrefs example scene - * fixes in comment docs - * other minor fixes -- PlayMaker integration package changes: - * added keepAlive and autoDispose options to detector actions - * fixes in comment docs -- all detectors are now more correctly placed in the Component menu -- you'll not see example scripts in the Component menu anymore -- fixed possible cs0241 error in xxHash.cs file -- fixed API compatibility issues -- removed obsolete editor code -- all editor code has proper Namespaces now -- all examples code has proper Namespaces now -- numerous optimizations and refactorings -- additions and fixes in readme -- additions and fixes in docs - -1.4.1.1 -- WallHackDetector: additional auto-correction for rigidbody module -- WallHackDetector: service sandbox now survive scene load if detector has Keep Alive enabled -- WallHackDetector: resources usage improvements -- WallHackDetector: initialization performance improvements -- all ACTk windows are moved to Window > Code Stage > Anti-Cheat Toolkit menu item -- fixes in readme - -1.4.1 -- added new WallHackDetector! Detects 2 native hacks: Rigidbody and CharacterController patches -- added new InjectionDetected and WallHackDetected Actions for the PlayMaker -- added new WallHackDetected task to the BehaviorDesigner -- InjectionDetector now detects case when there is 0 assemblies in current domain -- fixes in filenames: ObscuredUint.cs to ObscuredUInt.cs, ObscuredUshort.cs to ObscuredUShort.cs -- minor fixes and refactorings -- fixes in readme - -1.4.0.2 -- fixed ObscuredString editing in multiple objects (thanks VitaMin00) - -1.4.0.1 -- fixed ObscuredPrefs.SetColor for WebPlayer - -1.4.0 -- massive ObscuredPrefs update: - * uint support added - * Rect support added - * overall performance and memory usage improvements - * values are locked to keys now to prevent value swapping - * all service data in final values is hidden now - * hashing algorithm replaced with more secure keeping the same performance - * SetColor/GetColor optimizations - * Float accuracy increased - * Double accuracy increased - * ByteArray support fixed (no more extra length after load) - * PREVENT_READ_PHONE_STATE define introduced to let you remove Android permission if you don't use lockToDevice - * legacy ObscuredPlayerPrefs support removed (use previous ACTk version to read them) - * ForceDeviceID() method replaced with DeviceID property (now you can retrieve current device ID as well) - * format improvements allowing to easily change it with backwards compatibility - * refactorings -- ObscuredString.EncryptDecrypt() optimization (affects all Get/Set methods in ObscuredPrefs) -- disabling and enabling started detectors now should pause and resume them -- Anti-Cheat Toolkit Detectors object will self-destroy now ignoring attached scripts and nested objects -- fixed disabled detectors behavior on StartDetection() -- fixed issues with casting obscured vars from objects in the Behavior Designer package -- fixes in readme -- fixes in docs -- other minor fixes - -1.3.5 -- Anti-Cheat Toolkit now fully supports Opsive Behavior Designer, see readme for details (thanks Justin Mosiman!) -- added new ObscuredPrefsSetNewCryptoKey Action for PlayMaker -- added DetectorsExample scene into the PlayMaker package with SpeedHackDetector usage example -- added ObscuredPrefsExample scene into the PlayMaker package with simple ObscuredPrefs usage example -- fixed obscured vars initialization via SetEncrypted() -- serialization support added to: ObscuredQuaternion, ObscuredVector3 & ObscuredVector2 -- redundant alteration callback logic removed from ObscuredPrefs -- removed deprecated code from ObscuredQuaternion, ObscuredVector3 & ObscuredVector2 -- plugin abbreviation changed from ACT to ACTk -- minor fixes - -1.3.4 -- added ObscuredPrefs actions for PlayMaker (thanks kreischweide) -- added SpeedHackDetected action for PlayMaker (thanks kreischweide) -- added Vector2, Quaternion, Color support to the ObscuredPrefs -- detectors keepAlive behavior fixed and improved -- new detectors prefab -- increased detectors placement flexibility: you may put all detectors at one GameObject now -- all detectors will be added to the single Game Object when instantiating from code -- detectors Instance property reworked (can be null now) -- fixed ObscuredCheatingDetector values were not tunable in inspector -- fixed iPhone.vendorIdentifier error on Unity 5 iOS target platform (thanks Mike Messer) -- obscured types now implement IFormattable for better compatibility -- added more tool-tips for detectors -- added troubleshooting section to the readme -- few fixes and additions in readme & API docs -- minor refactoring in ObscuredPrefs - -1.3.3 -- Flash Player support deprecated, lot of ugly code removed -- Unity 5 fully supported -- plugin project updated to the Unity 4.5 (still can work in earlier Unity versions with few restrictions) -- obscured fields are now bold in inspector if values changed in prefab instance (mimics regular behavior) -- minor refactorings -- some fixes and additions in the readme - -1.3.2.1 -- optimized inspector exposition for supported obscured types -- fixed array elements names while exposing ObscuredString[] in inspector -- fixed ObscuredString truncation while being shown at inspector in some cases (thanks Stefan Laubenberger) - -1.3.2 -- ObscuredVector2, ObscuredVector3 and ObscuredQuaternion accuracy increased (consistent on all platforms now) -- added epsilons for ObscuredFloat, Obscured vectors and ObscuredQuaternion in ObscuredCheatDetector -- fixed cheating detection false positives for Obscured vectors and ObscuredQuaternion (thanks Capital j Media) -- fixed ObscuredInt returned 0 in case value matched crypto key regression -- minor optimizations and refactorings - -1.3.1 -- ObscuredBool inspector support added (requires Unity 4.5) -- new public API for all basic Obscured types: ApplyNewCryptoKey(), see docs for more details -- Significant changes in SpeedHackDetector: - * Cool Down system introduced. Read more in pdf and "coolDown" field API docs (thanks Cliff Cawley) - * detection checks period is not affected by speed hack anymore (now it uses system date timer) - * fixed speed hack wasn't detected in some cases - * fixed false positives in some cases - * fixed extra calculations on first detection check in the SpeedHackDetector - * fixed incorrect datetime change detection - * fixed continuous detects after first detect even if speed hack was removed (thanks Cliff Cawley) - * speed hack detection log message now appears in debug builds only - * application pause handled correctly now -- all basic Obscured types are serializable now (only binary serialization supported) -- ObscuredBool cheating detection is now supported in the Flash Player. -- fixed ObscuredInt default value issues -- fixed null reference error while using exposed ObscuredFloat fields to the inspector without default value -- fixed incorrectly decrypted ObscuredString values in inspector when used without default values -- fixed cheating detection false positives for Obscured variables while being exposed to the editor -- fixed possible cheating detection false positives for ObscuredVector2, ObscuredVector3 and ObscuredQuaternion -- fixed GetEncrypted() after SetNewCryptoKey() in ObscuredString didn't counted new crypto key -- removed redundant [InitializeOnLoad] attribute from ActPostprocessor -- minor refactorings in all Obscured types -- fixes and additions in the docs - -1.3.0 -- ObscuredString fields are now editable from inspector -- ObscuredInt and ObscuredFloat fields are now editable from inspector (Unity 4.5 or higher required) - * in case int->ObscuredInt \ float->ObscuredFloat replacement, old values set in inspector will be reset to defaults! - * experimental inspector support for the obscured structs instances, report any bugs please -- ObscuredCheatingDetector implemented - * central detector for all Obscured types (except ObscuredPrefs) cheating detection - * replacement for legacy onCheatingDetected Action callback -- Injection Detector user-defined Whitelist Editor implemented - * allows gather assembly data both from files and manually (for assemblies made in realtime) -- ObscuredPrefs.ForceDeviceID(string) method introduced - * useful if you have server-side authorization, especially on iOS (we have no reliable way to get device ID there) -- Injection Detector data file is restored now if it was accidentally removed -- public API StopMonitoring was renamed to the StopDetection for all detectors -- most of Vector3 operators are now supported by ObscuredVector3 -- fixed possible false positives in Speed Hack Detector caused by system time / date change -- fixed exception in ActPostprocessor while trying to write into the read-only file (thanks Sebastiano Mandalà) -- fixed possible false positives for ObscuredVector3, ObscuredVector2, ObscuredQuaternion cheating detection. -- added ability to force Injection Detector data collection for unsupported platforms for debugging -- Injection Detector will be re-enabled after switching from unsupported target if it was enabled previously -- significant refactorings in the detectors code -- service data cleanup code simplified -- improved removing of obsolete editor prefs used by ACT -- refactorings in the Editor scripts and file structure (remove prev version before updating to avoid collisions!) -- fixed possible name conflicts: MenuItem, Action -- minor fixes and optimizations -- minor fixes in documentation - -1.2.9 -- cheating detection added to the ObscuredQuaternion, ObscuredVector3, ObscuredVector2, ObscuredString -- fixed rare critical bug in ++ and -- operators of some obscured types leading to false detections (huge thanks redux!) -- fixed ObscuredPrefs.HasKey() and ObscuredPrefs.DeleteKey() were not count regular PlayerPrefs keys (thanks Sashko) -- fixed possible access issue while reading from AllowedAssemblies.bytes file in editor (thanks Sabastiano) -- fixed possible fndid file corruption leading to the false positives in Injection Detector (thanks Sabastiano) -- access to the x, y, z fields was added to the ObscuredVector3 (access by index was implemented as well) -- access to the x and y fields was added to the ObscuredVector2 (access by index was implemented as well) -- DetectorsUsageExample script was moved from Anti-Cheat Toolkit Detectors prefab to the separate GameObject -- minor fixes in the API docs - -1.2.8 -- New obscured types with cheating detection implemented - * ObscuredSByte - * ObscuredChar - * ObscuredDecimal (Flash Player is not supported, use ObscuredFloat instead) - * ObscuredULong -- cheating detection added to these existing obscured types - * ObscuredUInt - * ObscuredLong - * ObscuredDouble - * ObscuredBool (except Flash Player: bug in exported pool manager code doesn't allow to use nullables) -- minor public API changes for few obscured types -- fixed SpeedHackDetector error while playing test scene in editor with Flash Player target -- fixed possible false positives of SpeedHackDetector in Flash Player -- fixed Flash Player implementation of the ObscuredUShort.GetHashCode() -- another minor improvements in flash implementation of SpeedHackDetector -- other minor fixes and optimizations - -1.2.7 -- InjectionDetector introduced - * allows to detect if someone injects any managed dll into your app -- ObscuredShort and ObscuredUShort with cheating detection implemented -- IntegrityChecker removed -- significant changes and fixes in API documentation (should be prettier and more detailed now) -- DeviceLockLevel enum moved into the ObscuredPrefs class, thus now it should be reached as ObscuredPrefs.DeviceLockLevel -- SpeedHackDetector's StartMonitoring methods were renamed to StartDetection ones -- minor improvements in flash implementation of SpeedHackDetector -- ObscuredUint was renamed to ObscuredUInt -- minor files structure changes, please, make clean update (completely remove previous version before updating) -- minor fixes and optimizations - -1.2.6u2 -- fixed possible false positives of cheating detection in Obscured types -- minor API docs fixes - -1.2.6u1 -- extra traces in ActionScript code were commented out - -1.2.6 -- flash build support for SpeedHackDetector implemented -- ObscuredVector2 and ObscuredQuaternion implemented -- cheating detection added to the ObscuredByte -- SpeedHackDetector now awaits Action delegate instead of MonoBehaviour and method name. Please, read API docs for details -- ObscuredPrefs.readForeignSaves field introduced - * allows to read saves locked to other device and onPossibleForeignSavesDetected action still will be fired -- deprecated PlayerPrefsObscured was removed completely, use ObscuredPrefs instead -- ObscuredFloat slightly optimized -- ObscuredDouble slightly optimized -- all default arguments were replaced by methods overloading for additional compatibility with UnityScript (again) -- minor fixes in API docs - -1.2.5u1 -- SpeedHackDetector.Instance is now public and may be used to set interval, autoDispose, etc. from code. - -1.2.5 -- SpeedHackDetector introduced! Allows you to react on Cheat Engine's speed hack - * some other speed hack tools may be detected too - * use GameObject->Create Other->Code Stage->Speed Hack Detector menu item to add detector in scene - * use any public SpeedHackDetector API to automatically add it to scene -- added cheating detection to the ObscuredInt and ObscuredFloat (use Obscured*.onCheatingDetected) -- migration from PlayerPrefs to ObscuredPrefs became super easy: just replace PlayerPrefs with ObscuredPrefs - and read \ write any data as usual, no more manual PlayerPrefs to ObscuredPrefs conversion! - * all data saved with regular PlayerPrefs will be automatically encrypted with ObscuredPrefs on read and - original PlayerPrefs data will be deleted - * Set ObscuredPrefs.preservePlayerPrefs to true to prevent original PlayerPrefs data deletion -- migration from legacy PlayerPrefsObscured to ObscuredPrefs became smoother: data, written with PlayerPrefsObscured - now converts to the new format while readed with ObscuredPrefs (previously - old legacy keys were left untouched - after migration). -- ObscuredPrefs.unobscuredMode implemented - * allows to write all data unobscured, for testing purposes - * thus it works in Editor only - * breaks PlayerPrefs to ObscuredPrefs migration (reminder: in Editor) -- ObscuredVector3 and ObscuredBool implemented! -- data saved in TestScene now cleans up on application quit -- ObscuredPrefs overfill in Web Player no longer breaks entire game process (and logs error in such case) -- added selftests and performance tests code to the example scene (disabled by default) for debugging and - making wise choices ;) -- ObscuredString default crypto key was changed. Set new key to 4444 before using SetEncrypted() to set data got with - GetEncrypted in previous versions. -- fixed compilation error of WP8 build -- fixed initialization of some Obscured types -- fixed ObscuredString equality operator implementation -- minor fixes -- minor docs fixes - -1.2.0 -- project updated to Unity 4.2.2 -- new ObscuredPrefs introduced instead of old PlayerPrefsObscured - * PlayerPrefsObscured is no more supported, please, make sure to save all your new data using ObscuredPrefs - * all data saved with ObscuredPrefs will not be accessible using deprecated PlayerPrefsObscured! - * all data saved with deprecated PlayerPrefsObscured is accessible with ObscuredPrefs automatically as fallback - (will be removed in future) - * new flexible lock data to device feature introduced, read more in api docs and readme - * now saved data may be recovered in emergency cases (like device ID change after updating from iOS 6 to iOS 7) - * attempt to prevent device id change after iOS6 to iOS7 update (works in some cases only) - * key is now encrypted with common encryptionKey (previously default key for ObscuredString was used) - * accessing data saved with regular PlayerPrefs now generates warning with additional information - * saves alteration can be detected now, use ObscuredPrefs.onAlterationDetected (see ObscuredPrefsTest) - * foreign saves usage detection added, use ObscuredPrefs.onPossibleForeignSavesDetected (see ObscuredPrefsTest) - * added example of storing encryption key outside of the IL bytecode (increasing its security level) - (see ObscuredPrefsTest) - * added support of these types: long, bool, byte[], Vector3 -- ObscuredByte and ObscuredLong added -- equality operations (==, !=, .Equals()) are now supported in all simple Obscured types -- all default arguments were replaced by methods overloading for additional compatibility with UnityScript -- other minor fixes -- few fixes in docs - -1.1.0u1 -- fixed ObscuredDouble not worked correctly -- fixed link to ObscuredDouble missed in object Tester in the test scene - -1.1.0 -- no more dlls, plugin now comes with full source code included! -- Yey, Flash Player exporter support is back! :D IntegrityChecker, ObscuredDouble and - PlayerPrefsObscured.lockToDevice are not supported there though. -- added increment and decrement operators support to the numeric obscured types (thanks Yuri Saveliev) -- added ObscuredDouble! Not supported in FlashPlayer (use ObscuredFloat instead)! (thanks Andriy Pidvirnyy) -- added correct analogues of toString() methods to some of the Obscured types -- added PlayerPrefsObscured.ForceLockToDeviceInit() method to call device ID obtanation (noticably slow at first - call) process at desirable time (at splash screen time for example) -- added initial support for Windows Store (Metro) Apps (needs testing) -- added initial support for Windows Phone 8 (needs testing, thanks friuns3) - -- PlayerPrefsObscured.lockToDevice field is now property, so please use PlayerPrefsObscured.LockToDevice instead. - Sorry for inconvenience. -- removed unsafe code in ObscuredFloat -- fixed possible placement in memory not obscured float while using ObscuredFloat, oops :P -- fixed possible data loss when using values equal to the crypto keys -- attempt to fix "get_deviceUniqueIdentifier can only be called from the main thread" error (thanks ecc83) -- fixed issue with different line endings on different platforms in IntegrityChecker causing it to think - assemblies are not valid -- fixed incorrect line breaks in the xml docs -- assemblies signing now can't be enabled on known unsupported platforms -- assemblies signing will be disabled after switching to the known unsupported platform -- assemblies signing will be disabled if Stripping Level in Player Settings is not set to "Disabled" -- changed PlayerPrefsObscured default encryption key. Use SetNewCryptoKey(e806f69e7aea3ee30fe27a6abfae967f) to - read any data saved in previous ACT version with default key. -- docs were fixed a bit -- removed obsolete methods in PlayerPrefsObscured -- minor fixes - - -1.0.1.2 -- fixed .meta files handling -- moved Anti-Cheat Toolkit/Options menu item to the Window/Anti-Cheat Toolkit/Options -- moved plugin into CodeStage directory (to compact placing of any future plugins I'll release) -- reduced ObscuredInt default key length -- attempt to fix async assemblies reloading issue - - -1.0.1.1 -- Added assemblies signing process duration estimation -- Fixed issues with Anti-Cheat Toolkit .dll import in Unity 4.x - - -1.0.1.0 -- Added Assemblies signing functionality * EXPERIMENTAL * -- Fixed web player detection, now ObscuredFloat can be used in static conditions (thanks Andriy Pidvirnyy) - - -1.0.0.9 -- Fixed data loss in PlayerPrefsObscured (use Get*Deprecated to read data saved with ACT 1.0.0.8) - - -1.0.0.8 -- PlayerPrefsObscured now able to lock saved data to the current device. See PlayerPrefsObscured.lockToDevice - field description in API docs. -- Improved PlayerPrefsObscured stability and obscuration strength (use Get*Deprecated() methods to load data, - saved with ACT 1.0.0.6 or earlier) -- PlayerPrefsObscured now has own encryption key. Use PlayerPrefsObscured.SetNewCryptoKey() to change it from - default value. -- Created home page for ACT: https://codestage.net/uas/actk/ - - -1.0.0.7 -- Fixed error in ObscuredString (now it works in WebPlayer without errors). -- Fixed error in ObscuredFloat (now it works in WebPlayer without errors). -- ObscuredFloat is memory wiser now. -- ObscuredFloat.SetNewCryptoKey() accepts int now (was long). -- Added changelog :) \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/CHANGELOG.md.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/CHANGELOG.md.meta deleted file mode 100644 index ce7937c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/CHANGELOG.md.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: a707e4914fc9f014790c02a3cd0b455d -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor.meta deleted file mode 100644 index c8042f7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ac5220baa6a51bb47a5c640ddf6c0ce8 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/ACTk.Editor.asmdef b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/ACTk.Editor.asmdef deleted file mode 100644 index 77ab57b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/ACTk.Editor.asmdef +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ACTk.Editor", - "references": [ - "ACTk.Runtime" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [ - { - "name": "com.unity.modules.audio", - "expression": "", - "define": "UNITY_AUDIO_MODULE" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/ACTk.Editor.asmdef.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/ACTk.Editor.asmdef.meta deleted file mode 100644 index cea2982..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/ACTk.Editor.asmdef.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8ef82b58ed1acc8419a02b8a05286620 -timeCreated: 1554196096 -licenseType: Store -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts.meta deleted file mode 100644 index 5f36054..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1ff6bc3cba85fba4e922af0d4a624023 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkEditorConstants.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkEditorConstants.cs deleted file mode 100644 index 0f47166..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkEditorConstants.cs +++ /dev/null @@ -1,48 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System.IO; - using System.Linq; - using UnityEngine; - - internal static class ACTkEditorConstants - { - internal static class Conditionals - { - public const string WallhackLinkXML = "ACTK_WALLHACK_LINK_XML"; - public const string ExcludeObfuscation = "ACTK_EXCLUDE_OBFUSCATION"; - public const string PreventReadPhoneState = "ACTK_PREVENT_READ_PHONE_STATE"; - public const string PreventInternetPermission = "ACTK_PREVENT_INTERNET_PERMISSION"; - public const string ObscuredAutoMigration = "ACTK_OBSCURED_AUTO_MIGRATION"; - public const string ThirdPartyIntegration = "ACTK_IS_HERE"; - public const string UsExportCompatible = "ACTK_US_EXPORT_COMPATIBLE"; - public const string NewtonsoftJson = "ACTK_NEWTONSOFT_JSON"; - - public const string InjectionDebug = "ACTK_INJECTION_DEBUG"; - public const string InjectionDebugVerbose = "ACTK_INJECTION_DEBUG_VERBOSE"; - public const string InjectionDebugParanoid = "ACTK_INJECTION_DEBUG_PARANOID"; - public const string WallhackDebug = "ACTK_WALLHACK_DEBUG"; - public const string DetectionBacklogs = "ACTK_DETECTION_BACKLOGS"; - public const string GenericDevLogs = "ACTK_DEV_LOGS"; - } - - public const string SettingsProviderPath = "Code Stage/Anti-Cheat Toolkit"; - public const string MenuPath = "Code Stage/🕵 Anti-Cheat Toolkit/"; - public const string ToolsMenuPath = "Tools/" + MenuPath; - public const string GameObjectMenuPath = "GameObject/Create Other/" + MenuPath; - - public static readonly string ProjectFolder = Path.GetFullPath(Path.Combine(Application.dataPath, "../")); - public static readonly string ProjectTempFolder = Path.Combine(ProjectFolder, "Temp"); - public static readonly string LinkXmlPath = Path.Combine(ProjectTempFolder, "actk-link.xml"); - public static readonly string ProjectLibraryFolder = Path.Combine(ProjectFolder, "Library"); - public static readonly string ProjectSettingsFolder = Path.Combine(ProjectFolder, "ProjectSettings"); - public static readonly string AssetsFolder = Path.Combine(ProjectFolder, "Assets"); - - public static readonly string[] HexTable = Enumerable.Range(0, 256).Select(v => v.ToString("x2")).ToArray(); - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkEditorConstants.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkEditorConstants.cs.meta deleted file mode 100644 index da039ff..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkEditorConstants.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a9ee7d4a58674ac69c27bc7c29417309 -timeCreated: 1552925230 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMarker.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMarker.cs deleted file mode 100644 index 77295cd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMarker.cs +++ /dev/null @@ -1,41 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using UnityEditor; - using UnityEngine; - - /// - /// Use it to guess current directory of the Anti-Cheat Toolkit. - /// - public class ACTkMarker : ScriptableObject - { - /// - /// Returns raw path of the ACTkMarker script for further reference. - /// - /// Path of the ACTkMarker ScriptableObject asset. - public static string GetAssetPath() - { - string result; - - var tempInstance = CreateInstance(); - var script = MonoScript.FromScriptableObject(tempInstance); - if (script != null) - { - result = AssetDatabase.GetAssetPath(script); - } - else - { - result = AssetDatabase.FindAssets("ACTkMarker")[0]; - result = AssetDatabase.GUIDToAssetPath(result); - } - - DestroyImmediate(tempInstance); - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMarker.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMarker.cs.meta deleted file mode 100644 index f3981f5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMarker.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 00b850c709170d1469bcd89e6f80b16c -timeCreated: 1557660868 -licenseType: Store -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMenuItems.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMenuItems.cs deleted file mode 100644 index 0a2b69a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ACTkMenuItems.cs +++ /dev/null @@ -1,134 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using Detectors; - using UnityEditor; - - using Common; - using PostProcessors; - using UnityEngine; - using Processors; - - internal static class ACTkMenuItems - { - // --------------------------------------------------------------- - // Main menu items - // --------------------------------------------------------------- - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Settings...", false, 100)] - private static void ShowSettingsWindow() - { - ACTkSettings.Show(); - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Injection Detector Whitelist Editor...", false, 1000)] - private static void ShowAssembliesWhitelistWindow() - { - UserWhitelistEditor.ShowWindow(); - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Calculate external build hashes", false, 1200)] - private static async void HashExternalBuild() - { - var buildHashes = await CodeHashGeneratorPostprocessor.CalculateExternalBuildHashesAsync(null, true); - if (buildHashes == null || buildHashes.FileHashes.Count == 0) - { - Debug.LogError(ACTk.LogPrefix + "External build hashing was not successful. " + - "See previous log messages for possible details."); - } - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Configure proguard-user.txt", false, 1201)] - private static void CheckProGuard() - { - BuildPreProcessor.CheckProGuard(true); - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate obscured types on prefabs...", false, 1500)] - private static void MigrateObscuredTypesOnPrefabs() - { - MigrateUtils.MigrateObscuredTypesOnPrefabs("ObscuredFloat", "ObscuredDouble", "ObscuredVector2", "ObscuredVector3", "ObscuredQuaternion"); - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate obscured types in opened scene(s)...", false, 1501)] - private static void MigrateObscuredTypesInScene() - { - MigrateUtils.MigrateObscuredTypesInScene("ObscuredFloat", "ObscuredDouble", "ObscuredVector2", "ObscuredVector3", "ObscuredQuaternion"); - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Validate/Validate obscured types in assets...", false, 1500)] - private static void ValidateObscuredTypesInAssets() - { - ObscuredTypesValidator.ValidateProjectAssets(); - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Validate/Validate obscured types in opened scene(s)...", false, 1501)] - private static void ValidateObscuredTypesInOpenedScenes() - { - ObscuredTypesValidator.ValidateOpenedScenes(); - } - - /* will be needed when obsolete string internals will be deprecated along with automatic migration */ - - //[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate ObscuredString on prefabs...", false, 1600)] - private static void MigrateObscuredStringOnPrefabs() - { - MigrateUtils.MigrateObscuredTypesOnPrefabs("ObscuredString"); - } - - //[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate ObscuredString in opened scene(s)...", false, 1601)] - private static void MigrateObscuredStringInScene() - { - MigrateUtils.MigrateObscuredTypesInScene("ObscuredString"); - } - - // --------------------------------------------------------------- - // GameObject menu items - // --------------------------------------------------------------- - - [MenuItem(ACTkEditorConstants.GameObjectMenuPath + "All detectors", false, 0)] - private static void AddAllDetectorsToScene() - { - AddInjectionDetectorToScene(); - AddObscuredCheatingDetectorToScene(); - AddSpeedHackDetectorToScene(); - AddWallHackDetectorToScene(); - AddTimeCheatingDetectorToScene(); - } - - [MenuItem(ACTkEditorConstants.GameObjectMenuPath + InjectionDetector.ComponentName, false, 1)] - private static void AddInjectionDetectorToScene() - { - DetectorTools.SetupDetectorInScene(); - } - - [MenuItem(ACTkEditorConstants.GameObjectMenuPath + ObscuredCheatingDetector.ComponentName, false, 1)] - private static void AddObscuredCheatingDetectorToScene() - { - DetectorTools.SetupDetectorInScene(); - } - - [MenuItem(ACTkEditorConstants.GameObjectMenuPath + SpeedHackDetector.ComponentName, false, 1)] - private static void AddSpeedHackDetectorToScene() - { - DetectorTools.SetupDetectorInScene(); - } - - [MenuItem(ACTkEditorConstants.GameObjectMenuPath + WallHackDetector.ComponentName, false, 1)] - private static void AddWallHackDetectorToScene() - { - DetectorTools.SetupDetectorInScene(); - } - - [MenuItem(ACTkEditorConstants.GameObjectMenuPath + TimeCheatingDetector.ComponentName, false, 1)] - private static void AddTimeCheatingDetectorToScene() - { - DetectorTools.SetupDetectorInScene(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/AssemblyInfo.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/AssemblyInfo.cs deleted file mode 100644 index 110c241..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("CodeStage.ACTk.Service")] -[assembly: InternalsVisibleTo("CodeStage.ACTk.Tests.Editor")] \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/AssemblyInfo.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/AssemblyInfo.cs.meta deleted file mode 100644 index ff505db..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/AssemblyInfo.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a1cc293465f841498ad940f7813ccedd -timeCreated: 1588809689 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSColorTools.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSColorTools.cs deleted file mode 100644 index a3bb867..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSColorTools.cs +++ /dev/null @@ -1,198 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.EditorCommon.Tools -{ - using System; - using UnityEditor; - using UnityEngine; - - internal static class CSColorTools - { - internal enum ColorKind - { - Green, - Red, - Purple - } - - public const string GreenHex = "02C85F"; - public const string GreenDarkHex = "02981F"; - public const string PurpleHex = "A76ED1"; - public const string PurpleDarkHex = "7030A0"; - public const string RedHex = "FF4040"; - public const string RedAltHex = "FF6060"; - public const string RedDarkHex = "FF1010"; - public const string BrightGreyHex = "E5E5E5"; - - public readonly static Color32 Green = new Color32(2, 200, 95, 255); - public readonly static Color32 GreenDark = new Color32(2, 152, 31, 255); - public readonly static Color32 Purple = new Color32(167, 110, 209, 255); - public readonly static Color32 PurpleDark = new Color32(112, 48, 160, 255); - public readonly static Color32 RedAlt = new Color32(255, 96, 96, 255); - public readonly static Color32 RedDark = new Color32(255, 16, 16, 255); - public readonly static Color32 BrightGrey = new Color32(229, 229, 229, 255); - - public static string EditorGreenHex - { - get - { - return EditorGUIUtility.isProSkin ? GreenHex : GreenDarkHex; - } - } - - public static string EditorPurpleHex - { - get - { - return EditorGUIUtility.isProSkin ? PurpleHex : PurpleDarkHex; - } - } - - public static string EditorRedHex - { - get - { - return EditorGUIUtility.isProSkin ? RedAltHex : RedDarkHex; - } - } - - public static Color EditorGreen - { - get - { - return EditorGUIUtility.isProSkin ? Green : GreenDark; - } - } - - public static Color EditorPurple - { - get - { - return EditorGUIUtility.isProSkin ? Purple : PurpleDark; - } - } - - public static Color EditorRed - { - get - { - return EditorGUIUtility.isProSkin ? RedAlt : RedDark; - } - } - - public static Color DimmedColor - { - get - { - return ChangeAlpha(GUI.skin.label.normal.textColor, 150); - } - } - - public static Color BrightGreyDimmed - { - get - { - return ChangeAlpha(BrightGrey, 150); - } - } - - public static Color GreenColor - { - get - { - return LerpToGreen(GUI.skin.label.normal.textColor, 0.3f); - } - } - - public static Color RedColor - { - get - { - return LerpToRed(GUI.skin.label.normal.textColor, 0.3f); - } - } - - public static Color BackgroundGreenTint - { - get - { - return EditorGUIUtility.isProSkin ? new Color32(0, 255, 0, 150) : new Color32(0, 255, 0, 30); - } - } - - public static Color BackgroundRedTint - { - get - { - return EditorGUIUtility.isProSkin ? new Color32(255, 0, 0, 150) : new Color32(255, 0, 0, 30); - } - } - - public static string WrapBool(bool value) - { - return WrapString(value.ToString(), value ? ColorKind.Green : ColorKind.Red); - } - - public static string WrapString(string inputGood, string inputBad, bool good) - { - return WrapString(good ? inputGood : inputBad, good ? ColorKind.Green : ColorKind.Red); - } - - public static string WrapString(string input, bool good) - { - return WrapString(input, good ? ColorKind.Green : ColorKind.Red); - } - - public static string WrapString(string input, ColorKind colorKind) - { - switch (colorKind) - { - case ColorKind.Green: - return WrapString(input, EditorGreenHex); - case ColorKind.Red: - return WrapString(input, EditorRedHex); - case ColorKind.Purple: - return WrapString(input, EditorPurpleHex); - default: - throw new ArgumentOutOfRangeException("colorKind", colorKind, null); - } - } - - public static string WrapString(string input, Color color) - { - var colorString = ColorUtility.ToHtmlStringRGBA(color); - return WrapString(input, colorString); - } - - // color argument should be in rrggbbaa format or match standard html color name, without '#' - public static string WrapString(string input, string color) - { - return "" + input + ""; - } - - public static Color32 LerpToRed(Color32 inValue, float greenAmountPercent) - { - return Color.Lerp(inValue, Color.red, greenAmountPercent); - } - - public static Color32 LerpToGreen(Color32 inValue, float greenAmountPercent) - { - return Color.Lerp(inValue, Color.green, greenAmountPercent); - } - - public static Color32 LerpToYellow(Color32 inValue, float greenAmountPercent) - { - return Color.Lerp(inValue, Color.yellow, greenAmountPercent); - } - - private static Color32 ChangeAlpha(Color32 inValue, byte alphaValue) - { - inValue.a = alphaValue; - return inValue; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSEditorIcons.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSEditorIcons.cs deleted file mode 100644 index 545a28b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSEditorIcons.cs +++ /dev/null @@ -1,35 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.EditorCommon.Tools -{ - using UnityEngine; - - internal static class CSEditorIcons - { - public static Texture AssetStore { get { return CSTextureLoader.GetIconTexture("Asset Store", ImageKind.InternalIcon); } } - public static Texture Error { get { return CSTextureLoader.GetIconTexture("console.erroricon", ImageKind.InternalIcon); } } - public static Texture ErrorSmall { get { return CSTextureLoader.GetIconTexture("console.erroricon.sml", ImageKind.InternalIcon); } } - public static Texture Favorite { get { return CSTextureLoader.GetIconTexture("Favorite", ImageKind.InternalIcon); } } - public static Texture FavoriteIcon { get { return CSTextureLoader.GetIconTexture("Favorite Icon", ImageKind.InternalIcon); } } - public static Texture FilterByType { get { return CSTextureLoader.GetIconTexture("FilterByType", ImageKind.InternalIcon); } } - public static Texture Folder { get { return CSTextureLoader.GetIconTexture("Folder Icon", ImageKind.InternalIcon); } } - public static Texture GameObject { get { return CSTextureLoader.GetTypeImage(typeof(GameObject)); } } - public static Texture Help { get { return CSTextureLoader.GetIconTexture("_Help", ImageKind.InternalIcon); } } - public static Texture HierarchyView { get { return CSTextureLoader.GetIconTexture("UnityEditor.SceneHierarchyWindow", ImageKind.InternalIcon); } } - public static Texture Info { get { return CSTextureLoader.GetIconTexture("console.infoicon", ImageKind.InternalIcon); } } - public static Texture InfoSmall { get { return CSTextureLoader.GetIconTexture("console.infoicon.sml", ImageKind.InternalIcon); } } - public static Texture Inspector { get { return CSTextureLoader.GetIconTexture("UnityEditor.InspectorWindow", ImageKind.InternalIcon); } } - public static Texture Prefab { get { return UnityEditorInternal.InternalEditorUtility.FindIconForFile("dummy.prefab"); } } - public static Texture ProjectView { get { return CSTextureLoader.GetIconTexture("Project", ImageKind.InternalIcon); } } - public static Texture Scene { get { return UnityEditorInternal.InternalEditorUtility.FindIconForFile("dummy.unity"); } } - public static Texture Script { get { return UnityEditorInternal.InternalEditorUtility.FindIconForFile("dummy.cs"); } } - public static Texture Search { get { return CSTextureLoader.GetIconTexture("Search Icon", ImageKind.InternalIcon); } } - public static Texture Settings { get { return CSTextureLoader.GetIconTexture("Settings", ImageKind.InternalIcon); } } - public static Texture Warn { get { return CSTextureLoader.GetIconTexture("console.warnicon", ImageKind.InternalIcon); } } - public static Texture WarnSmall { get { return CSTextureLoader.GetIconTexture("console.warnicon.sml", ImageKind.InternalIcon); } } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSFileTools.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSFileTools.cs deleted file mode 100644 index 8d9de40..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSFileTools.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.EditorCommon.Tools -{ - using System.IO; - - internal static class CSFileTools - { - public static void DeleteFile(string path) - { - if (!File.Exists(path)) return; - RemoveReadOnlyAttribute(path); - File.Delete(path); - } - - private static void RemoveReadOnlyAttribute(string filePath) - { - var attributes = File.GetAttributes(filePath); - if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) - File.SetAttributes(filePath, attributes & ~FileAttributes.ReadOnly); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSTextureLoader.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSTextureLoader.cs deleted file mode 100644 index 097ef93..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSTextureLoader.cs +++ /dev/null @@ -1,114 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.EditorCommon.Tools -{ - using System; - using System.Collections.Generic; - using System.IO; - using UnityEditor; - using UnityEngine; - - internal enum ImageKind - { - External, - InternalTexture, - InternalIcon - } - - internal static class CSTextureLoader - { - public static string ExternalTexturesFolder { get; set; } - public static string LogPrefix { get; set; } - - private static readonly Dictionary CachedTextures = new Dictionary(); - - public static Texture GetTexture(string fileName) - { - return GetTexture(fileName, false); - } - - public static Texture GetIconTexture(string fileName, ImageKind kind = ImageKind.External) - { - return GetTexture(fileName, true, kind); - } - - private static Texture GetTexture(string fileName, bool icon, ImageKind kind = ImageKind.External) - { - Texture result; - var isDark = EditorGUIUtility.isProSkin; - - var textureName = fileName; - if (isDark) - textureName = "d_" + textureName; - - if (CachedTextures.ContainsKey(textureName)) - { - result = CachedTextures[textureName]; - } - else - { - var path = fileName; - - if (kind == ImageKind.External) - { - fileName = textureName; - path = Path.Combine(ExternalTexturesFolder, "Textures"); - - if (icon) - path = Path.Combine(path, "Icons"); - - path = Path.Combine(path, fileName); - if (!File.Exists(Path.GetFullPath(path)) && !Path.HasExtension(path)) - { - path = Path.ChangeExtension(path, "png"); - } - - if (!File.Exists(Path.GetFullPath(path))) - { - Debug.LogWarning("Couldn't find icon " + fileName + " at path " + path); - return null; - } - } - - switch (kind) - { - case ImageKind.External: - result = AssetDatabase.LoadAssetAtPath(path, typeof(Texture2D)) as Texture2D; - break; - case ImageKind.InternalTexture: - result = EditorGUIUtility.FindTexture(path); - break; - case ImageKind.InternalIcon: - result = EditorGUIUtility.IconContent(path).image; - break; - default: - throw new ArgumentOutOfRangeException("kind", kind, null); - } - - if (result == null) - Debug.LogError(LogPrefix + "Some error occurred while looking for image\n" + path); - else - CachedTextures[textureName] = result; - } - return result; - } - - public static Texture GetTypeImage(Type type) - { - var key = type.ToString(); - if (CachedTextures.ContainsKey(key)) - { - return CachedTextures[key]; - } - - var texture = EditorGUIUtility.ObjectContent(null, type).image; - CachedTextures.Add(key, texture); - - return texture; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSTextureLoader.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSTextureLoader.cs.meta deleted file mode 100644 index 4ca3e36..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Common/Tools/CSTextureLoader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5e42f0f68a093d74ea97ddfbd9a5ef4d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors.meta deleted file mode 100644 index 10cdcd4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f0c63cf6cabe3a547a0b46de95bff055 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/InjectionDetectorEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/InjectionDetectorEditor.cs deleted file mode 100644 index dc29499..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/InjectionDetectorEditor.cs +++ /dev/null @@ -1,64 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.Editors -{ - using Detectors; - - using UnityEditor; - using UnityEngine; - - [CustomEditor(typeof (InjectionDetector))] - internal class InjectionDetectorEditor : KeepAliveBehaviourEditor - { - protected override bool DrawUniqueDetectorProperties() - { - if (!ACTkSettings.Instance.InjectionDetectorEnabled) - { - using (GUITools.Vertical(GUITools.PanelWithBackground)) - { - EditorGUILayout.Separator(); - EditorGUILayout.HelpBox("Injection Detector support is not enabled! Injection Detector will not work properly", - MessageType.Error, true); - - using (new GUILayout.HorizontalScope()) - { - if (GUILayout.Button("Enable Now")) - { - ACTkSettings.Instance.InjectionDetectorEnabled = true; - } - if (GUILayout.Button("Enable In settings...")) - { - ACTkSettings.Show(); - } - } - - EditorGUILayout.Separator(); - } - - return true; - } - - if (SettingsUtils.IsIL2CPPEnabled()) - { - EditorGUILayout.HelpBox("Mono Injections are not possible in IL2CPP, this detector is not needed in IL2CPP builds", - MessageType.Info, true); - - return true; - } - - if (!InjectionRoutines.IsTargetPlatformCompatible()) - { - EditorGUILayout.HelpBox("Injection Detection is only supported in Standalone and Android builds", - MessageType.Warning, true); - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/InjectionDetectorEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/InjectionDetectorEditor.cs.meta deleted file mode 100644 index 7de88c1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/InjectionDetectorEditor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6025f911d895a7e43a5d5c6229254129 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/KeepAliveBehaviourEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/KeepAliveBehaviourEditor.cs deleted file mode 100644 index a835851..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/KeepAliveBehaviourEditor.cs +++ /dev/null @@ -1,94 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.Editors -{ - using Common; - using UnityEditor; - using UnityEngine; - - internal class KeepAliveBehaviourEditor : Editor where T: KeepAliveBehaviour - { - protected T self; - - private SerializedProperty autoStart; - private SerializedProperty autoDispose; - private SerializedProperty keepAlive; - private SerializedProperty detectionEvent; - private SerializedProperty detectionEventHasListener; - - public virtual void OnEnable() - { - autoStart = serializedObject.FindProperty("autoStart"); - autoDispose = serializedObject.FindProperty("autoDispose"); - keepAlive = serializedObject.FindProperty("keepAlive"); - detectionEvent = serializedObject.FindProperty("detectionEvent"); - detectionEventHasListener = serializedObject.FindProperty("detectionEventHasListener"); - - self = (T)target; - - FindUniqueDetectorProperties(); - } - - public override void OnInspectorGUI() - { - if (self == null) return; - - serializedObject.Update(); - - EditorGUIUtility.labelWidth = 140; - EditorGUILayout.Space(); - DrawHeader("Base settings"); - - EditorGUILayout.PropertyField(autoStart); - detectionEventHasListener.boolValue = EditorTools.CheckUnityEventHasActivePersistentListener(detectionEvent); - - CheckAdditionalEventsForListeners(); - - if (autoStart.boolValue && !detectionEventHasListener.boolValue && !AdditionalEventsHasListeners()) - { - EditorGUILayout.LabelField(new GUIContent("You need to add at least one active item to the Events in order to use Auto Start feature!"), GUITools.BoldLabel); - } - else if (!autoStart.boolValue) - { - EditorGUILayout.LabelField(new GUIContent("Don't forget to start detection!", "You should start detector from code using ObscuredCheatingDetector.StartDetection() method. See readme for details."), GUITools.BoldLabel); - EditorGUILayout.Separator(); - } - EditorGUILayout.PropertyField(autoDispose); - EditorGUILayout.PropertyField(keepAlive); - - EditorGUILayout.Separator(); - - if (DrawUniqueDetectorProperties()) - { - EditorGUILayout.Separator(); - } - - //DrawHeader("Events"); - - EditorGUILayout.PropertyField(detectionEvent); - DrawAdditionalEvents(); - serializedObject.ApplyModifiedProperties(); - - EditorGUIUtility.labelWidth = 0; - } - - protected virtual void DrawHeader(string text) - { - GUITools.DrawHeader(text); - } - - protected virtual bool AdditionalEventsHasListeners() - { - return true; - } - - protected virtual void FindUniqueDetectorProperties() {} - protected virtual bool DrawUniqueDetectorProperties() { return false; } - protected virtual void CheckAdditionalEventsForListeners() {} - protected virtual void DrawAdditionalEvents() {} - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/KeepAliveBehaviourEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/KeepAliveBehaviourEditor.cs.meta deleted file mode 100644 index cd250e7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/KeepAliveBehaviourEditor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6b59c308aff5e054991de809a3b5985b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/ObscuredCheatingDetectorEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/ObscuredCheatingDetectorEditor.cs deleted file mode 100644 index 63709ed..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/ObscuredCheatingDetectorEditor.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.Editors -{ - using Detectors; - - using UnityEditor; - using UnityEngine; - - [CustomEditor(typeof (ObscuredCheatingDetector))] - internal class ObscuredCheatingDetectorEditor : KeepAliveBehaviourEditor - { - private SerializedProperty doubleEpsilon; - private SerializedProperty floatEpsilon; - private SerializedProperty vector2Epsilon; - private SerializedProperty vector3Epsilon; - private SerializedProperty quaternionEpsilon; - - protected override void FindUniqueDetectorProperties() - { - doubleEpsilon = serializedObject.FindProperty("doubleEpsilon"); - floatEpsilon = serializedObject.FindProperty("floatEpsilon"); - vector2Epsilon = serializedObject.FindProperty("vector2Epsilon"); - vector3Epsilon = serializedObject.FindProperty("vector3Epsilon"); - quaternionEpsilon = serializedObject.FindProperty("quaternionEpsilon"); - } - - protected override bool DrawUniqueDetectorProperties() - { - DrawHeader("Specific settings"); - - EditorGUILayout.PropertyField(doubleEpsilon); - EditorGUILayout.PropertyField(floatEpsilon); - EditorGUILayout.PropertyField(vector2Epsilon, new GUIContent("Vector2 Epsilon")); - EditorGUILayout.PropertyField(vector3Epsilon, new GUIContent("Vector3 Epsilon")); - EditorGUILayout.PropertyField(quaternionEpsilon); - - return true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/ObscuredCheatingDetectorEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/ObscuredCheatingDetectorEditor.cs.meta deleted file mode 100644 index 78cf6cb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/ObscuredCheatingDetectorEditor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8df36b70906d65d43bcb3ddce3fe36ba -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/SpeedHackDetectorEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/SpeedHackDetectorEditor.cs deleted file mode 100644 index ac1caac..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/SpeedHackDetectorEditor.cs +++ /dev/null @@ -1,70 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.Editors -{ - using Detectors; - - using UnityEditor; - using UnityEditor.EditorTools; - using UnityEngine; - using EditorTools = EditorCode.EditorTools; - - [CustomEditor(typeof (SpeedHackDetector))] - internal class SpeedHackDetectorEditor : KeepAliveBehaviourEditor - { - private SerializedProperty interval; - private SerializedProperty threshold; - private SerializedProperty maxFalsePositives; - private SerializedProperty coolDown; - private SerializedProperty useDsp; - - protected override void FindUniqueDetectorProperties() - { - interval = serializedObject.FindProperty("interval"); - threshold = serializedObject.FindProperty("threshold"); - maxFalsePositives = serializedObject.FindProperty("maxFalsePositives"); - coolDown = serializedObject.FindProperty("coolDown"); - - useDsp = serializedObject.GetProperty(nameof(SpeedHackDetector.UseDsp)); - } - - protected override bool DrawUniqueDetectorProperties() - { - DrawHeader("Specific settings"); - - EditorGUILayout.PropertyField(interval); - EditorGUILayout.PropertyField(threshold); - EditorGUILayout.PropertyField(maxFalsePositives); - EditorGUILayout.PropertyField(coolDown); - -#if UNITY_2020_1_OR_NEWER - EditorGUILayout.PropertyField(useDsp); -#else - EditorGUILayout.PropertyField(useDsp, new GUIContent( ObjectNames.NicifyVariableName(nameof(SpeedHackDetector.UseDsp)), useDsp.tooltip)); -#endif - if (useDsp.boolValue) - EditorGUILayout.HelpBox("Dsp timers may cause false positives on some hardware.\nMake sure to test on target devices before using this in production.", MessageType.Warning); - -#if UNITY_AUDIO_MODULE - if (!EditorTools.IsAudioManagerEnabled()) - { - EditorGUILayout.HelpBox("Dsp option is not available since Disable Unity Audio option is enabled.", MessageType.Error); - if (GUILayout.Button("Open Audio Settings")) - { - SettingsService.OpenProjectSettings("Project/Audio"); -#if UNITY_2021_3_OR_NEWER - Highlighter.Highlight("Project Settings", EditorTools.GetAudioManagerEnabledPropertyPath(), HighlightSearchMode.Identifier); -#endif - } - } -#else - EditorGUILayout.HelpBox("Dsp option is not available since built-in Audio module is disabled.", MessageType.Error); -#endif - return true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/SpeedHackDetectorEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/SpeedHackDetectorEditor.cs.meta deleted file mode 100644 index 92b69d3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/SpeedHackDetectorEditor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 199f39969debe8f46afc5f32b333be3b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/TimeCheatingDetectorEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/TimeCheatingDetectorEditor.cs deleted file mode 100644 index 1d14df5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/TimeCheatingDetectorEditor.cs +++ /dev/null @@ -1,74 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.Editors -{ - using Detectors; - - using UnityEditor; - using UnityEngine; - - [CustomEditor(typeof(TimeCheatingDetector))] - internal class TimeCheatingDetectorEditor : KeepAliveBehaviourEditor - { -#if !ACTK_PREVENT_INTERNET_PERMISSION - private SerializedProperty requestUrl; - private SerializedProperty requestMethod; - private SerializedProperty timeoutSeconds; - private SerializedProperty interval; - private SerializedProperty realCheatThreshold; - private SerializedProperty wrongTimeThreshold; - private SerializedProperty ignoreSetCorrectTime; - - protected override void FindUniqueDetectorProperties() - { - requestUrl = serializedObject.FindProperty("requestUrl"); - requestMethod = serializedObject.FindProperty("requestMethod"); - timeoutSeconds = serializedObject.FindProperty("timeoutSeconds"); - interval = serializedObject.FindProperty("interval"); - realCheatThreshold = serializedObject.FindProperty("realCheatThreshold"); - wrongTimeThreshold = serializedObject.FindProperty("wrongTimeThreshold"); - ignoreSetCorrectTime = serializedObject.FindProperty("ignoreSetCorrectTime"); - } - - protected override bool DrawUniqueDetectorProperties() - { - DrawHeader("Specific settings"); - - EditorGUIUtility.labelWidth += 10; - EditorGUILayout.PropertyField(ignoreSetCorrectTime); - EditorGUIUtility.labelWidth -= 10; - - EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(requestUrl, new GUIContent("URL", requestUrl.tooltip)); - if (EditorGUI.EndChangeCheck()) - { - self.RequestUrl = requestUrl.stringValue; - } - -#if UNITY_WEBGL - GUILayout.Label("To avoid CORS limitations while running in WebGL, URL will be changed to the current domain, if it does points to any other domain", GUITools.RichMiniLabel); - EditorGUILayout.Space(); -#endif - - EditorGUILayout.PropertyField(requestMethod, new GUIContent("Method", requestMethod.tooltip)); - - EditorGUILayout.PropertyField(timeoutSeconds); - EditorGUILayout.PropertyField(interval); - EditorGUILayout.PropertyField(realCheatThreshold); - EditorGUILayout.PropertyField(wrongTimeThreshold); - - return true; - } -#else - protected override bool DrawUniqueDetectorProperties() - { - GUILayout.Label("Detector disabled with ACTK_PREVENT_INTERNET_PERMISSION conditional symbol", GUITools.RichLabel); - return true; - } -#endif - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/TimeCheatingDetectorEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/TimeCheatingDetectorEditor.cs.meta deleted file mode 100644 index 6d0c898..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/TimeCheatingDetectorEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2fb4c7beaf58d554ab0f85d86b53726e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/WallHackDetectorEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/WallHackDetectorEditor.cs deleted file mode 100644 index 13023c3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/WallHackDetectorEditor.cs +++ /dev/null @@ -1,139 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.Editors -{ - using Detectors; - using UnityEditor; - using UnityEngine; - - [CustomEditor(typeof (WallHackDetector))] - internal class WallHackDetectorEditor : KeepAliveBehaviourEditor - { - private SerializedProperty wireframeDelay; - private SerializedProperty raycastDelay; - private SerializedProperty spawnPosition; - private SerializedProperty maxFalsePositives; - - private SerializedProperty checkRigidbody; - private SerializedProperty checkController; - private SerializedProperty checkWireframe; - private SerializedProperty checkRaycast; - - protected override void FindUniqueDetectorProperties() - { - raycastDelay = serializedObject.FindProperty("raycastDelay"); - wireframeDelay = serializedObject.FindProperty("wireframeDelay"); - spawnPosition = serializedObject.FindProperty("spawnPosition"); - maxFalsePositives = serializedObject.FindProperty("maxFalsePositives"); - - checkRigidbody = serializedObject.FindProperty("checkRigidbody"); - checkController = serializedObject.FindProperty("checkController"); - checkWireframe = serializedObject.FindProperty("checkWireframe"); - checkRaycast = serializedObject.FindProperty("checkRaycast"); - } - - protected override bool DrawUniqueDetectorProperties() - { - var detector = self; - if (detector == null) return false; - - DrawHeader("Specific settings"); - - if (PropertyFieldChanged(checkRigidbody, new GUIContent("Rigidbody"))) - { - detector.CheckRigidbody = checkRigidbody.boolValue; - } - - if (PropertyFieldChanged(checkController, new GUIContent("Character Controller"))) - { - detector.CheckController = checkController.boolValue; - } - - if (PropertyFieldChanged(checkWireframe, new GUIContent("Wireframe"))) - { - detector.CheckWireframe = checkWireframe.boolValue; - } - EditorGUI.indentLevel++; - EditorGUILayout.PropertyField(wireframeDelay, new GUIContent("Delay")); - EditorGUI.indentLevel--; - - if (PropertyFieldChanged(checkRaycast, new GUIContent("Raycast"))) - { - detector.CheckRaycast = checkRaycast.boolValue; - } - EditorGUI.indentLevel++; - EditorGUILayout.PropertyField(raycastDelay, new GUIContent("Delay")); - EditorGUI.indentLevel--; - - EditorGUILayout.Separator(); - - EditorGUILayout.PropertyField(spawnPosition); - if (Vector3.Distance(spawnPosition.vector3Value, Vector3.zero) <= 0.001f) - { - EditorGUILayout.HelpBox("Please consider placing spawn position as far from your moving objects as possible to avoid false positives", MessageType.Warning); - EditorGUILayout.Space(); - } - EditorGUILayout.PropertyField(maxFalsePositives); - - EditorGUILayout.Separator(); - - if (checkWireframe.boolValue && !SettingsGUI.IsWallhackDetectorShaderIncluded()) - { - using (GUITools.Vertical(GUITools.PanelWithBackground)) - { - EditorGUILayout.Separator(); - EditorGUILayout.HelpBox("Wallhack Detector shader for Wireframe checks is not included into the build! Detector may work incorrectly", - MessageType.Error, true); - - if (GUILayout.Button("Include in Settings...")) - { - ACTkSettings.Show(); - } - - EditorGUILayout.Separator(); - } - } - - if (checkRaycast.boolValue || checkController.boolValue || checkRigidbody.boolValue) - { - var layerId = LayerMask.NameToLayer("Ignore Raycast"); - if (Physics.GetIgnoreLayerCollision(layerId, layerId)) - { - EditorGUILayout.LabelField("IgnoreRaycast physics layer should collide with itself to avoid false positives! See readme's troubleshooting section for details.", EditorStyles.wordWrappedLabel); - if (GUILayout.Button("Edit in Physics settings")) - { - SettingsService.OpenProjectSettings("Project/Physics"); - } - } - } - - return true; - } - - private static bool PropertyFieldChanged(SerializedProperty property, GUIContent content, params GUILayoutOption[] options) - { - var result = false; - - EditorGUI.BeginChangeCheck(); - - if (content == null) - { - EditorGUILayout.PropertyField(property, options); - } - else - { - EditorGUILayout.PropertyField(property, content, options); - } - - if (EditorGUI.EndChangeCheck()) - { - result = true; - } - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/WallHackDetectorEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/WallHackDetectorEditor.cs.meta deleted file mode 100644 index a1c53ed..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Editors/WallHackDetectorEditor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2f88f8bd1134b464fa26c27d9979e6db -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash.meta deleted file mode 100644 index b7e865c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0eab0a2d46900f5498873b929a503bad -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess.meta deleted file mode 100644 index 4b6f214..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7ae78be353f2d8243b15efd15919c5f5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/CodeHashGeneratorPostprocessor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/CodeHashGeneratorPostprocessor.cs deleted file mode 100644 index f23e7b6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/CodeHashGeneratorPostprocessor.cs +++ /dev/null @@ -1,203 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System.Linq; -using System.Threading.Tasks; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using CodeStage.AntiCheat.Common; -using CodeStage.AntiCheat.Genuine.CodeHash; -using UnityEditor; -using UnityEditor.Build; -using UnityEditor.Build.Reporting; -using Debug = UnityEngine.Debug; - -namespace CodeStage.AntiCheat.EditorCode.PostProcessors -{ - /// - /// Does calculates code hash after build if you use option "Generate code hash". - /// Listen to HashesGenerated or look for hash for each build in the Editor Console. - /// - /// Resulting hash in most cases should match value you get from the \ref CodeStage.AntiCheat.Genuine.CodeHash.CodeHashGenerator "CodeHashGenerator" - public class CodeHashGeneratorPostprocessor : IPostprocessBuildWithReport - { - /// - /// Equals int.MaxValue to make sure this postprocessor will run as late as possible - /// so you could run own postprocessors before and subscribe to HashesGenerated event. - /// - /// Used at CodeHashGeneratorListener example. - public const int CallbackOrder = int.MaxValue; - - /// - /// HashesGenerated event delegate. - /// - /// Standard post-build report from Unity. - /// Build hashing results array. - /// - /// You may generate multiple actual builds within single build operation, - /// like multiple APKs when you use "Split APKs by target architecture" option, - /// so you may have more than one valid hashed builds for one actual build procedure. - public delegate void OnHashesGenerated(BuildReport report, IReadOnlyList hashedBuilds); - - /// - /// You may listen to this event if you wish to post-process resulting code hash, - /// e.g. upload it to the server for the later runtime check with CodeHashGenerator. - /// - /// Make sure to enable "Generate code hash on build completion" option in the ACTk settings to make this event work. - public static event OnHashesGenerated HashesGenerated; - - int IOrderedCallback.callbackOrder => CallbackOrder; - async void IPostprocessBuildWithReport.OnPostprocessBuild(BuildReport report) - { - if (!ACTkSettings.Instance.PreGenerateBuildHash || !CodeHashGenerator.IsTargetPlatformCompatible()) - return; - - await CalculateBuildReportHashesAsync(report, true, true); - } - - /// - /// Calls selection dialog and calculates hashes for the selected build. - /// - /// Path to the .apk / .aab or .exe file. Pass null to show file selection dialog. - /// Path to the .apk / .aab or .exe file. Pass null to show file selection dialog. - /// Valid BuildHashes instance or null in case of error / user cancellation. - public static BuildHashes CalculateExternalBuildHashes(string buildPath, bool printToConsole) - { - return AsyncHelpers.RunSync(() => CalculateExternalBuildHashesAsync(buildPath, printToConsole)); - } - - /// - /// Calls selection dialog and calculates hashes for the selected build. - /// - /// Path to the .apk / .aab or .exe file. Pass null to show file selection dialog. - /// Path to the .apk / .aab or .exe file. Pass null to show file selection dialog. - /// Task with Valid BuildHashes instance or null in case of error / user cancellation. - public static async Task CalculateExternalBuildHashesAsync(string buildPath, bool printToConsole) - { - if (buildPath == null) - { - buildPath = EditorUtility.OpenFilePanel( - "Select Standalone Windows build exe or Android build apk / aab", "", "exe,apk,aab"); - if (string.IsNullOrEmpty(buildPath)) - { - Debug.Log(ACTk.LogPrefix + "Hashing cancelled by user."); - return null; - } - } - - var extension = Path.GetExtension(buildPath); - if (string.IsNullOrEmpty(extension)) - return null; - - extension = extension.ToLower(CultureInfo.InvariantCulture); - - try - { - EditorUtility.DisplayProgressBar("ACTk: Generating code hash", "Preparing...", 0); - BuildHashes hashes; - - if (extension == ".apk" || extension == ".aab") - hashes = (await AndroidBuildHashGenerator.GetBuildHashes(new[] { buildPath })).FirstOrDefault(); - else - hashes = (await WindowsBuildHashGenerator.GetBuildHashes(buildPath)).FirstOrDefault(); - - if (printToConsole) - hashes?.PrintToConsole(); - - return hashes; - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Error while trying to hash build!", e); - } - finally - { - EditorUtility.ClearProgressBar(); - } - - return null; - } - - /// - /// Calculates hashes for the given build report. Can be useful if you wish to hash build you just made with BuildPipeline. - /// - /// Will not trigger the HashesGenerated event. - /// BuildReport you wish to calculates hashes for - /// Specifies if calculated hashes should be printed to Unity Console - /// Readonly List of the BuildHashes, one per each resulting build from the BuildReport. - public static Task> CalculateBuildReportHashesAsync(BuildReport report, - bool printToConsole) - { - return CalculateBuildReportHashesAsync(report, false, printToConsole); - } - - private static async Task> CalculateBuildReportHashesAsync(BuildReport report, - bool triggerEvent, bool printLogs) - { - if (EditorUserBuildSettings.GetPlatformSettings(report.summary.platformGroup.ToString(), - "CreateSolution") == "true") - { - Debug.Log( - ACTk.LogPrefix + "Build hashing is skipped due to the 'Create Visual Studio Solution' option."); - return null; - } - - try - { - EditorUtility.DisplayProgressBar("ACTk: Generating code hash", "Preparing...", 0); - - var hashedBuilds = await GetHashedBuilds(report); - - if (hashedBuilds == null || hashedBuilds.Count == 0) - { - Debug.Log(ACTk.LogPrefix + "Couldn't pre-generate code hash. " + - "Please run your build and generate hash with CodeHashGenerator."); - return null; - } - - if (printLogs) - { - foreach (var hashedBuild in hashedBuilds) - { - hashedBuild.PrintToConsole(); - } - } - - if (triggerEvent) - HashesGenerated?.Invoke(report, hashedBuilds); - - return hashedBuilds; - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Error while trying to hash build!", e); - } - finally - { - EditorUtility.ClearProgressBar(); - } - - return null; - } - - private static async Task> GetHashedBuilds(BuildReport report) - { - var platform = report.summary.platform; - switch (platform) - { - case BuildTarget.StandaloneWindows64: - case BuildTarget.StandaloneWindows: - return await WindowsBuildHashGenerator.GetBuildHashes(report.summary.outputPath); - case BuildTarget.Android: - return await AndroidBuildHashGenerator.GetBuildHashes(report); - default: - return null; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/CodeHashGeneratorPostprocessor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/CodeHashGeneratorPostprocessor.cs.meta deleted file mode 100644 index 317770c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/CodeHashGeneratorPostprocessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c82c021ded9a49b44b3701f1859341cd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms.meta deleted file mode 100644 index 50759b5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 881ba0c65bee45139ca757895221c6ab -timeCreated: 1680806941 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/AndroidBuildHashGenerator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/AndroidBuildHashGenerator.cs deleted file mode 100644 index 44ab0c1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/AndroidBuildHashGenerator.cs +++ /dev/null @@ -1,184 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using CodeStage.AntiCheat.Common; -using CodeStage.AntiCheat.EditorCode.ICSharpCode.SharpZipLib.Zip; -using CodeStage.AntiCheat.Genuine.CodeHash; -using CodeStage.AntiCheat.Utils; -using UnityEditor; -using UnityEditor.Build.Reporting; -using Debug = UnityEngine.Debug; - -namespace CodeStage.AntiCheat.EditorCode.PostProcessors -{ - internal static class AndroidBuildHashGenerator - { - private static readonly object ProgressLock = new object(); - - public static async Task GetBuildHashes(BuildReport report) - { - if ((report.summary.options & BuildOptions.PatchPackage) != 0) - { - Debug.Log(ACTk.LogPrefix + "Patch hashing is skipped, only full build hashing is supported."); - return Array.Empty(); - } - -#if UNITY_2022_1_OR_NEWER - var files = report.GetFiles(); -#else - var files = report.files; -#endif - var filePaths = new string[files.Length]; - for (var i = 0; i < filePaths.Length; i++) - { - filePaths[i] = files[i].path; - } - - return await GetBuildHashes(filePaths); - } - - public static async Task GetBuildHashes(string[] files) - { - var result = new List(); - - foreach (var path in files) - { - var extension = Path.GetExtension(path); - if (!string.IsNullOrEmpty(extension)) - extension = extension.ToLower(CultureInfo.InvariantCulture); - - if (extension != ".apk" && extension != ".aab") - continue; - - var progress = FilesProgress.CreateNew("ACTk: Generating code hash"); - var filters = GetFilters(); - var buildHashes = await Task.Run(() => HashSuitableFilesInZipFile(path, filters, - progress)); - if (buildHashes != null) - result.Add(buildHashes); - } - - if (result.Count == 0) - { - if (!EditorUserBuildSettings.exportAsGoogleAndroidProject) - ACTk.PrintExceptionForSupport("Couldn't find compiled APK or AAB build!"); - else - Debug.LogWarning("Couldn't find compiled APK or AAB build! " + - "This is fine if you use Export Project feature."); - } - - return result.ToArray(); - } - - private static BuildHashes HashSuitableFilesInZipFile(string path, FilteringData filters, - IProgress progress) - { - ZipFile zf = null; - - try - { - var sw = Stopwatch.StartNew(); - - var latestPercent = 0; - var filesChecked = 0; - var fileHashes = new ConcurrentBag(); - var fs = File.OpenRead(path); - zf = new ZipFile(fs); - var count = zf.Count; - - var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }; - var sha1Pool = new ThreadSafeDisposablesPool(() => new SHA1Wrapper()); - - Parallel.ForEach(zf.Cast(), options, zipEntry => - { - string entryFileName = null; - var skipped = true; - try - { - // skip folders since we can't hash them - if (!zipEntry.IsFile) - return; - - entryFileName = zipEntry.Name; - if (filters.IsIgnored(entryFileName)) - return; - - if (!filters.IsIncluded(entryFileName)) - return; - - using (var zipStream = zf.GetInputStream(zipEntry)) - { - fileHashes.Add(new FileHash(entryFileName, zipStream, sha1Pool)); - } - - skipped = false; - } - catch (Exception e) - { - Console.WriteLine(e); - throw; - } - finally - { - lock (ProgressLock) - { - filesChecked++; - if (!skipped) - progress?.ReportPercent(ref latestPercent, filesChecked, count, Path.GetFileName(entryFileName)); - } - } - }); - - sha1Pool.Dispose(); - progress?.Report(FilesProgress.None()); - sw.Stop(); - - if (fileHashes.Count == 0) - return null; - - var result = new BuildHashes(path, fileHashes.ToArray()) - { - DurationSeconds = sw.Elapsed.TotalSeconds - }; - - return result; - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Error while calculating code hash!", e); - } - finally - { - if (zf != null) - { - zf.IsStreamOwner = true; - zf.Close(); - } - } - - return null; - } - - private static FilteringData GetFilters() - { - var il2Cpp = false; -#if UNITY_EDITOR - il2Cpp = SettingsUtils.IsIL2CPPEnabled(); -#elif ENABLE_IL2CPP - il2Cpp = true; -#endif - return FiltersProducer.GetFileFiltersAndroid(il2Cpp); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/AndroidBuildHashGenerator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/AndroidBuildHashGenerator.cs.meta deleted file mode 100644 index 2f38cc8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/AndroidBuildHashGenerator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9717d52c2bf842caaa8575f8f2947afa -timeCreated: 1680806503 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/WindowsBuildHashGenerator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/WindowsBuildHashGenerator.cs deleted file mode 100644 index a4b342d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/WindowsBuildHashGenerator.cs +++ /dev/null @@ -1,49 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using CodeStage.AntiCheat.Common; -using CodeStage.AntiCheat.Genuine.CodeHash; - -namespace CodeStage.AntiCheat.EditorCode.PostProcessors -{ - internal static class WindowsBuildHashGenerator - { - public static async Task> GetBuildHashes(string buildPath) - { - var folder = Path.GetDirectoryName(buildPath); - if (folder == null) - { - ACTk.PrintExceptionForSupport("Could not found build folder for this file: " + buildPath); - return Array.Empty(); - } - - var progress = FilesProgress.CreateNew("ACTk: Generating code hash"); - var filters = GetFilters(); - var buildHashes = await Task.Run(()=> StandaloneWindowsWorker.GetBuildHashes(folder, filters, Environment.ProcessorCount, - progress)); - - if (buildHashes == null) - return Array.Empty(); - - return new [] { buildHashes }; - } - - private static FilteringData GetFilters() - { - var il2Cpp = false; -#if UNITY_EDITOR - il2Cpp = SettingsUtils.IsIL2CPPEnabled(); -#elif ENABLE_IL2CPP - il2Cpp = true; -#endif - return FiltersProducer.GetFileFiltersStandaloneWindows(il2Cpp); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/WindowsBuildHashGenerator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/WindowsBuildHashGenerator.cs.meta deleted file mode 100644 index bc28d90..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Genuine/CodeHash/PostProcess/Platforms/WindowsBuildHashGenerator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 02b38fd3639d4fd7a1a6732fadbeebc8 -timeCreated: 1680806778 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection.meta deleted file mode 100644 index 9fb3da5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 59e19c7338f04be697d7788c76f0cde6 -timeCreated: 1552927805 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/AllowedAssembly.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/AllowedAssembly.cs deleted file mode 100644 index 4c89286..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/AllowedAssembly.cs +++ /dev/null @@ -1,70 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - - /// - /// Describes assembly which is added to the InjectionDetector "white list". - /// - [Serializable] - public class AllowedAssembly - { - [Obsolete("Please use Name property instead.", false)] - public string name => Name; - - [Obsolete("Please use Hashes property instead.", false)] - public int[] hashes => Hashes; - - /// - /// Assembly name, i.e.: ACTk.Runtime. - /// - public string Name { get; } - - /// - /// Array of whitelisted hashes for the assembly with given Name. - /// - public int[] Hashes { get; private set; } - - /// - /// Constructs new instance. - /// - /// Sets Name property. - /// Sets Hashes property. - public AllowedAssembly(string name, int[] hashes) - { - Name = name; - Hashes = hashes; - } - - /// - /// Allows adding new hash to the Hashes collection. - /// - /// New whitelisted hash for the assembly with specified Name. - /// True if hash was added and false otherwise (i.e. when hash already existed in the collection). - public bool AddHash(int hash) - { - if (Array.IndexOf(Hashes, hash) != -1) return false; - - var oldLen = Hashes.Length; - var newLen = oldLen + 1; - - var newHashesArray = new int[newLen]; - Array.Copy(Hashes, newHashesArray, oldLen); - - Hashes = newHashesArray; - Hashes[oldLen] = hash; - - return true; - } - - public override string ToString() - { - return Name + " (hashes: " + Hashes.Length + ")"; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/AllowedAssembly.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/AllowedAssembly.cs.meta deleted file mode 100644 index 02fdd25..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/AllowedAssembly.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 99e59ee643091664d874b8418be8b78e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionConstants.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionConstants.cs deleted file mode 100644 index ada09dd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionConstants.cs +++ /dev/null @@ -1,23 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System.IO; - - internal static class InjectionConstants - { - public const string LegacyWhitelistRelativePath = "InjectionDetectorData/UserWhitelist.bytes"; - - public const string PrefsKey = "ACTDIDEnabledGlobal"; - public const string DataSeparator = ":"; - - public static readonly string ResourcesFolder = Path.Combine(ACTkEditorConstants.AssetsFolder, "Resources"); - public static readonly string DataFilePath = Path.Combine(ResourcesFolder, DataFileName); - - private const string DataFileName = "fndid.bytes"; - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionConstants.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionConstants.cs.meta deleted file mode 100644 index ab868be..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionConstants.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fdb8abbb3fde4da3aa210fccf74e9524 -timeCreated: 1552925592 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionRoutines.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionRoutines.cs deleted file mode 100644 index 7c7e04a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionRoutines.cs +++ /dev/null @@ -1,229 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if (UNITY_STANDALONE || UNITY_ANDROID) -#define UNITY_SUPPORTED_PLATFORM -#endif - -#define ACTK_DEBUG -#undef ACTK_DEBUG - -#define ACTK_DEBUG_VERBOSE -#undef ACTK_DEBUG_VERBOSE - -#define ACTK_DEBUG_PARANIOD -#undef ACTK_DEBUG_PARANIOD - -#if ACTK_DEBUG_PARANIOD -#define ACTK_DEBUG -#define ACTK_DEBUG_VERBOSE -#endif - -#if ACTK_DEBUG_VERBOSE -#define ACTK_DEBUG -#endif - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Reflection; - using Common; - using ObscuredTypes; - using UnityEditor; - using UnityEngine; - - internal static class InjectionRoutines - { - private static bool cleanupDone; - - public static bool IsInjectionPossible() - { - return IsTargetPlatformCompatible() && !SettingsUtils.IsIL2CPPEnabled(); - } - - public static bool IsTargetPlatformCompatible() - { -#if UNITY_SUPPORTED_PLATFORM - return true; -#else - return false; -#endif - } - - public static int GetAssemblyHash(AssemblyName ass) - { - var hashInfo = ass.Name; - - var bytes = ass.GetPublicKeyToken(); - if (bytes != null && bytes.Length == 8) - { - hashInfo += PublicKeyTokenToString(bytes); - } - - // Jenkins hash function (http://en.wikipedia.org/wiki/Jenkins_hash_function) - var result = 0; - var len = hashInfo.Length; - - for (var i = 0; i < len; ++i) - { - result += hashInfo[i]; - result += (result << 10); - result ^= (result >> 6); - } - result += (result << 3); - result ^= (result >> 11); - result += (result << 15); - - return result; - } - - public static List MergeAllowedAssemblies(IEnumerable collection1, IEnumerable collection2) - { - var result = new List(collection1); - - foreach (var whiteListedAssembly in collection2) - { - var exists = false; - foreach (var assembly in result) - { - if (assembly.Name != whiteListedAssembly.Name) continue; - - exists = true; - foreach (var hash in whiteListedAssembly.Hashes) - { - if (Array.IndexOf(assembly.Hashes, hash) == -1) - { - assembly.AddHash(hash); - } - } - - break; - } - - if (!exists) - { - result.Add(whiteListedAssembly); - } - } - - return result; - } - - public static void InitCleanup() - { - cleanupDone = false; - } - - public static void Cleanup() - { - if (cleanupDone) return; - cleanupDone = true; - - TryMigrateSettings(); - TryMigrateLegacyInjectionWhitelist(); - - if (File.Exists(InjectionConstants.DataFilePath)) - { -#if ACTK_DEBUG - Debug.Log(ACTk.LogPrefix + "Data file found and going to be removed: " + InjectionConstants.DataFilePath); -#endif - EditorTools.DeleteFile(InjectionConstants.DataFilePath); - EditorTools.DeleteFile(AssetDatabase.GetTextMetaFilePathFromAssetPath(InjectionConstants.DataFilePath)); - EditorTools.RemoveDirectoryIfEmpty(InjectionConstants.ResourcesFolder); - - AssetDatabase.Refresh(); - } - } - - private static string PublicKeyTokenToString(byte[] bytes) - { - var result = ""; - - // AssemblyName.GetPublicKeyToken() returns 8 bytes - for (var i = 0; i < 8; i++) - { - result += ACTkEditorConstants.HexTable[bytes[i]]; - } - - return result; - } - - private static void TryMigrateSettings() - { - if (!EditorPrefs.HasKey(InjectionConstants.PrefsKey)) return; - - ACTkSettings.Instance.InjectionDetectorEnabled = EditorPrefs.GetBool(InjectionConstants.PrefsKey); - EditorPrefs.DeleteKey(InjectionConstants.PrefsKey); - } - - private static void TryMigrateLegacyInjectionWhitelist() - { - if (!File.Exists(InjectionConstants.LegacyWhitelistRelativePath)) return; - var whitelistedAssemblies = LoadAndParseLegacyWhitelist(); - ACTkSettings.Instance.InjectionDetectorWhiteList = MergeAllowedAssemblies(ACTkSettings.Instance.InjectionDetectorWhiteList, whitelistedAssemblies); - } - - private static IEnumerable LoadAndParseLegacyWhitelist() - { - var result = new List(); - string[] separator = { InjectionConstants.DataSeparator }; - - var fs = new FileStream(InjectionConstants.LegacyWhitelistRelativePath, FileMode.Open, FileAccess.Read, FileShare.Read); - var br = new BinaryReader(fs); - - try - { - var count = br.ReadInt32(); - - for (var i = 0; i < count; i++) - { - var line = br.ReadString(); - line = new string(ObscuredString.Encrypt(line, ACTk.StringKey)); - var strArr = line.Split(separator, StringSplitOptions.RemoveEmptyEntries); - var stringsCount = strArr.Length; - if (stringsCount > 1) - { - var assemblyName = strArr[0]; - - var hashes = new int[stringsCount - 1]; - for (var j = 1; j < stringsCount; j++) - { - var success = int.TryParse(strArr[j], out var parseResult); - if (success) - { - hashes[j - 1] = parseResult; - } - else - { - Debug.LogError(ACTk.LogPrefix + "Could not parse value: " + strArr[j] + - ", line:\n" + line); - } - } - - result.Add(new AllowedAssembly(assemblyName, hashes)); - } - else - { - throw new Exception("Error parsing whitelist file line!"); - } - } - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Error while reading legacy whitelist!", e); - } - finally - { - br.Close(); - fs.Close(); - } - - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionRoutines.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionRoutines.cs.meta deleted file mode 100644 index 6ec742d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionRoutines.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 682e4f8bd25b4b3f9ab90c2c080decf5 -timeCreated: 1552927820 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionWhitelistBuilder.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionWhitelistBuilder.cs deleted file mode 100644 index 7ba9c6f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionWhitelistBuilder.cs +++ /dev/null @@ -1,234 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#define ACTK_DEBUG -#undef ACTK_DEBUG - -#define ACTK_DEBUG_VERBOSE -#undef ACTK_DEBUG_VERBOSE - -#define ACTK_DEBUG_PARANIOD -#undef ACTK_DEBUG_PARANIOD - -#if ACTK_DEBUG_PARANIOD -#define ACTK_DEBUG -#define ACTK_DEBUG_VERBOSE -#endif - -#if ACTK_DEBUG_VERBOSE -#define ACTK_DEBUG -#endif - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Collections.Generic; - using System.Globalization; - using System.IO; - using System.Linq; - using System.Reflection; - using System.Text; - using Common; - using Detectors; - using ObscuredTypes; - using PostProcessors; - using UnityEditor; - using Debug = UnityEngine.Debug; - -#if ACTK_DEBUG - using System.Diagnostics; -#endif - - internal static class InjectionWhitelistBuilder - { - private const string ProgressCaption = "ACTk: Building InjectionDetector Whitelist"; - -#if ACTK_DEBUG - private static Stopwatch sw; -#endif - - public static void GenerateWhitelist() - { - try - { - GenerateWhitelistInternal(); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport($"Something went wrong while building {nameof(InjectionDetector)} whitelist!", e); - } - finally - { - EditorUtility.ClearProgressBar(); - } - } - - private static void GenerateWhitelistInternal() - { -#if ACTK_DEBUG - sw = Stopwatch.StartNew(); - sw.Stop(); - Debug.Log("=== Injection Detector Whitelist Build Start ==="); - sw.Start(); -#endif - EditorUtility.DisplayProgressBar(ProgressCaption, "Gathering assemblies", 0); - - var assembliesInBuild = GetAssembliesInBuild(); - if (assembliesInBuild.Length == 0) - ACTk.PrintExceptionForSupport("Can't find any assemblies in build!"); - - var assembliesAllowedByUser = GetUserWhiteListAssemblies(); - var allAllowedAssemblies = InjectionRoutines.MergeAllowedAssemblies(assembliesInBuild, assembliesAllowedByUser); - - EditorUtility.DisplayProgressBar(ProgressCaption, "Writing assemblies hashes", 0); - - WriteAllowedAssemblies(allAllowedAssemblies); - -#if ACTK_DEBUG - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "WhiteList build duration: " + sw.ElapsedMilliseconds + " ms."); -#endif - - AssetDatabase.Refresh(); - } - - private static AllowedAssembly[] GetAssembliesInBuild() - { -#if ACTK_DEBUG_VERBOSE - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Trying to guess which assemblies can get into the build..."); - sw.Start(); -#endif - var libraries = BuildPostProcessor.GetGuessedLibrariesForBuild(); - -#if ACTK_DEBUG_VERBOSE - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Total libraries candidates: " + libraries.Length); - sw.Start(); - - var invalidAssemblies = string.Empty; -#endif - - var result = new List(); - - foreach (var libraryPath in libraries) - { -#if ACTK_DEBUG_PARANIOD - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Checking library at the path: " + libraryPath); - sw.Start(); -#endif - try - { - var assName = AssemblyName.GetAssemblyName(libraryPath); - var name = assName.Name; - var hash = InjectionRoutines.GetAssemblyHash(assName); - - var allowed = result.FirstOrDefault(allowedAssembly => allowedAssembly.Name == name); - if (allowed != null) - { - allowed.AddHash(hash); - } - else - { - allowed = new AllowedAssembly(name, new[] { hash }); - result.Add(allowed); - } - } - catch - { - // not a valid IL assembly, skipping -#if ACTK_DEBUG_VERBOSE - invalidAssemblies += libraryPath + "\n"; -#endif - } - } - -#if ACTK_DEBUG_VERBOSE - if (!string.IsNullOrEmpty(invalidAssemblies)) - { - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Not valid assemblies:\n" + invalidAssemblies); - sw.Start(); - } -#endif - -#if ACTK_DEBUG - sw.Stop(); - var trace = ACTk.LogPrefix + "Found assemblies in build (" + result.Count + ", " + sw.ElapsedMilliseconds + " ms):\n"; - - foreach (var allowedAssembly in result) - { - trace += " Name: " + allowedAssembly.name + "\n"; - trace = allowedAssembly.hashes.Aggregate(trace, (current, hash) => current + (" Hash: " + hash + "\n")); - } - Debug.Log(trace); - sw.Start(); -#endif - return result.ToArray(); - } - - private static AllowedAssembly[] GetUserWhiteListAssemblies() - { - var userWhiteList = ACTkSettings.Instance.InjectionDetectorWhiteList; -#if ACTK_DEBUG - sw.Stop(); - var trace = ACTk.LogPrefix + "User White List assemblies (" + userWhiteList.Count + "):\n"; - - foreach (var allowedAssembly in userWhiteList) - { - trace += " Name: " + allowedAssembly.name + "\n"; - trace = allowedAssembly.hashes.Aggregate(trace, (current, hash) => current + (" Hash: " + hash + "\n")); - } - Debug.Log(trace); - sw.Start(); -#endif - return userWhiteList.ToArray(); - } - - private static void WriteAllowedAssemblies(List assemblies) - { - Directory.CreateDirectory(InjectionConstants.ResourcesFolder); - var bw = new BinaryWriter(new FileStream(InjectionConstants.DataFilePath, FileMode.Create, FileAccess.Write, FileShare.Read), Encoding.Unicode); - - bw.Write(assemblies.Count); - -#if ACTK_DEBUG_VERBOSE - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Writing assemblies data, count: " + assemblies.Count); - sw.Start(); -#endif - - foreach (var assembly in assemblies) - { - var name = assembly.Name; - var hashes = ""; - - for (var j = 0; j < assembly.Hashes.Length; j++) - { - hashes += assembly.Hashes[j].ToString(CultureInfo.InvariantCulture); - if (j < assembly.Hashes.Length - 1) - { - hashes += InjectionConstants.DataSeparator; - } - } - - var line = ObscuredString.Encrypt(name + InjectionConstants.DataSeparator + hashes, ACTk.StringKey); - -#if ACTK_DEBUG_PARANIOD - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Writing assembly:\n" + name + InjectionConstants.DataSeparator + hashes + "\n" + - new string(line) + ", length: " + line.Length); - sw.Start(); -#endif - bw.Write(line.Length); - bw.Write(line, 0, line.Length); - } - - bw.Close(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionWhitelistBuilder.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionWhitelistBuilder.cs.meta deleted file mode 100644 index 4dc6e88..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/InjectionWhitelistBuilder.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4ed4f862c6dc42a49c1f47d1e9ee2fb5 -timeCreated: 1552945114 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess.meta deleted file mode 100644 index fd1618b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bb730acf6c1569848b1187cd6c0e312c -folderAsset: yes -timeCreated: 1552913902 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess/BuildPostProcessor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess/BuildPostProcessor.cs deleted file mode 100644 index 75b69dc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess/BuildPostProcessor.cs +++ /dev/null @@ -1,93 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PostProcessors -{ - using System; - using System.IO; - using System.Text; - using Common; - using UnityEditor; - using UnityEditor.Build; - using UnityEditor.Build.Reporting; - - internal class BuildPostProcessor : IPreprocessBuildWithReport, IPostBuildPlayerScriptDLLs, IPostprocessBuildWithReport - { - int IOrderedCallback.callbackOrder => int.MaxValue - 1; - - public void OnPreprocessBuild(BuildReport report) - { - if (!ACTkSettings.Instance.InjectionDetectorEnabled || - !InjectionRoutines.IsInjectionPossible()) - { - return; - } - - InjectionRoutines.InitCleanup(); - Prepare(); - } - - public void OnPostBuildPlayerScriptDLLs(BuildReport report) - { - if (!ACTkSettings.Instance.InjectionDetectorEnabled || - !InjectionRoutines.IsInjectionPossible()) - { - return; - } - - InjectionWhitelistBuilder.GenerateWhitelist(); - } - - public void OnPostprocessBuild(BuildReport report) - { - Cleanup(); - } - - public static string[] GetGuessedLibrariesForBuild() - { - var stagingAreaFolder = Path.Combine(ACTkEditorConstants.ProjectTempFolder, "StagingArea"); - return EditorTools.FindLibrariesAt(stagingAreaFolder); - } - - private void Prepare() - { - try - { - EditorApplication.LockReloadAssemblies(); - - if (!Directory.Exists(InjectionConstants.ResourcesFolder)) - { - Directory.CreateDirectory(InjectionConstants.ResourcesFolder); - } - - File.WriteAllText(InjectionConstants.DataFilePath, "please remove me", Encoding.Unicode); - AssetDatabase.Refresh(); - - EditorApplication.update += OnEditorUpdate; - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Injection Detector preparation failed!", e); - } - finally - { - EditorApplication.UnlockReloadAssemblies(); - } - } - - private void OnEditorUpdate() - { - if (!BuildPipeline.isBuildingPlayer) - Cleanup(); - } - - private void Cleanup() - { - InjectionRoutines.Cleanup(); - EditorApplication.update -= OnEditorUpdate; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess/BuildPostProcessor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess/BuildPostProcessor.cs.meta deleted file mode 100644 index d1fe4c7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/PostProcess/BuildPostProcessor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e79f56c36f349f64995908c2bc571662 -timeCreated: 1552680217 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/UserWhitelistEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/UserWhitelistEditor.cs deleted file mode 100644 index c183a80..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/UserWhitelistEditor.cs +++ /dev/null @@ -1,276 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Reflection; - using UnityEditor; - using UnityEngine; - - internal class UserWhitelistEditor : EditorWindow - { - private const string InitialCustomName = "AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"; - private static List whitelist; - private static string whitelistPath; - - private Vector2 scrollPosition; - private bool manualAssemblyWhitelisting; - private string manualAssemblyWhitelistingName = InitialCustomName; - - internal static void ShowWindow() - { - EditorWindow myself = GetWindow(false, "Whitelist Editor", true); - myself.minSize = new Vector2(500, 200); - } - - private void OnLostFocus() - { - manualAssemblyWhitelisting = false; - manualAssemblyWhitelistingName = InitialCustomName; - } - - private void OnGUI() - { - if (whitelist == null) - { - whitelist = new List(); - LoadAndParseWhitelist(); - } - - var tmpStyle = new GUIStyle(EditorStyles.largeLabel) - { - alignment = TextAnchor.MiddleCenter, - fontStyle = FontStyle.Bold - }; - GUILayout.Label("User-defined Whitelist of Assemblies trusted by Injection Detector", tmpStyle); - - scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); - var whitelistUpdated = false; - - var count = whitelist.Count; - - if (count > 0) - { - for (var i = 0; i < count; i++) - { - var assembly = whitelist[i]; - using (GUITools.Horizontal()) - { - GUILayout.Label(assembly.ToString()); - if (GUILayout.Button(new GUIContent("-", "Remove Assembly from Whitelist"), GUILayout.Width(30))) - { - whitelist.Remove(assembly); - whitelistUpdated = true; - break; - } - } - } - } - else - { - tmpStyle = new GUIStyle(EditorStyles.largeLabel) - { - alignment = TextAnchor.MiddleCenter - }; - GUILayout.Label("- no Assemblies added so far (use buttons below to add) -", tmpStyle); - } - - if (manualAssemblyWhitelisting) - { - manualAssemblyWhitelistingName = EditorGUILayout.TextField(manualAssemblyWhitelistingName); - - using (GUITools.Horizontal()) - { - if (GUILayout.Button("Save")) - { - try - { - if (manualAssemblyWhitelistingName.StartsWith("Cause:")) - { - throw new Exception("Please remove Cause: from the assembly name!"); - } - - var assName = new AssemblyName(manualAssemblyWhitelistingName.Trim()); - - var res = TryWhitelistAssemblyName(assName, true); - if (res != WhitelistingResult.Exists) - { - whitelistUpdated = true; - } - manualAssemblyWhitelisting = false; - manualAssemblyWhitelistingName = InitialCustomName; - } - catch (Exception e) - { - ShowNotification(new GUIContent(e.Message)); - } - - GUI.FocusControl(""); - } - - if (GUILayout.Button("Cancel")) - { - manualAssemblyWhitelisting = false; - manualAssemblyWhitelistingName = InitialCustomName; - GUI.FocusControl(""); - } - } - } - - EditorGUILayout.EndScrollView(); - - using (GUITools.Horizontal()) - { - GUILayout.Space(20); - if (GUILayout.Button("Add Assembly")) - { - var assemblyPath = EditorUtility.OpenFilePanel("Choose an Assembly to add", "", "dll"); - if (!string.IsNullOrEmpty(assemblyPath)) - { - whitelistUpdated |= TryWhitelistAssemblies(new[] {assemblyPath}, true); - } - } - - if (GUILayout.Button("Add Assemblies from Folder")) - { - var selectedFolder = EditorUtility.OpenFolderPanel("Choose a Folder with Assemblies", "", ""); - if (!string.IsNullOrEmpty(selectedFolder)) - { - var libraries = EditorTools.FindLibrariesAt(selectedFolder); - whitelistUpdated |= TryWhitelistAssemblies(libraries); - } - } - - if (!manualAssemblyWhitelisting) - { - if (GUILayout.Button("Add Assembly manually")) - { - manualAssemblyWhitelisting = true; - } - } - - if (count > 0) - { - if (GUILayout.Button("Clear")) - { - if (EditorUtility.DisplayDialog("Please confirm", - "Are you sure you wish to completely clear your Injection Detector whitelist?", "Yes", "No")) - { - whitelist.Clear(); - whitelistUpdated = true; - } - } - } - GUILayout.Space(20); - } - - GUILayout.Space(20); - - if (whitelistUpdated) - { - WriteWhitelist(); - } - } - - private bool TryWhitelistAssemblies(IList libraries, bool singleFile = false) - { - var added = 0; - var updated = 0; - - var count = libraries.Count; - - for (var i = 0; i < count; i++) - { - var libraryPath = libraries[i]; - try - { - var assName = AssemblyName.GetAssemblyName(libraryPath); - var whitelistingResult = TryWhitelistAssemblyName(assName, singleFile); - switch (whitelistingResult) - { - case WhitelistingResult.Added: - added++; - break; - case WhitelistingResult.Updated: - updated++; - break; - case WhitelistingResult.Exists: - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - catch - { - if (singleFile) - ShowNotification(new GUIContent("Selected file is not a valid .NET assembly!")); - } - } - - if (!singleFile) - { - ShowNotification(new GUIContent("Assemblies added: " + added + ", updated: " + updated)); - } - - return added > 0 || updated > 0; - } - - private WhitelistingResult TryWhitelistAssemblyName(AssemblyName assName, bool singleFile) - { - var result = WhitelistingResult.Exists; - - var assNameString = assName.Name; - var hash = InjectionRoutines.GetAssemblyHash(assName); - - var allowed = whitelist.FirstOrDefault(allowedAssembly => allowedAssembly.Name == assNameString); - - if (allowed != null) - { - if (allowed.AddHash(hash)) - { - if (singleFile) ShowNotification(new GUIContent("New hash added!")); - result = WhitelistingResult.Updated; - } - else - { - if (singleFile) ShowNotification(new GUIContent("Assembly already exists!")); - } - } - else - { - allowed = new AllowedAssembly(assNameString, new[] {hash}); - whitelist.Add(allowed); - - if (singleFile) ShowNotification(new GUIContent("Assembly added!")); - result = WhitelistingResult.Added; - } - - return result; - } - - private static void LoadAndParseWhitelist() - { - whitelist = ACTkSettings.Instance.InjectionDetectorWhiteList; - } - - private static void WriteWhitelist() - { - ACTkSettings.Instance.InjectionDetectorWhiteList = whitelist; - } - - ////////////////////////////////////// - - private enum WhitelistingResult : byte - { - Exists, - Added, - Updated - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/UserWhitelistEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/UserWhitelistEditor.cs.meta deleted file mode 100644 index 0c8666a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Injection/UserWhitelistEditor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: bd28be63d7a09224da0cac7e3178896d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes.meta deleted file mode 100644 index 41f398b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d1140a4b6184eae45916fdae3da40a10 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.Routines.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.Routines.cs deleted file mode 100644 index 9c25721..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.Routines.cs +++ /dev/null @@ -1,253 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using Common; - using UnityEditor; - - public static partial class MigrateUtils - { - private static bool MigrateObscuredDouble(SerializedProperty sp) - { - var hiddenValue = sp.FindPropertyRelative("hiddenValue"); - if (hiddenValue == null) - return false; - - var fakeValue = sp.FindPropertyRelative("fakeValue"); - - var migratedVersion = sp.FindPropertyRelative("migratedVersion"); - if (migratedVersion != null) - { - if (migratedVersion.stringValue == MigrationVersion) - { - if (!fakeValue.prefabOverride) - return false; - } - - migratedVersion.stringValue = MigrationVersion; - } - - var hiddenValueOldProperty = sp.FindPropertyRelative("hiddenValueOldByte8"); - var hiddenValueOld = default(ACTkByte8); - var oldValueExists = false; - - if (hiddenValueOldProperty?.FindPropertyRelative("b1") != null) - { - hiddenValueOld.b1 = (byte)hiddenValueOldProperty.FindPropertyRelative("b1").intValue; - hiddenValueOld.b2 = (byte)hiddenValueOldProperty.FindPropertyRelative("b2").intValue; - hiddenValueOld.b3 = (byte)hiddenValueOldProperty.FindPropertyRelative("b3").intValue; - hiddenValueOld.b4 = (byte)hiddenValueOldProperty.FindPropertyRelative("b4").intValue; - hiddenValueOld.b5 = (byte)hiddenValueOldProperty.FindPropertyRelative("b5").intValue; - hiddenValueOld.b6 = (byte)hiddenValueOldProperty.FindPropertyRelative("b6").intValue; - hiddenValueOld.b7 = (byte)hiddenValueOldProperty.FindPropertyRelative("b7").intValue; - hiddenValueOld.b8 = (byte)hiddenValueOldProperty.FindPropertyRelative("b8").intValue; - - if (hiddenValueOld.b1 != 0 || - hiddenValueOld.b2 != 0 || - hiddenValueOld.b3 != 0 || - hiddenValueOld.b4 != 0 || - hiddenValueOld.b5 != 0 || - hiddenValueOld.b6 != 0 || - hiddenValueOld.b7 != 0 || - hiddenValueOld.b8 != 0) - { - oldValueExists = true; - } - } - - if (!oldValueExists) - return false; - - var union = new LongBytesUnion {b8 = hiddenValueOld}; - union.b8.Shuffle(); - hiddenValue.longValue = union.l; - - hiddenValueOldProperty.FindPropertyRelative("b1").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b2").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b3").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b4").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b5").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b6").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b7").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b8").intValue = 0; - - return true; - } - - private static bool MigrateObscuredFloat(SerializedProperty sp) - { - var hiddenValue = sp.FindPropertyRelative("hiddenValue"); - if (hiddenValue == null) - return false; - - var fakeValue = sp.FindPropertyRelative("fakeValue"); - - var migratedVersion = sp.FindPropertyRelative("migratedVersion"); - if (migratedVersion != null) - { - if (migratedVersion.stringValue == MigrationVersion) - { - if (!fakeValue.prefabOverride) - return false; - } - - migratedVersion.stringValue = MigrationVersion; - } - - var hiddenValueOldProperty = sp.FindPropertyRelative("hiddenValueOldByte4"); - var hiddenValueOld = default(ACTkByte4); - var oldValueExists = false; - - if (hiddenValueOldProperty?.FindPropertyRelative("b1") != null) - { - hiddenValueOld.b1 = (byte)hiddenValueOldProperty.FindPropertyRelative("b1").intValue; - hiddenValueOld.b2 = (byte)hiddenValueOldProperty.FindPropertyRelative("b2").intValue; - hiddenValueOld.b3 = (byte)hiddenValueOldProperty.FindPropertyRelative("b3").intValue; - hiddenValueOld.b4 = (byte)hiddenValueOldProperty.FindPropertyRelative("b4").intValue; - - if (hiddenValueOld.b1 != 0 || - hiddenValueOld.b2 != 0 || - hiddenValueOld.b3 != 0 || - hiddenValueOld.b4 != 0) - { - oldValueExists = true; - } - } - - if (!oldValueExists) - return false; - - var union = new FloatIntBytesUnion {b4 = hiddenValueOld}; - union.b4.Shuffle(); - hiddenValue.longValue = union.i; - - hiddenValueOldProperty.FindPropertyRelative("b1").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b2").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b3").intValue = 0; - hiddenValueOldProperty.FindPropertyRelative("b4").intValue = 0; - - return true; - } - - private static bool MigrateObscuredVector2(SerializedProperty sp) - { - var hiddenValue = sp.FindPropertyRelative("hiddenValue"); - if (hiddenValue == null) - return false; - - var fakeValue = sp.FindPropertyRelative("fakeValue"); - - var migratedVersion = sp.FindPropertyRelative("migratedVersion"); - if (migratedVersion != null) - { - if (migratedVersion.stringValue == MigrationVersion) - { - if (!fakeValue.prefabOverride) - return false; - } - - migratedVersion.stringValue = MigrationVersion; - } - - var hiddenValueX = hiddenValue.FindPropertyRelative("x"); - var hiddenValueY = hiddenValue.FindPropertyRelative("y"); - - var union = new FloatIntBytesUnion {i = hiddenValueX.intValue}; - union.b4.Shuffle(); - hiddenValueX.intValue = union.i; - - union.i = hiddenValueY.intValue; - union.b4.Shuffle(); - hiddenValueY.intValue = union.i; - - return true; - } - - private static bool MigrateObscuredVector3(SerializedProperty sp) - { - var hiddenValue = sp.FindPropertyRelative("hiddenValue"); - if (hiddenValue == null) - return false; - - var fakeValue = sp.FindPropertyRelative("fakeValue"); - - var migratedVersion = sp.FindPropertyRelative("migratedVersion"); - if (migratedVersion != null) - { - if (migratedVersion.stringValue == MigrationVersion) - { - if (!fakeValue.prefabOverride) - return false; - } - - migratedVersion.stringValue = MigrationVersion; - } - - var hiddenValueX = hiddenValue.FindPropertyRelative("x"); - var hiddenValueY = hiddenValue.FindPropertyRelative("y"); - var hiddenValueZ = hiddenValue.FindPropertyRelative("z"); - - var union = new FloatIntBytesUnion {i = hiddenValueX.intValue}; - union.b4.Shuffle(); - hiddenValueX.intValue = union.i; - - union.i = hiddenValueY.intValue; - union.b4.Shuffle(); - hiddenValueY.intValue = union.i; - - union.i = hiddenValueZ.intValue; - union.b4.Shuffle(); - hiddenValueZ.intValue = union.i; - - return true; - } - - private static bool MigrateObscuredQuaternion(SerializedProperty sp) - { - var hiddenValue = sp.FindPropertyRelative("hiddenValue"); - if (hiddenValue == null) - return false; - - var fakeValue = sp.FindPropertyRelative("fakeValue"); - - var migratedVersion = sp.FindPropertyRelative("migratedVersion"); - if (migratedVersion != null) - { - if (migratedVersion.stringValue == MigrationVersion) - { - if (!fakeValue.prefabOverride) - return false; - } - - migratedVersion.stringValue = MigrationVersion; - } - - var hiddenValueX = hiddenValue.FindPropertyRelative("x"); - var hiddenValueY = hiddenValue.FindPropertyRelative("y"); - var hiddenValueZ = hiddenValue.FindPropertyRelative("z"); - var hiddenValueW = hiddenValue.FindPropertyRelative("w"); - - var union = new FloatIntBytesUnion {i = hiddenValueX.intValue}; - union.b4.Shuffle(); - hiddenValueX.intValue = union.i; - - union.i = hiddenValueY.intValue; - union.b4.Shuffle(); - hiddenValueY.intValue = union.i; - - union.i = hiddenValueZ.intValue; - union.b4.Shuffle(); - hiddenValueZ.intValue = union.i; - - union.i = hiddenValueW.intValue; - union.b4.Shuffle(); - hiddenValueW.intValue = union.i; - - return true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.Routines.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.Routines.cs.meta deleted file mode 100644 index 93f08dd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.Routines.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7e1925e5a5f04349bee0d734c5705598 -timeCreated: 1621638102 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.cs deleted file mode 100644 index 5d5f03c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.cs +++ /dev/null @@ -1,160 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using Common; - using System.Runtime.InteropServices; - using ObscuredTypes; - using PropertyDrawers; - using UnityEditor; - using UnityEngine; - using Object = UnityEngine.Object; - - /// - /// Class with utility functions to help with ACTk migrations after updates. - /// - public static partial class MigrateUtils - { - private const string MigrationVersion = "2"; - - /// - /// Checks all prefabs in project for old version of obscured types and tries to migrate values to the new version. - /// - public static void MigrateObscuredTypesOnPrefabs(params string[] typesToMigrate) - { - if (!EditorUtility.DisplayDialog("ACTk Obscured types migration", - "Are you sure you wish to scan all prefabs in your project and automatically migrate values to the new format?\n" + - GetWhatMigratesString(typesToMigrate), - "Yes", "No")) - { - Debug.Log(ACTk.LogPrefix + "Obscured types migration was canceled by user."); - return; - } - - EditorTools.TraverseSerializedScriptsAssets(ProcessProperty, typesToMigrate); - } - - /// - /// Checks all scenes in project for old version of obscured types and tries to migrate values to the new version. - /// - public static void MigrateObscuredTypesInScene(params string[] typesToMigrate) - { - if (!EditorUtility.DisplayDialog("ACTk Obscured types migration", - "Are you sure you wish to scan all opened scenes and automatically migrate values to the new format?\n" + - GetWhatMigratesString(typesToMigrate), - "Yes", "No")) - { - Debug.Log(ACTk.LogPrefix + "Obscured types migration was canceled by user."); - return; - } - - EditorTools.TraverseSerializedScriptsInScenes(ProcessProperty, typesToMigrate); - } - - private static bool ProcessProperty(Object target, SerializedProperty sp, string label, string type) - { - var modified = false; - - switch (type) - { - case "ObscuredDouble": - { - modified = MigrateObscuredDouble(sp); - break; - } - case "ObscuredFloat": - { - modified = MigrateObscuredFloat(sp); - break; - } - case "ObscuredVector2": - { - modified = MigrateObscuredVector2(sp); - break; - } - case "ObscuredVector3": - { - modified = MigrateObscuredVector3(sp); - break; - } - case "ObscuredQuaternion": - { - modified = MigrateObscuredQuaternion(sp); - break; - } - case "ObscuredString": - { - modified = MigrateObscuredStringIfNecessary(sp); - break; - } - } - - if (modified) - Debug.Log($"{ACTk.LogPrefix}Migrated property {sp.displayName}:{type} at the object {label}"); - - return modified; - } - - internal static bool MigrateObscuredStringIfNecessary(SerializedProperty sp) - { - var hiddenValueProperty = sp.FindPropertyRelative("hiddenValue"); - if (hiddenValueProperty == null) return false; - - var currentCryptoKeyOldProperty = sp.FindPropertyRelative("currentCryptoKey"); - if (currentCryptoKeyOldProperty == null) return false; - - var currentCryptoKeyOld = currentCryptoKeyOldProperty.stringValue; - if (string.IsNullOrEmpty(currentCryptoKeyOld)) return false; - - var hiddenCharsProperty = sp.FindPropertyRelative("hiddenChars"); - if (hiddenCharsProperty == null) return false; - - var hiddenValue = ObscuredStringDrawer.GetBytesObsolete(hiddenValueProperty); - - var decrypted = - ObscuredString.EncryptDecryptObsolete(ObscuredString.GetStringObsolete(hiddenValue), - currentCryptoKeyOld); - - var currentCryptoKey = ObscuredString.GenerateKey(); - var hiddenChars = ObscuredString.InternalEncryptDecrypt(decrypted.ToCharArray(), currentCryptoKey); - - ObscuredStringDrawer.SetChars(hiddenCharsProperty, hiddenChars); - var currentCryptoKeyProperty = sp.FindPropertyRelative("cryptoKey"); - ObscuredStringDrawer.SetChars(currentCryptoKeyProperty, currentCryptoKey); - - hiddenValueProperty.arraySize = 0; - currentCryptoKeyOldProperty.stringValue = null; - - return true; - } - - private static string GetWhatMigratesString(string[] typesToMigrate) - { - return string.Join(", ", typesToMigrate) + " will migrated."; - } - - [StructLayout(LayoutKind.Explicit)] - private struct LongBytesUnion - { - [FieldOffset(0)] - public readonly long l; - - [FieldOffset(0)] - public ACTkByte8 b8; - } - - [StructLayout(LayoutKind.Explicit)] - private struct FloatIntBytesUnion - { - [FieldOffset(0)] - public int i; - - [FieldOffset(0)] - public ACTkByte4 b4; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.cs.meta deleted file mode 100644 index badd06f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/MigrateUtils.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c1c7ff960ccd8a243ad385a3fe965e9e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers.meta deleted file mode 100644 index 8930a17..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: dfff86e18b5565b499779c37590c4d83 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBigIntegerDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBigIntegerDrawer.cs deleted file mode 100644 index a9fe0fa..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBigIntegerDrawer.cs +++ /dev/null @@ -1,122 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using System.Numerics; - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredBigInteger))] - internal class ObscuredBigIntegerDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty sp, GUIContent label) - { - var hiddenValue = sp.FindPropertyRelative(nameof(ObscuredBigInteger.hiddenValue)); - var cryptoKey = sp.FindPropertyRelative(nameof(ObscuredBigInteger.currentCryptoKey)); - var inited = sp.FindPropertyRelative(nameof(ObscuredBigInteger.inited)); - var fakeValue = sp.FindPropertyRelative(nameof(ObscuredBigInteger.fakeValue)); - var fakeValueActive = sp.FindPropertyRelative(nameof(ObscuredBigInteger.fakeValueActive)); - - var currentCryptoKey = (uint)cryptoKey.intValue; - BigInteger val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - { - currentCryptoKey = ObscuredBigInteger.GenerateKey(); - cryptoKey.intValue = (int)currentCryptoKey; - } - - var encrypted = ObscuredBigInteger.Encrypt(0, currentCryptoKey); - SetBigInteger(hiddenValue, encrypted); - inited.boolValue = true; - SetBigInteger(fakeValue, 0); - } - else - { - val = ObscuredBigInteger.Decrypt(GetBigInteger(hiddenValue), currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, sp); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - var bigIntString = EditorGUI.DelayedTextField(position, label, val.ToString()); -#else - var bigIntString = EditorGUI.TextField(position, label, val.ToString()); -#endif - if (EditorGUI.EndChangeCheck()) - { - if (!BigInteger.TryParse(bigIntString, out var newValue)) - newValue = 0; - - var encrypted = ObscuredBigInteger.Encrypt(newValue, currentCryptoKey); - SetBigInteger(hiddenValue, encrypted); - SetBigInteger(fakeValue, newValue); - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - - private static BigInteger GetBigInteger(SerializedProperty serializableBigInteger) - { - var result = new SerializableBigInteger(); - var rawProperty = serializableBigInteger.FindPropertyRelative(nameof(SerializableBigInteger.raw)); - var signProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.sign)); - var bitsProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.bits)); - var bits = ReadBitsArray(bitsProperty); - - result.raw = new SerializableBigInteger.BigIntegerContents - { - sign = signProperty.intValue, - bits = bits - }; - - return result.value; - } - - private static void SetBigInteger(SerializedProperty serializableBigInteger, BigInteger value) - { - var explicitStruct = new SerializableBigInteger - { - value = value - }; - - var sign = explicitStruct.raw.sign; - var bits = explicitStruct.raw.bits; - - var rawProperty = serializableBigInteger.FindPropertyRelative(nameof(SerializableBigInteger.raw)); - var signProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.sign)); - var bitsProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.bits)); - - signProperty.intValue = sign; - WriteBitsArray(bitsProperty, bits); - } - - private static uint[] ReadBitsArray(SerializedProperty bits) - { - var count = bits.arraySize; - if (count == 0) - return null; - var result = new uint[count]; - for (var i = 0; i < count; i++) - result[i] = (uint)bits.GetArrayElementAtIndex(i).longValue; - - return result; - } - - private static void WriteBitsArray(SerializedProperty bitsProperty, uint[] bits) - { - bitsProperty.arraySize = bits?.Length ?? 0; - for (var i = 0; i < bits?.Length; i++) - bitsProperty.GetArrayElementAtIndex(i).longValue = bits[i]; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBigIntegerDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBigIntegerDrawer.cs.meta deleted file mode 100644 index 809b2bf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBigIntegerDrawer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c48a363379404a3f8ffa0970bd1f7653 -timeCreated: 1653693062 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBoolDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBoolDrawer.cs deleted file mode 100644 index 0312bf7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBoolDrawer.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredBool))] - internal class ObscuredBoolDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty sp, GUIContent label) - { - var hiddenValue = sp.FindPropertyRelative(nameof(ObscuredBool.hiddenValue)); - var cryptoKey = sp.FindPropertyRelative(nameof(ObscuredBool.currentCryptoKey)); - var inited = sp.FindPropertyRelative(nameof(ObscuredBool.inited)); - var fakeValue = sp.FindPropertyRelative(nameof(ObscuredBool.fakeValue)); - var fakeValueActive = sp.FindPropertyRelative(nameof(ObscuredBool.fakeValueActive)); - - var currentCryptoKey = cryptoKey.intValue; - var val = false; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredBool.GenerateKey(); - inited.boolValue = true; - hiddenValue.intValue = ObscuredBool.Encrypt(false, (byte)currentCryptoKey); - } - else - { - val = ObscuredBool.Decrypt(hiddenValue.intValue, (byte)currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, sp); - - EditorGUI.BeginChangeCheck(); - val = EditorGUI.Toggle(position, label, val); - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.intValue = ObscuredBool.Encrypt(val, (byte)currentCryptoKey); - - fakeValue.boolValue = val; - fakeValueActive.boolValue = true; - } - - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBoolDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBoolDrawer.cs.meta deleted file mode 100644 index 2e7aeaa..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredBoolDrawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2a0ae33a4804dd5468c37cee3d9e4a15 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDateTimeDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDateTimeDrawer.cs deleted file mode 100644 index f75b85b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDateTimeDrawer.cs +++ /dev/null @@ -1,74 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Globalization; -using CodeStage.AntiCheat.ObscuredTypes; -using UnityEditor; -using UnityEngine; - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - [CustomPropertyDrawer(typeof(ObscuredDateTime))] - internal class ObscuredDateTimeDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredDateTime.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredDateTime.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredDateTime.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredDateTime.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredDateTime.fakeValueActive)); - - var currentCryptoKey = cryptoKey.longValue; - var val = new DateTime(0); - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.longValue = ObscuredDateTime.GenerateKey(); - hiddenValue.longValue = ObscuredDateTime.Encrypt(new DateTime(0), currentCryptoKey); - inited.boolValue = true; - } - else - { - val = ObscuredDateTime.Decrypt(hiddenValue.longValue, currentCryptoKey); - } - - var labelRect = position; - labelRect.width = position.width * 0.75f; - label = EditorGUI.BeginProperty(labelRect, label, prop); - EditorGUI.BeginChangeCheck(); - var dateString = val.ToString("o", DateTimeFormatInfo.InvariantInfo); - var input = EditorGUI.DelayedTextField(labelRect, label, dateString); - if (EditorGUI.EndChangeCheck()) - { - DateTime.TryParse(input, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out val); - hiddenValue.longValue = ObscuredDateTime.Encrypt(val, currentCryptoKey); - fakeValue.longValue = val.ToBinary(); - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - - var kindRect = position; - kindRect.x = labelRect.xMax + 5; - kindRect.width = position.width * 0.25f - 5; - label = EditorGUI.BeginProperty(kindRect, GUIContent.none, prop); - - EditorGUI.BeginChangeCheck(); - var kind = val.Kind; - var kindInput = (DateTimeKind)EditorGUI.EnumPopup(kindRect, label, kind); - if (EditorGUI.EndChangeCheck()) - { - val = DateTime.SpecifyKind(val, kindInput); - hiddenValue.longValue = ObscuredDateTime.Encrypt(val, currentCryptoKey); - fakeValue.longValue = val.ToBinary(); - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDateTimeDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDateTimeDrawer.cs.meta deleted file mode 100644 index 27af3e4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDateTimeDrawer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d4822eb673254d3fa09b8add898e8445 -timeCreated: 1684493697 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDecimalDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDecimalDrawer.cs deleted file mode 100644 index 3895533..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDecimalDrawer.cs +++ /dev/null @@ -1,143 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using Common; - using ObscuredTypes; - - using System.Globalization; - using System.Runtime.InteropServices; - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredDecimal))] - internal class ObscuredDecimalDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredDecimal.hiddenValue)); - var hiddenValue1 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b1)); - var hiddenValue2 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b2)); - var hiddenValue3 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b3)); - var hiddenValue4 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b4)); - var hiddenValue5 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b5)); - var hiddenValue6 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b6)); - var hiddenValue7 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b7)); - var hiddenValue8 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b8)); - var hiddenValue9 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b9)); - var hiddenValue10 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b10)); - var hiddenValue11 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b11)); - var hiddenValue12 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b12)); - var hiddenValue13 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b13)); - var hiddenValue14 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b14)); - var hiddenValue15 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b15)); - var hiddenValue16 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b16)); - - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredDecimal.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredDecimal.inited)); - //SerializedProperty fakeValue = prop.FindPropertyRelative("fakeValue"); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredDecimal.fakeValueActive)); - - var currentCryptoKey = cryptoKey.longValue; - var union = new DecimalBytesUnion(); - decimal val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.longValue = ObscuredDecimal.GenerateKey(); - inited.boolValue = true; - - union.d = ObscuredDecimal.Encrypt(0, currentCryptoKey); - - hiddenValue1.intValue = union.b16.b1; - hiddenValue2.intValue = union.b16.b2; - hiddenValue3.intValue = union.b16.b3; - hiddenValue4.intValue = union.b16.b4; - hiddenValue5.intValue = union.b16.b5; - hiddenValue6.intValue = union.b16.b6; - hiddenValue7.intValue = union.b16.b7; - hiddenValue8.intValue = union.b16.b8; - hiddenValue9.intValue = union.b16.b9; - hiddenValue10.intValue = union.b16.b10; - hiddenValue11.intValue = union.b16.b11; - hiddenValue12.intValue = union.b16.b12; - hiddenValue13.intValue = union.b16.b13; - hiddenValue14.intValue = union.b16.b14; - hiddenValue15.intValue = union.b16.b15; - hiddenValue16.intValue = union.b16.b16; - } - else - { - union.b16.b1 = (byte)hiddenValue1.intValue; - union.b16.b2 = (byte)hiddenValue2.intValue; - union.b16.b3 = (byte)hiddenValue3.intValue; - union.b16.b4 = (byte)hiddenValue4.intValue; - union.b16.b5 = (byte)hiddenValue5.intValue; - union.b16.b6 = (byte)hiddenValue6.intValue; - union.b16.b7 = (byte)hiddenValue7.intValue; - union.b16.b8 = (byte)hiddenValue8.intValue; - union.b16.b9 = (byte)hiddenValue9.intValue; - union.b16.b10 = (byte)hiddenValue10.intValue; - union.b16.b11 = (byte)hiddenValue11.intValue; - union.b16.b12 = (byte)hiddenValue12.intValue; - union.b16.b13 = (byte)hiddenValue13.intValue; - union.b16.b14 = (byte)hiddenValue14.intValue; - union.b16.b15 = (byte)hiddenValue15.intValue; - union.b16.b16 = (byte)hiddenValue16.intValue; - - val = ObscuredDecimal.Decrypt(union.d, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - var input = EditorGUI.DelayedTextField(position, label, val.ToString(CultureInfo.InvariantCulture)); -#else - var input = EditorGUI.TextField(position, label, val.ToString(CultureInfo.InvariantCulture)); -#endif - decimal.TryParse(input, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out val); - if (EditorGUI.EndChangeCheck()) - { - union.d = ObscuredDecimal.Encrypt(val, currentCryptoKey); - - hiddenValue1.intValue = union.b16.b1; - hiddenValue2.intValue = union.b16.b2; - hiddenValue3.intValue = union.b16.b3; - hiddenValue4.intValue = union.b16.b4; - hiddenValue5.intValue = union.b16.b5; - hiddenValue6.intValue = union.b16.b6; - hiddenValue7.intValue = union.b16.b7; - hiddenValue8.intValue = union.b16.b8; - hiddenValue9.intValue = union.b16.b9; - hiddenValue10.intValue = union.b16.b10; - hiddenValue11.intValue = union.b16.b11; - hiddenValue12.intValue = union.b16.b12; - hiddenValue13.intValue = union.b16.b13; - hiddenValue14.intValue = union.b16.b14; - hiddenValue15.intValue = union.b16.b15; - hiddenValue16.intValue = union.b16.b16; - - //fakeValue.doubleValue = 0; - fakeValueActive.boolValue = false; - } - - EditorGUI.EndProperty(); - } - - [StructLayout(LayoutKind.Explicit)] - private struct DecimalBytesUnion - { - [FieldOffset(0)] - public decimal d; - - [FieldOffset(0)] - public ACTkByte16 b16; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDecimalDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDecimalDrawer.cs.meta deleted file mode 100644 index 6f3fbe7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDecimalDrawer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b695953c62fb4e84aa3bcf20ed203871 -timeCreated: 1508363700 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDoubleDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDoubleDrawer.cs deleted file mode 100644 index c11479b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDoubleDrawer.cs +++ /dev/null @@ -1,59 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredDouble))] - internal class ObscuredDoubleDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredDouble.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredDouble.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredDouble.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredDouble.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredDouble.fakeValueActive)); - - var currentCryptoKey = cryptoKey.longValue; - - double val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.longValue = ObscuredDouble.GenerateKey(); - - inited.boolValue = true; - hiddenValue.longValue = ObscuredDouble.Encrypt(0, currentCryptoKey); - } - else - { - val = ObscuredDouble.Decrypt(hiddenValue.longValue, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - val = EditorGUI.DelayedDoubleField(position, label, val); -#else - val = EditorGUI.DoubleField(position, label, val); -#endif - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.longValue = ObscuredDouble.Encrypt(val, currentCryptoKey); - fakeValue.doubleValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDoubleDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDoubleDrawer.cs.meta deleted file mode 100644 index 82d9949..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredDoubleDrawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 5f1f384feecf6f94e9229f7d2b8ea644 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredFloatDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredFloatDrawer.cs deleted file mode 100644 index 79e776e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredFloatDrawer.cs +++ /dev/null @@ -1,59 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredFloat))] - internal class ObscuredFloatDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredFloat.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredFloat.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredFloat.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredFloat.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredFloat.fakeValueActive)); - - var currentCryptoKey = cryptoKey.intValue; - - float val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredFloat.GenerateKey(); - - inited.boolValue = true; - hiddenValue.intValue = ObscuredFloat.Encrypt(0, currentCryptoKey); - } - else - { - val = ObscuredFloat.Decrypt(hiddenValue.intValue, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - val = EditorGUI.DelayedFloatField(position, label, val); -#else - val = EditorGUI.FloatField(position, label, val); -#endif - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.intValue = ObscuredFloat.Encrypt(val, currentCryptoKey); - fakeValue.floatValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredFloatDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredFloatDrawer.cs.meta deleted file mode 100644 index 38c472d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredFloatDrawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 68a1078367903c94bb9914b21b55172d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredIntDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredIntDrawer.cs deleted file mode 100644 index cd1d71c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredIntDrawer.cs +++ /dev/null @@ -1,57 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredInt))] - internal class ObscuredIntDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredInt.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredInt.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredInt.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredInt.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredInt.fakeValueActive)); - - var currentCryptoKey = cryptoKey.intValue; - var val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredInt.GenerateKey(); - hiddenValue.intValue = ObscuredInt.Encrypt(0, currentCryptoKey); - inited.boolValue = true; - } - else - { - val = ObscuredInt.Decrypt(hiddenValue.intValue, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - val = EditorGUI.DelayedIntField(position, label, val); -#else - val = EditorGUI.IntField(position, label, val); -#endif - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.intValue = ObscuredInt.Encrypt(val, currentCryptoKey); - fakeValue.intValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredIntDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredIntDrawer.cs.meta deleted file mode 100644 index 068d4e5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredIntDrawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0d720256b4500364ba597cd9f71f28e1 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredLongDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredLongDrawer.cs deleted file mode 100644 index 1a6531c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredLongDrawer.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredLong))] - internal class ObscuredLongDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredLong.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredLong.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredLong.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredLong.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredLong.fakeValueActive)); - - var currentCryptoKey = cryptoKey.longValue; - long val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.longValue = ObscuredLong.GenerateKey(); - hiddenValue.longValue = ObscuredLong.Encrypt(0, currentCryptoKey); - inited.boolValue = true; - } - else - { - val = ObscuredLong.Decrypt(hiddenValue.longValue, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); - val = EditorGUI.LongField(position, label, val); - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.longValue = ObscuredLong.Encrypt(val, currentCryptoKey); - fakeValue.longValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredLongDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredLongDrawer.cs.meta deleted file mode 100644 index 3ae7e60..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredLongDrawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 98c9f8eb20d73134e96287318b713c39 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredQuaternionDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredQuaternionDrawer.cs deleted file mode 100644 index 31924c5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredQuaternionDrawer.cs +++ /dev/null @@ -1,90 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredQuaternion))] - internal class ObscuredQuaternionDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredQuaternion.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredQuaternion.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredQuaternion.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredQuaternion.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredQuaternion.fakeValueActive)); - - var hiddenValueX = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.x)); - var hiddenValueY = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.y)); - var hiddenValueZ = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.z)); - var hiddenValueW = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.w)); - - var currentCryptoKey = cryptoKey.intValue; - var val = Quaternion.identity; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredQuaternion.GenerateKey(); - var ev = ObscuredQuaternion.Encrypt(Quaternion.identity, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - hiddenValueZ.intValue = ev.z; - hiddenValueW.intValue = ev.w; - inited.boolValue = true; - - fakeValue.quaternionValue = Quaternion.identity; - } - else - { - var ev = new ObscuredQuaternion.RawEncryptedQuaternion - { - x = hiddenValueX.intValue, - y = hiddenValueY.intValue, - z = hiddenValueZ.intValue, - w = hiddenValueW.intValue - }; - val = ObscuredQuaternion.Decrypt(ev, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - EditorGUI.BeginChangeCheck(); - val = Vector4ToQuaternion(EditorGUI.Vector4Field(position, label, QuaternionToVector4(val))); - if (EditorGUI.EndChangeCheck()) - { - var ev = ObscuredQuaternion.Encrypt(val, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - hiddenValueZ.intValue = ev.z; - hiddenValueW.intValue = ev.w; - - fakeValue.quaternionValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - - public override float GetPropertyHeight(SerializedProperty property, GUIContent label) - { - return EditorGUIUtility.wideMode ? EditorGUIUtility.singleLineHeight : EditorGUIUtility.singleLineHeight * 2f; - } - - private Vector4 QuaternionToVector4(Quaternion value) - { - return new Vector4(value.x, value.y, value.z, value.w); - } - - private Quaternion Vector4ToQuaternion(Vector4 value) - { - return new Quaternion(value.x, value.y, value.z, value.w); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredQuaternionDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredQuaternionDrawer.cs.meta deleted file mode 100644 index 22bae23..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredQuaternionDrawer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1cd362a81eab4155a2f1585c5d7ba876 -timeCreated: 1544725257 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredShortDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredShortDrawer.cs deleted file mode 100644 index e99035b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredShortDrawer.cs +++ /dev/null @@ -1,57 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredShort))] - internal class ObscuredShortDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredShort.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredShort.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredShort.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredShort.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredShort.fakeValueActive)); - - var currentCryptoKey = (short)cryptoKey.intValue; - short val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = (short)(cryptoKey.intValue = ObscuredShort.GenerateKey()); - hiddenValue.intValue = ObscuredShort.Encrypt(0, currentCryptoKey); - inited.boolValue = true; - } - else - { - val = ObscuredShort.Decrypt((short)hiddenValue.intValue, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - val = (short)EditorGUI.DelayedIntField(position, label, val); -#else - val = (short)EditorGUI.IntField(position, label, val); -#endif - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.intValue = ObscuredShort.Encrypt(val, currentCryptoKey); - fakeValue.intValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredShortDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredShortDrawer.cs.meta deleted file mode 100644 index 827ab60..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredShortDrawer.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: eaf7a22e1b4319f40b23596cea6556a4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredStringDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredStringDrawer.cs deleted file mode 100644 index 688bad4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredStringDrawer.cs +++ /dev/null @@ -1,137 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using System; - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredString))] - internal class ObscuredStringDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty sp, GUIContent label) - { - MigrateUtils.MigrateObscuredStringIfNecessary(sp); - - var hiddenChars = sp.FindPropertyRelative(nameof(ObscuredString.hiddenChars)); - var cryptoKey = sp.FindPropertyRelative(nameof(ObscuredString.cryptoKey)); - var inited = sp.FindPropertyRelative(nameof(ObscuredString.inited)); - var fakeValue = sp.FindPropertyRelative(nameof(ObscuredString.fakeValue)); - var fakeValueActive = sp.FindPropertyRelative(nameof(ObscuredString.fakeValueActive)); - - var currentCryptoKey = GetChars(cryptoKey); - - var val = string.Empty; - - if (!inited.boolValue) - { - if (currentCryptoKey.Length == 0) - { - currentCryptoKey = ObscuredString.GenerateKey(); - SetChars(cryptoKey, currentCryptoKey); - } - inited.boolValue = true; - EncryptAndSetChars(val.ToCharArray(), hiddenChars, currentCryptoKey); - fakeValue.stringValue = val; - } - else - { - var size = hiddenChars.FindPropertyRelative("Array.size"); - var showMixed = size.hasMultipleDifferentValues; - - if (!showMixed) - { - for (var i = 0; i < hiddenChars.arraySize; i++) - { - showMixed |= hiddenChars.GetArrayElementAtIndex(i).hasMultipleDifferentValues; - if (showMixed) break; - } - } - - if (!showMixed) - val = Decrypt(hiddenChars, currentCryptoKey); - else - EditorGUI.showMixedValue = true; - } - - if (label.text.IndexOf('[') != -1) - { - var dataIndex = sp.propertyPath.IndexOf("Array.data[", StringComparison.Ordinal); - - if (dataIndex >= 0) - { - dataIndex += 11; - var index = "Element " + sp.propertyPath.Substring(dataIndex, sp.propertyPath.IndexOf("]", dataIndex, StringComparison.Ordinal) - dataIndex); - label.text = index; - } - } - - label = EditorGUI.BeginProperty(position, label, sp); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - val = EditorGUI.DelayedTextField(position, label, val); -#else - val = EditorGUI.TextField(position, label, val); -#endif - if (EditorGUI.EndChangeCheck()) - { - EncryptAndSetChars(val.ToCharArray(), hiddenChars, currentCryptoKey); - fakeValue.stringValue = val; - fakeValueActive.boolValue = true; - } - - EditorGUI.showMixedValue = false; - EditorGUI.EndProperty(); - } - - private static void EncryptAndSetChars(char[] val, SerializedProperty prop, char[] key) - { - var encrypted = ObscuredString.InternalEncryptDecrypt(val, key); - SetChars(prop, encrypted); - } - - private static string Decrypt(SerializedProperty hiddenChars, char[] currentCryptoKey) - { - var chars = new char[hiddenChars.arraySize]; - for (var i = 0; i < hiddenChars.arraySize; i++) - chars[i] = (char)hiddenChars.GetArrayElementAtIndex(i).intValue; - - return ObscuredString.Decrypt(chars, currentCryptoKey); - } - - public static byte[] GetBytesObsolete(SerializedProperty property) - { - var length = property.arraySize; - var result = new byte[length]; - for (var i = 0; i < length; i++) - result[i] = (byte)property.GetArrayElementAtIndex(i).intValue; - - return result; - } - - public static void SetChars(SerializedProperty property, char[] array) - { - property.ClearArray(); - property.arraySize = array.Length; - for (var i = 0; i < array.Length; i++) - property.GetArrayElementAtIndex(i).intValue = array[i]; - } - - private static char[] GetChars(SerializedProperty property) - { - var length = property.arraySize; - var result = new char[length]; - for (var i = 0; i < length; i++) - result[i] = (char)property.GetArrayElementAtIndex(i).intValue; - - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredStringDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredStringDrawer.cs.meta deleted file mode 100644 index ba004a1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredStringDrawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: db9197f5c028e5b4497f66a9b3217395 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredUIntDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredUIntDrawer.cs deleted file mode 100644 index 19fe011..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredUIntDrawer.cs +++ /dev/null @@ -1,57 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredUInt))] - internal class ObscuredUIntDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredUInt.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredUInt.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredUInt.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredUInt.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredUInt.fakeValueActive)); - - var currentCryptoKey = (uint)cryptoKey.intValue; - uint val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - cryptoKey.intValue = (int)(currentCryptoKey = ObscuredUInt.GenerateKey()); - hiddenValue.intValue = (int)ObscuredUInt.Encrypt(0, currentCryptoKey); - inited.boolValue = true; - } - else - { - val = ObscuredUInt.Decrypt((uint)hiddenValue.intValue, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); -#if UNITY_2022_1_OR_NEWER - val = (uint)EditorGUI.DelayedIntField(position, label, (int)val); -#else - val = (uint)EditorGUI.IntField(position, label, (int)val); -#endif - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.intValue = (int)ObscuredUInt.Encrypt(val, currentCryptoKey); - fakeValue.intValue = (int)val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredUIntDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredUIntDrawer.cs.meta deleted file mode 100644 index fe328a6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredUIntDrawer.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 914802edc5dc95349a9903ac64be6343 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredULongDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredULongDrawer.cs deleted file mode 100644 index 665c357..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredULongDrawer.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredULong))] - internal class ObscuredULongDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredULong.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredULong.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredULong.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredULong.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredULong.fakeValueActive)); - - var currentCryptoKey = (ulong)cryptoKey.longValue; - ulong val = 0; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - cryptoKey.longValue = (long)(currentCryptoKey = ObscuredULong.GenerateKey()); - hiddenValue.longValue = (long)ObscuredULong.Encrypt(0, currentCryptoKey); - inited.boolValue = true; - } - else - { - val = ObscuredULong.Decrypt((ulong)hiddenValue.longValue, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); - val = (ulong)EditorGUI.LongField(position, label, (long)val); - if (EditorGUI.EndChangeCheck()) - { - hiddenValue.longValue = (long)ObscuredULong.Encrypt(val, currentCryptoKey); - fakeValue.longValue = (long)val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredULongDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredULongDrawer.cs.meta deleted file mode 100644 index 827a868..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredULongDrawer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ae392b1c42e591945a2aa46d35119192 -timeCreated: 1484857585 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2Drawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2Drawer.cs deleted file mode 100644 index 0c8a584..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2Drawer.cs +++ /dev/null @@ -1,71 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredVector2))] - internal class ObscuredVector2Drawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredVector2.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredVector2.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredVector2.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredVector2.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredVector2.fakeValueActive)); - - var hiddenValueX = hiddenValue.FindPropertyRelative(nameof(ObscuredVector2.RawEncryptedVector2.x)); - var hiddenValueY = hiddenValue.FindPropertyRelative(nameof(ObscuredVector2.RawEncryptedVector2.y)); - - var currentCryptoKey = cryptoKey.intValue; - var val = Vector2.zero; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredVector2.GenerateKey(); - var ev = ObscuredVector2.Encrypt(Vector2.zero, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - inited.boolValue = true; - fakeValue.vector2Value = Vector2.zero; - } - else - { - var ev = new ObscuredVector2.RawEncryptedVector2 - { - x = hiddenValueX.intValue, - y = hiddenValueY.intValue - }; - val = ObscuredVector2.Decrypt(ev, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); - val = EditorGUI.Vector2Field(position, label, val); - if (EditorGUI.EndChangeCheck()) - { - var ev = ObscuredVector2.Encrypt(val, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - fakeValue.vector2Value = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - - public override float GetPropertyHeight(SerializedProperty property, GUIContent label) - { - return EditorGUIUtility.wideMode ? EditorGUIUtility.singleLineHeight : EditorGUIUtility.singleLineHeight * 2f; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2Drawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2Drawer.cs.meta deleted file mode 100644 index 8f15836..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2Drawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: bd9505d4322c45e4480aec264415f564 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2IntDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2IntDrawer.cs deleted file mode 100644 index 24b05de..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2IntDrawer.cs +++ /dev/null @@ -1,71 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredVector2Int))] - internal class ObscuredVector2IntDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredVector2Int.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredVector2Int.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredVector2Int.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredVector2Int.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredVector2Int.fakeValueActive)); - - var hiddenValueX = hiddenValue.FindPropertyRelative(nameof(ObscuredVector2Int.RawEncryptedVector2Int.x)); - var hiddenValueY = hiddenValue.FindPropertyRelative(nameof(ObscuredVector2Int.RawEncryptedVector2Int.y)); - - var currentCryptoKey = cryptoKey.intValue; - var val = Vector2Int.zero; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredVector2Int.GenerateKey(); - var ev = ObscuredVector2Int.Encrypt(Vector2Int.zero, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - inited.boolValue = true; - fakeValue.vector2IntValue = Vector2Int.zero; - } - else - { - var ev = new ObscuredVector2Int.RawEncryptedVector2Int - { - x = hiddenValueX.intValue, - y = hiddenValueY.intValue - }; - val = ObscuredVector2Int.Decrypt(ev, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); - val = EditorGUI.Vector2IntField(position, label, val); - if (EditorGUI.EndChangeCheck()) - { - var ev = ObscuredVector2Int.Encrypt(val, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - fakeValue.vector2IntValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - - public override float GetPropertyHeight(SerializedProperty property, GUIContent label) - { - return EditorGUIUtility.wideMode ? EditorGUIUtility.singleLineHeight : EditorGUIUtility.singleLineHeight * 2f; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2IntDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2IntDrawer.cs.meta deleted file mode 100644 index 2054d71..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector2IntDrawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 43349687f2537d343afec50a81e3e6a7 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3Drawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3Drawer.cs deleted file mode 100644 index bd6da5e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3Drawer.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredVector3))] - internal class ObscuredVector3Drawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredVector3.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredVector3.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredVector3.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredVector3.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredVector3.fakeValueActive)); - - var hiddenValueX = hiddenValue.FindPropertyRelative(nameof(ObscuredVector3.RawEncryptedVector3.x)); - var hiddenValueY = hiddenValue.FindPropertyRelative(nameof(ObscuredVector3.RawEncryptedVector3.y)); - var hiddenValueZ = hiddenValue.FindPropertyRelative(nameof(ObscuredVector3.RawEncryptedVector3.z)); - - var currentCryptoKey = cryptoKey.intValue; - var val = Vector3.zero; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredVector3.GenerateKey(); - var ev = ObscuredVector3.Encrypt(Vector3.zero, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - hiddenValueZ.intValue = ev.z; - inited.boolValue = true; - - fakeValue.vector3Value = Vector3.zero; - } - else - { - var ev = new ObscuredVector3.RawEncryptedVector3 - { - x = hiddenValueX.intValue, - y = hiddenValueY.intValue, - z = hiddenValueZ.intValue - }; - val = ObscuredVector3.Decrypt(ev, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); - val = EditorGUI.Vector3Field(position, label, val); - if (EditorGUI.EndChangeCheck()) - { - var ev = ObscuredVector3.Encrypt(val, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - hiddenValueZ.intValue = ev.z; - - fakeValue.vector3Value = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - - public override float GetPropertyHeight(SerializedProperty property, GUIContent label) - { - return EditorGUIUtility.wideMode ? EditorGUIUtility.singleLineHeight : EditorGUIUtility.singleLineHeight * 2f; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3Drawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3Drawer.cs.meta deleted file mode 100644 index 8bdcdf0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3Drawer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ab13e15ddf3b1d24ea07503a57d84959 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3IntDrawer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3IntDrawer.cs deleted file mode 100644 index 62d2613..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3IntDrawer.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers -{ - using ObscuredTypes; - - using UnityEditor; - using UnityEngine; - - [CustomPropertyDrawer(typeof(ObscuredVector3Int))] - internal class ObscuredVector3IntDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) - { - var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredVector3Int.hiddenValue)); - var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredVector3Int.currentCryptoKey)); - var inited = prop.FindPropertyRelative(nameof(ObscuredVector3Int.inited)); - var fakeValue = prop.FindPropertyRelative(nameof(ObscuredVector3Int.fakeValue)); - var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredVector3Int.fakeValueActive)); - - var hiddenValueX = hiddenValue.FindPropertyRelative(nameof(ObscuredVector3Int.RawEncryptedVector3Int.x)); - var hiddenValueY = hiddenValue.FindPropertyRelative(nameof(ObscuredVector3Int.RawEncryptedVector3Int.y)); - var hiddenValueZ = hiddenValue.FindPropertyRelative(nameof(ObscuredVector3Int.RawEncryptedVector3Int.z)); - - var currentCryptoKey = cryptoKey.intValue; - var val = Vector3Int.zero; - - if (!inited.boolValue) - { - if (currentCryptoKey == 0) - currentCryptoKey = cryptoKey.intValue = ObscuredVector3Int.GenerateKey(); - var ev = ObscuredVector3Int.Encrypt(Vector3Int.zero, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - hiddenValueZ.intValue = ev.z; - inited.boolValue = true; - - fakeValue.vector3IntValue = Vector3Int.zero; - } - else - { - var ev = new ObscuredVector3Int.RawEncryptedVector3Int - { - x = hiddenValueX.intValue, - y = hiddenValueY.intValue, - z = hiddenValueZ.intValue - }; - val = ObscuredVector3Int.Decrypt(ev, currentCryptoKey); - } - - label = EditorGUI.BeginProperty(position, label, prop); - - EditorGUI.BeginChangeCheck(); - val = EditorGUI.Vector3IntField(position, label, val); - if (EditorGUI.EndChangeCheck()) - { - var ev = ObscuredVector3Int.Encrypt(val, currentCryptoKey); - hiddenValueX.intValue = ev.x; - hiddenValueY.intValue = ev.y; - hiddenValueZ.intValue = ev.z; - - fakeValue.vector3IntValue = val; - fakeValueActive.boolValue = true; - } - EditorGUI.EndProperty(); - } - - public override float GetPropertyHeight(SerializedProperty property, GUIContent label) - { - return EditorGUIUtility.wideMode ? EditorGUIUtility.singleLineHeight : EditorGUIUtility.singleLineHeight * 2f; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3IntDrawer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3IntDrawer.cs.meta deleted file mode 100644 index 3c0e388..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/PropertyDrawers/ObscuredVector3IntDrawer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 457d09d2ffa45754ea88b27085364169 -timeCreated: 1508447688 -licenseType: Store -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator.meta deleted file mode 100644 index e3a9905..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 071f007b436a44fc8f2b6425b606b621 -timeCreated: 1666516531 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator/ObscuredTypesValidator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator/ObscuredTypesValidator.cs deleted file mode 100644 index 3723829..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator/ObscuredTypesValidator.cs +++ /dev/null @@ -1,87 +0,0 @@ -namespace CodeStage.AntiCheat.EditorCode -{ - using System.Linq; - using Common; - using ObscuredTypes; - using UnityEditor; - using UnityEngine; - - public delegate void InvalidPropertyFound(Object target, SerializedProperty sp, string location, string type); - - public static class ObscuredTypesValidator - { - private static InvalidPropertyFound lastPassedCallback; - - /// - /// Traverses all prefabs and scriptable objects in the project and checks if they contain any Obscured types with anomalies. - /// - /// Pass callback if you wish to process invalid objects. - public static void ValidateProjectAssets(InvalidPropertyFound callback = null) - { - if (!EditorUtility.DisplayDialog("ACTk Obscured types validation", - "Are you sure you wish to scan all assets (except scenes) in your project and validate all found obscured types?\n" + - "This can take some time to complete.", - "Yes", "No")) - { - Debug.Log(ACTk.LogPrefix + "Obscured types validation was canceled by user."); - return; - } - - var types = TypeCache.GetTypesDerivedFrom().Where(t => !t.IsAbstract && !t.IsInterface) - .Select(type => type.Name).ToArray(); - lastPassedCallback = callback; - EditorTools.TraverseSerializedScriptsAssets(ValidateProperty, types); - lastPassedCallback = null; - } - - /// - /// Traverse all currently opened scenes and checks if they contain any Components with non-valid Obscured types. - /// - /// Pass callback if you wish to process invalid objects. - public static void ValidateOpenedScenes(InvalidPropertyFound callback = null) - { - if (!EditorUtility.DisplayDialog("ACTk Obscured types validation", - "Are you sure you wish to scan all opened Scenes and validate all found obscured types?\n" + - "This can take some time to complete.", - "Yes", "No")) - { - Debug.Log(ACTk.LogPrefix + "Obscured types validation was canceled by user."); - return; - } - - var types = TypeCache.GetTypesDerivedFrom().Where(t => !t.IsAbstract && !t.IsInterface) - .Select(type => type.Name).ToArray(); - lastPassedCallback = callback; - EditorTools.TraverseSerializedScriptsInScenes(ValidateProperty, types); - lastPassedCallback = null; - } - - private static bool ValidateProperty(Object target, SerializedProperty sp, string location, string type) - { - var obscured = sp.GetValue(); - if (obscured is ObscuredBigInteger obi && !obi.IsDataValid || - obscured is ObscuredBool ob && !ob.IsDataValid || - obscured is ObscuredDecimal ode && !ode.IsDataValid || - obscured is ObscuredDouble od && !od.IsDataValid || - obscured is ObscuredFloat of && !of.IsDataValid || - obscured is ObscuredInt oi && !oi.IsDataValid || - obscured is ObscuredLong ol && !ol.IsDataValid || - obscured is ObscuredQuaternion oq && !oq.IsDataValid || - obscured is ObscuredShort os && !os.IsDataValid || - obscured is ObscuredString ost && !ost.IsDataValid || - obscured is ObscuredUInt oui && !oui.IsDataValid || - obscured is ObscuredULong oul && !oul.IsDataValid || - obscured is ObscuredVector2 ov2 && !ov2.IsDataValid || - obscured is ObscuredVector2Int ov2Int && !ov2Int.IsDataValid || - obscured is ObscuredVector3 ov3 && !ov3.IsDataValid || - obscured is ObscuredVector3Int ov3Int && !ov3Int.IsDataValid) - { - lastPassedCallback?.Invoke(target, sp, location, type); - target = EditorTools.GetPingableObject(target); - Debug.LogError($"{ACTk.LogPrefix}Obscured Types Validator found invalid Property [{sp.displayName}] of type [{type}] at:\n{location}", target); - } - - return false; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator/ObscuredTypesValidator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator/ObscuredTypesValidator.cs.meta deleted file mode 100644 index 7b6087f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/ObscuredTypes/Validator/ObscuredTypesValidator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7ec1712370d34ee1b38697a83d773c14 -timeCreated: 1666516545 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor.meta deleted file mode 100644 index 6c3fbac..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d318c64b7444f8543b210f1d70344386 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.UI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.UI.cs deleted file mode 100644 index 4b49c6f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.UI.cs +++ /dev/null @@ -1,447 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Collections.Generic; - using Common; - using Storage; - using UnityEditor; - using UnityEngine; - - internal partial class ACTkPrefsEditor - { - // ------------------------------------------------------------------- - // UI - // ------------------------------------------------------------------- - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Prefs Editor as Tab...", false, 500)] - internal static void ShowWindow() - { - var myself = GetWindow(false, "Prefs Editor", true); - myself.minSize = new Vector2(500, 300); - myself.RefreshData(); - } - - [MenuItem(ACTkEditorConstants.ToolsMenuPath + "Prefs Editor as Utility...", false, 501)] - internal static void ShowWindowUtility() - { - var myself = GetWindow(true, "Prefs Editor", true); - myself.minSize = new Vector2(500, 300); - myself.RefreshData(); - } - - public void AddItemsToMenu(GenericMenu menu) - { - menu.AddItem(new GUIContent("Copy Player Prefs path"), false, OnCopyPrefsPath); - menu.AddSeparator(""); - } - - private void DrawGUI() - { - if (allRecords == null) allRecords = new List(); - if (filteredRecords == null) filteredRecords = new List(); - - DrawToolbar(); - - if (addingNewRecord) - { - DrawAddNewRecordPanel(); - } - - using (GUITools.Vertical(GUITools.PanelWithBackground)) - { - GUILayout.Space(5); - - DrawRecordsPages(); - - GUILayout.Space(5); - - DrawFooterButtons(); - } - } - - private void DrawToolbar() - { - using (GUITools.Horizontal(GUITools.Toolbar)) - { - if (GUILayout.Button(new GUIContent("+", "Create new prefs record."), EditorStyles.toolbarButton, GUILayout.Width(20))) - { - addingNewRecord = true; - } - - if (GUILayout.Button(new GUIContent("Refresh", "Re-read and re-parse all prefs."), EditorStyles.toolbarButton, GUILayout.Width(55))) - { - RefreshData(); - GUIUtility.keyboardControl = 0; - scrollPosition = Vector2.zero; - recordsCurrentPage = 0; - } - - EditorGUI.BeginChangeCheck(); - sortingType = (SortingType)EditorGUILayout.EnumPopup(sortingType, EditorStyles.toolbarDropDown, GUILayout.Width(110)); - if (EditorGUI.EndChangeCheck()) - { - ApplySorting(); - } - - GUILayout.Space(10); - - EditorGUI.BeginChangeCheck(); - searchPattern = GUITools.SearchToolbar(searchPattern); - if (EditorGUI.EndChangeCheck()) - { - ApplyFiltering(); - } - } - } - - private void DrawAddNewRecordPanel() - { - using (GUITools.Horizontal(GUITools.PanelWithBackground)) - { - string[] types = {"String", "Int", "Float"}; - newRecordType = EditorGUILayout.Popup(newRecordType, types, GUILayout.Width(55)); - - newRecordEncrypted = GUILayout.Toggle(newRecordEncrypted, - new GUIContent("E", "Create new pref as encrypted ObscuredPref?"), GUITools.CompactButton, - GUILayout.Width(25)); - - var guiColor = GUI.color; - if (newRecordEncrypted) - { - GUI.color = obscuredColor; - } - - GUILayout.Label("Key:", GUILayout.ExpandWidth(false)); - newRecordKey = EditorGUILayout.TextField(newRecordKey); - GUILayout.Label("Value:", GUILayout.ExpandWidth(false)); - - if (newRecordType == 0) - { - newRecordStringValue = EditorGUILayout.TextField(newRecordStringValue); - } - else if (newRecordType == 1) - { - newRecordIntValue = EditorGUILayout.IntField(newRecordIntValue); - } - else - { - newRecordFloatValue = EditorGUILayout.FloatField(newRecordFloatValue); - } - - GUI.color = guiColor; - - if (GUILayout.Button("OK", GUITools.CompactButton, GUILayout.Width(30))) - { - AddNewRecord(); - } - - if (GUILayout.Button("Cancel", GUITools.CompactButton, GUILayout.Width(60))) - { - CloseNewRecordPanel(); - } - } - } - - private void CloseNewRecordPanel() - { - addingNewRecord = false; - newRecordKey = string.Empty; - newRecordStringValue = string.Empty; - newRecordIntValue = 0; - newRecordFloatValue = 0; - GUIUtility.keyboardControl = 0; - } - - private void DrawFooterButtons() - { - GUI.enabled = filteredRecords.Count > 0; - using (GUITools.Horizontal()) - { - if (GUILayout.Button("Encrypt ALL", GUITools.CompactButton)) - { - PerformEncryptAll(); - } - - if (GUILayout.Button("Decrypt ALL", GUITools.CompactButton)) - { - PerformDecryptAll(); - } - - if (GUILayout.Button("Save ALL", GUITools.CompactButton)) - { - PerformSaveAll(); - } - - if (GUILayout.Button("Delete ALL", GUITools.CompactButton)) - { - PerformDeleteAll(); - } - } - GUI.enabled = true; - } - - private void DrawRecordsPages() - { - recordsTotalPages = Math.Max(1,(int)Math.Ceiling((double)filteredRecords.Count / RecordsPerPage)); - - if (recordsCurrentPage < 0) recordsCurrentPage = 0; - if (recordsCurrentPage + 1 > recordsTotalPages) recordsCurrentPage = recordsTotalPages - 1; - - var fromRecord = recordsCurrentPage * RecordsPerPage; - var toRecord = fromRecord + Math.Min(RecordsPerPage, filteredRecords.Count - fromRecord); - - if (recordsTotalPages > 1) - { - GUILayout.Label("Prefs " + fromRecord + " - " + toRecord + " from " + filteredRecords.Count); - } - - scrollPosition = GUILayout.BeginScrollView(scrollPosition); - for (var i = fromRecord; i < toRecord; i++) - { - DrawRecord(i, out var recordRemoved); - if (recordRemoved) - { - break; - } - } - GUILayout.EndScrollView(); - - if (recordsTotalPages <= 1) return; - - GUILayout.Space(5); - using (GUITools.Horizontal()) - { - GUILayout.FlexibleSpace(); - - GUI.enabled = recordsCurrentPage > 0; - if (GUILayout.Button("<<", GUILayout.Width(50))) - { - RemoveNotification(); - recordsCurrentPage = 0; - scrollPosition = Vector2.zero; - } - if (GUILayout.Button("<", GUILayout.Width(50))) - { - RemoveNotification(); - recordsCurrentPage--; - scrollPosition = Vector2.zero; - } - GUI.enabled = true; - GUILayout.Label(recordsCurrentPage + 1 + " of " + recordsTotalPages, GUITools.CenteredLabel, GUILayout.Width(100)); - GUI.enabled = recordsCurrentPage < recordsTotalPages - 1; - if (GUILayout.Button(">", GUILayout.Width(50))) - { - RemoveNotification(); - recordsCurrentPage++; - scrollPosition = Vector2.zero; - } - if (GUILayout.Button(">>", GUILayout.Width(50))) - { - RemoveNotification(); - recordsCurrentPage = recordsTotalPages - 1; - scrollPosition = Vector2.zero; - } - GUI.enabled = true; - - GUILayout.FlexibleSpace(); - } - } - - private void DrawRecord(int recordIndex, out bool recordRemoved) - { - recordRemoved = false; - var record = filteredRecords[recordIndex]; - var guiColor = GUI.color; - - using (GUITools.Horizontal()) - { - if (GUILayout.Button(new GUIContent("X", "Delete this pref."), GUITools.CompactButton, GUILayout.Width(20))) - { - DeleteRecord(); - recordRemoved = true; - return; - } - - GUI.enabled = (record.dirtyValue || record.dirtyKey) && record.prefType != PrefsRecord.PrefsType.Unknown; - if (GUILayout.Button(new GUIContent("S", "Save changes in this pref."), GUITools.CompactButton, GUILayout.Width(20))) - { - record.Save(); - GUIUtility.keyboardControl = 0; - } - - DrawEncryptDecryptButtons(); - - if (GUILayout.Button(new GUIContent("...", "Other operations"), GUITools.CompactButton, GUILayout.Width(25))) - ShowOtherMenu(record); - - if (record.Obscured) - GUI.color = obscuredColor; - - GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown; - - DrawKey(); - DrawValue(); - - GUI.color = guiColor; - GUI.enabled = true; - - EditorGUILayout.LabelField(record.DisplayType, GUILayout.Width(70)); - } - - void DeleteRecord() - { - record.Delete(); - allRecords.Remove(record); - filteredRecords.Remove(record); - } - - void DrawEncryptDecryptButtons() - { - GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown; - if (record.Obscured) - { - GUI.enabled &= record.obscuredType == StorageDataType.String || - record.obscuredType == StorageDataType.Int32 || - record.obscuredType == StorageDataType.Single; - if (GUILayout.Button(new GUIContent("D", "Decrypt this pref using ObscuredPrefs"), GUITools.CompactButton, GUILayout.Width(25))) - { - record.Decrypt(); - GUIUtility.keyboardControl = 0; - } - } - else - { - if (GUILayout.Button(new GUIContent("E", "Encrypt this pref using ObscuredPrefs"), GUITools.CompactButton, GUILayout.Width(25))) - { - record.Encrypt(); - GUIUtility.keyboardControl = 0; - } - } - GUI.enabled = true; - } - - void DrawKey() - { - if (record.Obscured && !(record.obscuredType == StorageDataType.String || - record.obscuredType == StorageDataType.Int32 || - record.obscuredType == StorageDataType.Single)) - { - GUI.enabled = false; - EditorGUILayout.TextField(record.Key, GUILayout.MaxWidth(200), GUILayout.MinWidth(50)); - GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown; - } - else - { - record.Key = EditorGUILayout.TextField(record.Key, GUILayout.MaxWidth(200), GUILayout.MinWidth(50)); - } - } - - void DrawValue() - { - if (record.prefType == PrefsRecord.PrefsType.String && !record.Obscured || record.Obscured && record.obscuredType == StorageDataType.String) - { - // to avoid TextMeshGenerator error because of too much characters - if (record.StringValue.Length > 16382) - { - GUI.enabled = false; - EditorGUILayout.TextField(StringTooLong, GUILayout.MinWidth(150)); - GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown; - } - else - { - record.StringValue = EditorGUILayout.TextField(record.StringValue, GUILayout.MinWidth(150)); - } - } - else if (record.prefType == PrefsRecord.PrefsType.Int || (record.Obscured && record.obscuredType == StorageDataType.Int32)) - { - record.IntValue = EditorGUILayout.IntField(record.IntValue, GUILayout.MinWidth(150)); - } - else if (record.prefType == PrefsRecord.PrefsType.Float || (record.Obscured && record.obscuredType == StorageDataType.Single)) - { - record.FloatValue = EditorGUILayout.FloatField(record.FloatValue, GUILayout.MinWidth(150)); - } - else if (record.Obscured) - { - GUI.enabled = false; - EditorGUILayout.TextField(UnsupportedValueDescription, GUILayout.MinWidth(150)); - GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown; - } - else - { - GUI.enabled = false; - EditorGUILayout.TextField(UnknownValueDescription, GUILayout.MinWidth(150)); - GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown; - } - } - } - - private static void ShowOtherMenu(PrefsRecord record) - { - var menu = new GenericMenu(); - menu.AddItem(new GUIContent("Copy to clipboard"), false, () => - { - EditorGUIUtility.systemCopyBuffer = record.ToString(); - }); - - if (record.Obscured) - { - menu.AddItem(new GUIContent("Copy obscured raw data to clipboard"), false, () => - { - EditorGUIUtility.systemCopyBuffer = record.ToString(true); - }); - } - - var valueToPaste = EditorGUIUtility.systemCopyBuffer; - switch (record.prefType) - { - case PrefsRecord.PrefsType.Unknown: - break; - case PrefsRecord.PrefsType.String: - if (!record.Obscured || record.IsEditableObscuredValue()) - { - menu.AddItem(new GUIContent("Paste string value from clipboard"), false, () => - { - record.StringValue = valueToPaste; - }); - } - break; - case PrefsRecord.PrefsType.Int: - menu.AddItem(new GUIContent("Paste int value from clipboard"), false, () => - { - if (int.TryParse(valueToPaste, out var pastedInt)) - { - record.IntValue = pastedInt; - } - else - { - Debug.LogWarning(ACTk.LogPrefix + "Can't paste this value to Int pref:\n" + valueToPaste); - } - }); - break; - case PrefsRecord.PrefsType.Float: - menu.AddItem(new GUIContent("Paste float value from clipboard"), false, () => - { - if (float.TryParse(valueToPaste, out var pastedFloat)) - { - record.FloatValue = pastedFloat; - } - else - { - Debug.LogWarning(ACTk.LogPrefix + "Can't paste this value to Float pref:\n" + valueToPaste); - } - }); - break; - default: - throw new ArgumentOutOfRangeException(); - } - - menu.ShowAsContext(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.UI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.UI.cs.meta deleted file mode 100644 index 73ee8ec..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.UI.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bb4576e186e147a4875e8c81476e9040 -timeCreated: 1621638706 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.cs deleted file mode 100644 index 1867112..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.cs +++ /dev/null @@ -1,398 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using Common; - using Storage; - - using System; - using System.Collections.Generic; - using UnityEditor; - using UnityEditor.Callbacks; - using UnityEngine; -#if UNITY_EDITOR_WIN - using Microsoft.Win32; -#elif UNITY_EDITOR_OSX - using System.IO; -#else // LINUX - using System.IO; - using System.Xml; -#endif - - internal partial class ACTkPrefsEditor : EditorWindow, IHasCustomMenu - { - internal const string UnknownValueDescription = "Value corrupted / wrong Unity version"; - internal const string UnsupportedValueDescription = "Not editable value"; - - private const int RecordsPerPage = 50; - private const string StringTooLong = "String is too long"; - - internal static ACTkPrefsEditor instance; - - // 180, 255, 180, 255 - // note the 2 alpha - it's to make disabled components look as usual - private readonly Color obscuredColor = new Color(0.706f, 1f, 0.706f, 2f); - - [SerializeField] - private SortingType sortingType = SortingType.KeyAscending; - - [SerializeField] - private string searchPattern; - - [SerializeField] - private List allRecords; - - [SerializeField] - private List filteredRecords; - - [SerializeField] - private Vector2 scrollPosition; - - [SerializeField] - private int recordsCurrentPage; - - [SerializeField] - private int recordsTotalPages; - - [SerializeField] - private bool addingNewRecord; - - [SerializeField] - private int newRecordType; - - [SerializeField] - private bool newRecordEncrypted; - - [SerializeField] - private string newRecordKey; - - [SerializeField] - private string newRecordStringValue; - - [SerializeField] - private int newRecordIntValue; - - [SerializeField] - private float newRecordFloatValue; - - [DidReloadScripts] - private static void OnRecompile() - { - if (instance) instance.Repaint(); - } - - private void OnEnable() - { - instance = this; - RefreshData(); - } - - private void OnGUI() - { - DrawGUI(); - } - - private void AddNewRecord() - { - if (string.IsNullOrEmpty(newRecordKey) || - newRecordType == 0 && string.IsNullOrEmpty(newRecordStringValue) || - newRecordType == 1 && newRecordIntValue == 0 || - newRecordType == 2 && Math.Abs(newRecordFloatValue) < 0.00000001f) - { - ShowNotification(new GUIContent("Please fill in the pref first!")); - } - else - { - PrefsRecord newRecord; - - switch (newRecordType) - { - case 0: - newRecord = new PrefsRecord(newRecordKey, newRecordStringValue, newRecordEncrypted); - break; - case 1: - newRecord = new PrefsRecord(newRecordKey, newRecordIntValue, newRecordEncrypted); - break; - default: - newRecord = new PrefsRecord(newRecordKey, newRecordFloatValue, newRecordEncrypted); - break; - } - - if (newRecord.Save()) - { - allRecords.Add(newRecord); - ApplySorting(); - CloseNewRecordPanel(); - } - } - } - - private void PerformEncryptAll() - { - if (EditorUtility.DisplayDialog("Obscure ALL prefs in list?", "This will apply obscuration to ALL unobscured prefs in the list.\nAre you sure you wish to do this?", "Yep", "Oh, no!")) - { - foreach (var record in filteredRecords) - { - record.Encrypt(); - } - GUIUtility.keyboardControl = 0; - ApplySorting(); - } - } - - private void PerformDecryptAll() - { - if (EditorUtility.DisplayDialog("UnObscure ALL prefs in list?", "This will remove obscuration from ALL obscured prefs in the list if possible.\nAre you sure you wish to do this?", "Yep", "Oh, no!")) - { - foreach (var record in filteredRecords) - { - record.Decrypt(); - } - GUIUtility.keyboardControl = 0; - ApplySorting(); - } - } - - private void PerformSaveAll() - { - if (EditorUtility.DisplayDialog("Save changes to ALL prefs in list?", "Are you sure you wish to save changes to ALL prefs in the list? This can't be undone!", "Yep", "Oh, no!")) - { - foreach (var record in filteredRecords) - { - record.Save(); - } - GUIUtility.keyboardControl = 0; - ApplySorting(); - } - } - - private void PerformDeleteAll() - { - if (EditorUtility.DisplayDialog("Delete ALL prefs in list?", "Are you sure you wish to delete the ALL prefs in the list? This can't be undone!", "Yep", "Oh, no!")) - { - foreach (var record in filteredRecords) - { - record.Delete(); - } - - RefreshData(); - GUIUtility.keyboardControl = 0; - } - } - - private void RefreshData() - { - var keys = new List(); -#if UNITY_EDITOR_WIN - keys.AddRange(ReadKeysWin()); -#elif UNITY_EDITOR_OSX - keys.AddRange(ReadKeysOSX()); -#else // LINUX - keys.AddRange(ReadKeysLinux()); -#endif - keys.RemoveAll(IgnoredPrefsKeys); - - if (allRecords == null) allRecords = new List(); - if (filteredRecords == null) filteredRecords = new List(); - - allRecords.Clear(); - filteredRecords.Clear(); - - var keysCount = keys.Count; - var showProgress = keysCount >= 500; - - for (var i = 0; i < keysCount; i++) - { - var keyName = keys[i]; - if (showProgress) - { - if (EditorUtility.DisplayCancelableProgressBar("Reading PlayerPrefs [" + (i + 1) + " of " + keysCount + "]", "Reading " + keyName, (float)i/keysCount)) - { - break; - } - } - allRecords.Add(new PrefsRecord(keyName)); - } - - if (showProgress) EditorUtility.ClearProgressBar(); - - ApplySorting(); - } - - private void ApplyFiltering() - { - filteredRecords.Clear(); - if (string.IsNullOrEmpty(searchPattern)) - { - filteredRecords.AddRange(allRecords); - } - else - { - foreach (var record in allRecords) - { - if (record.Key.ToLowerInvariant().Contains(searchPattern.Trim().ToLowerInvariant())) - { - filteredRecords.Add(record); - } - } - } - } - - private void ApplySorting() - { - switch (sortingType) - { - case SortingType.KeyAscending: - allRecords.Sort(PrefsRecord.SortByNameAscending); - break; - case SortingType.KeyDescending: - allRecords.Sort(PrefsRecord.SortByNameDescending); - break; - case SortingType.Type: - allRecords.Sort(PrefsRecord.SortByType); - break; - case SortingType.Obscurance: - allRecords.Sort(PrefsRecord.SortByObscurance); - break; - default: - throw new ArgumentOutOfRangeException(); - } - - ApplyFiltering(); - } - - private bool IgnoredPrefsKeys(string key) - { - return key == ObscuredPrefs.PrefsKey || - key == "OwsfBQ8qISsHHho6ACAJAiAAKRI2GjIDFh4EIQ0o" || - key == "UnityGraphicsQuality" || - key == "UnitySelectMonitor" || - key == "Screenmanager Resolution Width" || - key == "Screenmanager Resolution Height" || - key == "Screenmanager Is Fullscreen mode" || - key == "unity.cloud_userid" || - key == "unity.player_session_background_time" || - key == "unity.player_session_elapsed_time" || - key == "unity.player_sessionid" || - key == "unity.player_session_count" || - key == "UnityUdpSdkImported" || - key.StartsWith("PackageUpdaterLastChecked"); - } - - private void OnCopyPrefsPath() - { - EditorGUIUtility.systemCopyBuffer = GetPrefsPath(); - instance.ShowNotification(new GUIContent("Player Prefs path copied to clipboard")); - } - - private string GetPrefsPath() - { -#if UNITY_EDITOR_WIN - return "Software\\Unity\\UnityEditor\\" + PlayerSettings.companyName + "\\" + PlayerSettings.productName; -#elif UNITY_EDITOR_OSX - return Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/Library/Preferences/unity." + - PlayerSettings.companyName + "." + PlayerSettings.productName + ".plist"; -#else // LINUX! - return Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/.config/unity3d/" + - PlayerSettings.companyName + "/" + PlayerSettings.productName + "/prefs"; -#endif - } - -#if UNITY_EDITOR_WIN - private string[] ReadKeysWin() - { - var prefsPath = GetPrefsPath(); - var registryLocation = Registry.CurrentUser.CreateSubKey(prefsPath); - if (registryLocation == null) - { - Debug.LogWarning($"{ACTk.LogPrefix}Couldn't locate / access Player Prefs at path {prefsPath}. " + - $"This message is harmless unless you already saved anything to the {nameof(PlayerPrefs)} or {nameof(ObscuredPrefs)}.\n" + - $"In such case, please report this problem to {ACTk.SupportContact} and include these data:\n" + - $"{ACTk.GenerateBugReport()}"); - return new string[0]; - } - - var names = registryLocation.GetValueNames(); - var result = new string[names.Length]; - - for (var i = 0; i < names.Length; i++) - { - var key = names[i]; - - if (key.IndexOf('_') > 0) - { - result[i] = key.Substring(0, key.LastIndexOf('_')); - } - else - { - result[i] = key; - } - } - - return result; - } - -#elif UNITY_EDITOR_OSX - - private string[] ReadKeysOSX() - { - var plistPath = GetPrefsPath(); - if (!File.Exists (plistPath)) - { - Debug.LogWarning($"{ACTk.LogPrefix}Couldn't locate / access Player Prefs at path {plistPath}. " + - $"This message is harmless unless you already saved anything to the {nameof(PlayerPrefs)} or {nameof(ObscuredPrefs)}.\n" + - $"In such case, please report this problem to {ACTk.SupportContact} and include these data:\n" + - $"{ACTk.GenerateBugReport()}"); - return new string[0]; - } - - var parsedPlist = (Dictionary)Plist.readPlist(plistPath); - - var keys = new string[parsedPlist.Keys.Count]; - parsedPlist.Keys.CopyTo (keys, 0); - - return keys; - } - -#else // LINUX! - - private string[] ReadKeysLinux() - { - var prefsPath = GetPrefsPath(); - if (!File.Exists(prefsPath)) - { - Debug.LogWarning($"{ACTk.LogPrefix}Couldn't locate / access Player Prefs at path {prefsPath}. " + - $"This message is harmless unless you already saved anything to the {nameof(PlayerPrefs)} or {nameof(ObscuredPrefs)}.\n" + - $"In such case, please report this problem to {ACTk.SupportContact} and include these data:\n" + - $"{ACTk.GenerateBugReport()}"); - return new string[0]; - } - - var prefsXML = new XmlDocument(); - prefsXML.Load(prefsPath); - var prefsList = prefsXML.SelectNodes("/unity_prefs/pref"); - - var keys = new string[prefsList.Count]; - - for (var i = 0; i < keys.Length; i++) - { - keys[i] = prefsList[i].Attributes["name"].Value; - } - - return keys; - } - -#endif - private enum SortingType : byte - { - KeyAscending = 0, - KeyDescending = 2, - Type = 5, - Obscurance = 10 - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.cs.meta deleted file mode 100644 index 206db1a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/ACTkPrefsEditor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 996c620e94c266d47beedf3539748d9f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/Plist.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/Plist.cs deleted file mode 100644 index e695850..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/Plist.cs +++ /dev/null @@ -1,960 +0,0 @@ -// -// PlistCS Property List (plist) serialization and parsing library. -// -// https://github.com/animetrics/PlistCS -// -// Copyright (c) 2011 Animetrics Inc. (marc@animetrics.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Collections; - using System.Collections.Generic; - using System.IO; - using System.Text; - using System.Xml; - - internal static class Plist - { - private static List offsetTable = new List(); - private static List objectTable = new List(); - private static int refCount; - private static int objRefSize; - private static int offsetByteSize; - private static long offsetTableOffset; - - #region Public Functions - - public static object readPlist(string path) - { - using (FileStream f = new FileStream(path, FileMode.Open, FileAccess.Read)) - { - return readPlist(f, plistType.Auto); - } - } - - public static object readPlistSource(string source) - { - return readPlist(Encoding.UTF8.GetBytes(source)); - } - - public static object readPlist(byte[] data) - { - return readPlist(new MemoryStream(data), plistType.Auto); - } - - public static plistType getPlistType(Stream stream) - { - byte[] magicHeader = new byte[8]; - stream.Read(magicHeader, 0, 8); - - if (BitConverter.ToInt64(magicHeader, 0) == 3472403351741427810) - { - return plistType.Binary; - } - else - { - return plistType.Xml; - } - } - - public static object readPlist(Stream stream, plistType type) - { - if (type == plistType.Auto) - { - type = getPlistType(stream); - stream.Seek(0, SeekOrigin.Begin); - } - - if (type == plistType.Binary) - { - using (BinaryReader reader = new BinaryReader(stream)) - { - byte[] data = reader.ReadBytes((int) reader.BaseStream.Length); - return readBinary(data); - } - } - else - { - XmlDocument xml = new XmlDocument(); - xml.XmlResolver = null; - xml.Load(stream); - return readXml(xml); - } - } - - public static void writeXml(object value, string path) - { - using (StreamWriter writer = new StreamWriter(path)) - { - writer.Write(writeXml(value)); - } - } - - public static void writeXml(object value, Stream stream) - { - using (StreamWriter writer = new StreamWriter(stream)) - { - writer.Write(writeXml(value)); - } - } - - public static string writeXml(object value) - { - using (MemoryStream ms = new MemoryStream()) - { - XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); - xmlWriterSettings.Encoding = new UTF8Encoding(false); - xmlWriterSettings.ConformanceLevel = ConformanceLevel.Document; - xmlWriterSettings.Indent = true; - - using (XmlWriter xmlWriter = XmlWriter.Create(ms, xmlWriterSettings)) - { - xmlWriter.WriteStartDocument(); - //xmlWriter.WriteComment("DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" " + "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\""); - xmlWriter.WriteDocType("plist", "-//Apple Computer//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd", null); - xmlWriter.WriteStartElement("plist"); - xmlWriter.WriteAttributeString("version", "1.0"); - compose(value, xmlWriter); - xmlWriter.WriteEndElement(); - xmlWriter.WriteEndDocument(); - xmlWriter.Flush(); - xmlWriter.Close(); - return System.Text.Encoding.UTF8.GetString(ms.ToArray()); - } - } - } - - public static void writeBinary(object value, string path) - { - using (BinaryWriter writer = new BinaryWriter(new FileStream(path, FileMode.Create))) - { - writer.Write(writeBinary(value)); - } - } - - public static void writeBinary(object value, Stream stream) - { - using (BinaryWriter writer = new BinaryWriter(stream)) - { - writer.Write(writeBinary(value)); - } - } - - public static byte[] writeBinary(object value) - { - offsetTable.Clear(); - objectTable.Clear(); - refCount = 0; - objRefSize = 0; - offsetByteSize = 0; - offsetTableOffset = 0; - - //Do not count the root node, subtract by 1 - int totalRefs = countObject(value) - 1; - - refCount = totalRefs; - - objRefSize = RegulateNullBytes(BitConverter.GetBytes(refCount)).Length; - - composeBinary(value); - - writeBinaryString("bplist00", false); - - offsetTableOffset = (long)objectTable.Count; - - offsetTable.Add(objectTable.Count - 8); - - offsetByteSize = RegulateNullBytes(BitConverter.GetBytes(offsetTable[offsetTable.Count-1])).Length; - - List offsetBytes = new List(); - - offsetTable.Reverse(); - - for (int i = 0; i < offsetTable.Count; i++) - { - offsetTable[i] = objectTable.Count - offsetTable[i]; - byte[] buffer = RegulateNullBytes(BitConverter.GetBytes(offsetTable[i]), offsetByteSize); - Array.Reverse(buffer); - offsetBytes.AddRange(buffer); - } - - objectTable.AddRange(offsetBytes); - - objectTable.AddRange(new byte[6]); - objectTable.Add(Convert.ToByte(offsetByteSize)); - objectTable.Add(Convert.ToByte(objRefSize)); - - var a = BitConverter.GetBytes((long) totalRefs + 1); - Array.Reverse(a); - objectTable.AddRange(a); - - objectTable.AddRange(BitConverter.GetBytes((long)0)); - a = BitConverter.GetBytes(offsetTableOffset); - Array.Reverse(a); - objectTable.AddRange(a); - - return objectTable.ToArray(); - } - - #endregion - - #region Private Functions - - private static object readXml(XmlDocument xml) - { - XmlNode rootNode = xml.DocumentElement.ChildNodes[0]; - return parse(rootNode); - } - - private static object readBinary(byte[] data) - { - offsetTable.Clear(); - List offsetTableBytes = new List(); - objectTable.Clear(); - refCount = 0; - objRefSize = 0; - offsetByteSize = 0; - offsetTableOffset = 0; - - List bList = new List(data); - - List trailer = bList.GetRange(bList.Count - 32, 32); - - parseTrailer(trailer); - - objectTable = bList.GetRange(0, (int)offsetTableOffset); - - offsetTableBytes = bList.GetRange((int)offsetTableOffset, bList.Count - (int)offsetTableOffset - 32); - - parseOffsetTable(offsetTableBytes); - - return parseBinary(0); - } - - private static Dictionary parseDictionary(XmlNode node) - { - XmlNodeList children = node.ChildNodes; - if (children.Count % 2 != 0) - { - throw new DataMisalignedException("Dictionary elements must have an even number of child nodes"); - } - - Dictionary dict = new Dictionary(); - - for (int i = 0; i < children.Count; i += 2) - { - XmlNode keynode = children[i]; - XmlNode valnode = children[i + 1]; - - if (keynode.Name != "key") - { - throw new ApplicationException("expected a key node"); - } - - object result = parse(valnode); - - if (result != null) - { - dict.Add(keynode.InnerText, result); - } - } - - return dict; - } - - private static List parseArray(XmlNode node) - { - List array = new List(); - - foreach (XmlNode child in node.ChildNodes) - { - object result = parse(child); - if (result != null) - { - array.Add(result); - } - } - - return array; - } - - private static void composeArray(List value, XmlWriter writer) - { - writer.WriteStartElement("array"); - foreach (object obj in value) - { - compose(obj, writer); - } - writer.WriteEndElement(); - } - - private static object parse(XmlNode node) - { - switch (node.Name) - { - case "dict": - return parseDictionary(node); - case "array": - return parseArray(node); - case "string": - return node.InnerText; - case "integer": - // int result; - //int.TryParse(node.InnerText, System.Globalization.NumberFormatInfo.InvariantInfo, out result); - return Convert.ToInt32(node.InnerText, System.Globalization.NumberFormatInfo.InvariantInfo); - case "real": - return Convert.ToDouble(node.InnerText,System.Globalization.NumberFormatInfo.InvariantInfo); - case "false": - return false; - case "true": - return true; - case "null": - return null; - case "date": - return XmlConvert.ToDateTime(node.InnerText, XmlDateTimeSerializationMode.Utc); - case "data": - return Convert.FromBase64String(node.InnerText); - } - - throw new ApplicationException(String.Format("Plist Node `{0}' is not supported", node.Name)); - } - - private static void compose(object value, XmlWriter writer) - { - - if (value == null || value is string) - { - writer.WriteElementString("string", value as string); - } - else if (value is int || value is long) - { - writer.WriteElementString("integer", ((int)value).ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); - } - else if (value is System.Collections.Generic.Dictionary || - value.GetType().ToString().StartsWith("System.Collections.Generic.Dictionary`2[System.String")) - { - //Convert to Dictionary - Dictionary dic = value as Dictionary; - if (dic == null) - { - dic = new Dictionary(); - IDictionary idic = (IDictionary)value; - foreach (var key in idic.Keys) - { - dic.Add(key.ToString(), idic[key]); - } - } - writeDictionaryValues(dic, writer); - } - else if (value is List) - { - composeArray((List)value, writer); - } - else if (value is byte[]) - { - writer.WriteElementString("data", Convert.ToBase64String((Byte[])value)); - } - else if (value is float || value is double) - { - writer.WriteElementString("real", ((double)value).ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); - } - else if (value is DateTime) - { - DateTime time = (DateTime)value; - string theString = XmlConvert.ToString(time, XmlDateTimeSerializationMode.Utc); - writer.WriteElementString("date", theString);//, "yyyy-MM-ddTHH:mm:ssZ")); - } - else if (value is bool) - { - writer.WriteElementString(value.ToString().ToLower(), ""); - } - else - { - throw new Exception(String.Format("Value type '{0}' is unhandled", value.GetType().ToString())); - } - } - - private static void writeDictionaryValues(Dictionary dictionary, XmlWriter writer) - { - writer.WriteStartElement("dict"); - foreach (string key in dictionary.Keys) - { - object value = dictionary[key]; - writer.WriteElementString("key", key); - compose(value, writer); - } - writer.WriteEndElement(); - } - - private static int countObject(object value) - { - int count = 0; - switch (value.GetType().ToString()) - { - case "System.Collections.Generic.Dictionary`2[System.String,System.Object]": - Dictionary dict = (Dictionary)value; - foreach (string key in dict.Keys) - { - count += countObject(dict[key]); - } - count += dict.Keys.Count; - count++; - break; - case "System.Collections.Generic.List`1[System.Object]": - List list = (List)value; - foreach (object obj in list) - { - count += countObject(obj); - } - count++; - break; - default: - count++; - break; - } - return count; - } - - private static byte[] writeBinaryDictionary(Dictionary dictionary) - { - List buffer = new List(); - List header = new List(); - List refs = new List(); - for (int i = dictionary.Count - 1; i >= 0; i--) - { - var o = new object[dictionary.Count]; - dictionary.Values.CopyTo(o, 0); - composeBinary(o[i]); - offsetTable.Add(objectTable.Count); - refs.Add(refCount); - refCount--; - } - for (int i = dictionary.Count - 1; i >= 0; i--) - { - var o = new string[dictionary.Count]; - dictionary.Keys.CopyTo(o, 0); - composeBinary(o[i]);//); - offsetTable.Add(objectTable.Count); - refs.Add(refCount); - refCount--; - } - - if (dictionary.Count < 15) - { - header.Add(Convert.ToByte(0xD0 | Convert.ToByte(dictionary.Count))); - } - else - { - header.Add(0xD0 | 0xf); - header.AddRange(writeBinaryInteger(dictionary.Count, false)); - } - - - foreach (int val in refs) - { - byte[] refBuffer = RegulateNullBytes(BitConverter.GetBytes(val), objRefSize); - Array.Reverse(refBuffer); - buffer.InsertRange(0, refBuffer); - } - - buffer.InsertRange(0, header); - - - objectTable.InsertRange(0, buffer); - - return buffer.ToArray(); - } - - private static byte[] composeBinaryArray(List objects) - { - List buffer = new List(); - List header = new List(); - List refs = new List(); - - for (int i = objects.Count - 1; i >= 0; i--) - { - composeBinary(objects[i]); - offsetTable.Add(objectTable.Count); - refs.Add(refCount); - refCount--; - } - - if (objects.Count < 15) - { - header.Add(Convert.ToByte(0xA0 | Convert.ToByte(objects.Count))); - } - else - { - header.Add(0xA0 | 0xf); - header.AddRange(writeBinaryInteger(objects.Count, false)); - } - - foreach (int val in refs) - { - byte[] refBuffer = RegulateNullBytes(BitConverter.GetBytes(val), objRefSize); - Array.Reverse(refBuffer); - buffer.InsertRange(0, refBuffer); - } - - buffer.InsertRange(0, header); - - objectTable.InsertRange(0, buffer); - - return buffer.ToArray(); - } - - private static byte[] composeBinary(object obj) - { - byte[] value; - switch (obj.GetType().ToString()) - { - case "System.Collections.Generic.Dictionary`2[System.String,System.Object]": - value = writeBinaryDictionary((Dictionary)obj); - return value; - - case "System.Collections.Generic.List`1[System.Object]": - value = composeBinaryArray((List)obj); - return value; - - case "System.Byte[]": - value = writeBinaryByteArray((byte[])obj); - return value; - - case "System.Double": - value = writeBinaryDouble((double)obj); - return value; - - case "System.Int32": - value = writeBinaryInteger((int)obj, true); - return value; - - case "System.String": - value = writeBinaryString((string)obj, true); - return value; - - case "System.DateTime": - value = writeBinaryDate((DateTime)obj); - return value; - - case "System.Boolean": - value = writeBinaryBool((bool)obj); - return value; - - default: - return new byte[0]; - } - } - - public static byte[] writeBinaryDate(DateTime obj) - { - List buffer =new List(RegulateNullBytes(BitConverter.GetBytes(PlistDateConverter.ConvertToAppleTimeStamp(obj)), 8)); - buffer.Reverse(); - buffer.Insert(0, 0x33); - objectTable.InsertRange(0, buffer); - return buffer.ToArray(); - } - - public static byte[] writeBinaryBool(bool obj) - { - List buffer = new List(new byte[1] { (bool)obj ? (byte)9 : (byte)8 }); - objectTable.InsertRange(0, buffer); - return buffer.ToArray(); - } - - private static byte[] writeBinaryInteger(int value, bool write) - { - List buffer = new List(BitConverter.GetBytes((long) value)); - buffer =new List(RegulateNullBytes(buffer.ToArray())); - while (buffer.Count != Math.Pow(2, Math.Log(buffer.Count) / Math.Log(2))) - buffer.Add(0); - int header = 0x10 | (int)(Math.Log(buffer.Count) / Math.Log(2)); - - buffer.Reverse(); - - buffer.Insert(0, Convert.ToByte(header)); - - if (write) - objectTable.InsertRange(0, buffer); - - return buffer.ToArray(); - } - - private static byte[] writeBinaryDouble(double value) - { - List buffer =new List(RegulateNullBytes(BitConverter.GetBytes(value), 4)); - while (buffer.Count != Math.Pow(2, Math.Log(buffer.Count) / Math.Log(2))) - buffer.Add(0); - int header = 0x20 | (int)(Math.Log(buffer.Count) / Math.Log(2)); - - buffer.Reverse(); - - buffer.Insert(0, Convert.ToByte(header)); - - objectTable.InsertRange(0, buffer); - - return buffer.ToArray(); - } - - private static byte[] writeBinaryByteArray(byte[] value) - { - List buffer = new List(value); - List header = new List(); - if (value.Length < 15) - { - header.Add(Convert.ToByte(0x40 | Convert.ToByte(value.Length))); - } - else - { - header.Add(0x40 | 0xf); - header.AddRange(writeBinaryInteger(buffer.Count, false)); - } - - buffer.InsertRange(0, header); - - objectTable.InsertRange(0, buffer); - - return buffer.ToArray(); - } - - private static byte[] writeBinaryString(string value, bool head) - { - List buffer = new List(); - List header = new List(); - foreach (char chr in value.ToCharArray()) - buffer.Add(Convert.ToByte(chr)); - - if (head) - { - if (value.Length < 15) - { - header.Add(Convert.ToByte(0x50 | Convert.ToByte(value.Length))); - } - else - { - header.Add(0x50 | 0xf); - header.AddRange(writeBinaryInteger(buffer.Count, false)); - } - } - - buffer.InsertRange(0, header); - - objectTable.InsertRange(0, buffer); - - return buffer.ToArray(); - } - - private static byte[] RegulateNullBytes(byte[] value) - { - return RegulateNullBytes(value, 1); - } - - private static byte[] RegulateNullBytes(byte[] value, int minBytes) - { - Array.Reverse(value); - List bytes = new List(value); - for (int i = 0; i < bytes.Count; i++) - { - if (bytes[i] == 0 && bytes.Count > minBytes) - { - bytes.Remove(bytes[i]); - i--; - } - else - break; - } - - if (bytes.Count < minBytes) - { - int dist = minBytes - bytes.Count; - for (int i = 0; i < dist; i++) - bytes.Insert(0, 0); - } - - value = bytes.ToArray(); - Array.Reverse(value); - return value; - } - - private static void parseTrailer(List trailer) - { - offsetByteSize = BitConverter.ToInt32(RegulateNullBytes(trailer.GetRange(6, 1).ToArray(), 4), 0); - objRefSize = BitConverter.ToInt32(RegulateNullBytes(trailer.GetRange(7, 1).ToArray(), 4), 0); - byte[] refCountBytes = trailer.GetRange(12, 4).ToArray(); - Array.Reverse(refCountBytes); - refCount = BitConverter.ToInt32(refCountBytes, 0); - byte[] offsetTableOffsetBytes = trailer.GetRange(24, 8).ToArray(); - Array.Reverse(offsetTableOffsetBytes); - offsetTableOffset = BitConverter.ToInt64(offsetTableOffsetBytes, 0); - } - - private static void parseOffsetTable(List offsetTableBytes) - { - for (int i = 0; i < offsetTableBytes.Count; i += offsetByteSize) - { - byte[] buffer = offsetTableBytes.GetRange(i, offsetByteSize).ToArray(); - Array.Reverse(buffer); - offsetTable.Add(BitConverter.ToInt32(RegulateNullBytes(buffer, 4), 0)); - } - } - - private static object parseBinaryDictionary(int objRef) - { - Dictionary buffer = new Dictionary(); - List refs = new List(); - int refCount = 0; - - int refStartPosition; - refCount = getCount(offsetTable[objRef], out refStartPosition); - - - if (refCount < 15) - refStartPosition = offsetTable[objRef] + 1; - else - refStartPosition = offsetTable[objRef] + 2 + RegulateNullBytes(BitConverter.GetBytes(refCount), 1).Length; - - for (int i = refStartPosition; i < refStartPosition + refCount * 2 * objRefSize; i += objRefSize) - { - byte[] refBuffer = objectTable.GetRange(i, objRefSize).ToArray(); - Array.Reverse(refBuffer); - refs.Add(BitConverter.ToInt32(RegulateNullBytes(refBuffer, 4), 0)); - } - - for (int i = 0; i < refCount; i++) - { - buffer.Add((string)parseBinary(refs[i]), parseBinary(refs[i + refCount])); - } - - return buffer; - } - - private static object parseBinaryArray(int objRef) - { - List buffer = new List(); - List refs = new List(); - int refCount = 0; - - int refStartPosition; - refCount = getCount(offsetTable[objRef], out refStartPosition); - - - if (refCount < 15) - refStartPosition = offsetTable[objRef] + 1; - else - //The following integer has a header aswell so we increase the refStartPosition by two to account for that. - refStartPosition = offsetTable[objRef] + 2 + RegulateNullBytes(BitConverter.GetBytes(refCount), 1).Length; - - for (int i = refStartPosition; i < refStartPosition + refCount * objRefSize; i += objRefSize) - { - byte[] refBuffer = objectTable.GetRange(i, objRefSize).ToArray(); - Array.Reverse(refBuffer); - refs.Add(BitConverter.ToInt32(RegulateNullBytes(refBuffer, 4), 0)); - } - - for (int i = 0; i < refCount; i++) - { - buffer.Add(parseBinary(refs[i])); - } - - return buffer; - } - - private static int getCount(int bytePosition, out int newBytePosition) - { - byte headerByte = objectTable[bytePosition]; - byte headerByteTrail = Convert.ToByte(headerByte & 0xf); - int count; - if (headerByteTrail < 15) - { - count = headerByteTrail; - newBytePosition = bytePosition + 1; - } - else - count = (int)parseBinaryInt(bytePosition + 1, out newBytePosition); - return count; - } - - private static object parseBinary(int objRef) - { - byte header = objectTable[offsetTable[objRef]]; - switch (header & 0xF0) - { - case 0: - { - //If the byte is - //0 return null - //9 return true - //8 return false - return (objectTable[offsetTable[objRef]] == 0) ? (object)null : ((objectTable[offsetTable[objRef]] == 9) ? true : false); - } - case 0x10: - { - return parseBinaryInt(offsetTable[objRef]); - } - case 0x20: - { - return parseBinaryReal(offsetTable[objRef]); - } - case 0x30: - { - return parseBinaryDate(offsetTable[objRef]); - } - case 0x40: - { - return parseBinaryByteArray(offsetTable[objRef]); - } - case 0x50://String ASCII - { - return parseBinaryAsciiString(offsetTable[objRef]); - } - case 0x60://String Unicode - { - return parseBinaryUnicodeString(offsetTable[objRef]); - } - case 0xD0: - { - return parseBinaryDictionary(objRef); - } - case 0xA0: - { - return parseBinaryArray(objRef); - } - } - throw new Exception("This type is not supported"); - } - - public static object parseBinaryDate(int headerPosition) - { - byte[] buffer = objectTable.GetRange(headerPosition + 1, 8).ToArray(); - Array.Reverse(buffer); - double appleTime = BitConverter.ToDouble(buffer, 0); - DateTime result = PlistDateConverter.ConvertFromAppleTimeStamp(appleTime); - return result; - } - - private static object parseBinaryInt(int headerPosition) - { - int output; - return parseBinaryInt(headerPosition, out output); - } - - private static object parseBinaryInt(int headerPosition, out int newHeaderPosition) - { - byte header = objectTable[headerPosition]; - int byteCount = (int)Math.Pow(2, header & 0xf); - byte[] buffer = objectTable.GetRange(headerPosition + 1, byteCount).ToArray(); - Array.Reverse(buffer); - //Add one to account for the header byte - newHeaderPosition = headerPosition + byteCount + 1; - return BitConverter.ToInt32(RegulateNullBytes(buffer, 4), 0); - } - - private static object parseBinaryReal(int headerPosition) - { - byte header = objectTable[headerPosition]; - int byteCount = (int)Math.Pow(2, header & 0xf); - byte[] buffer = objectTable.GetRange(headerPosition + 1, byteCount).ToArray(); - Array.Reverse(buffer); - - return BitConverter.ToDouble(RegulateNullBytes(buffer, 8), 0); - } - - private static object parseBinaryAsciiString(int headerPosition) - { - int charStartPosition; - int charCount = getCount(headerPosition, out charStartPosition); - - var buffer = objectTable.GetRange(charStartPosition, charCount); - return buffer.Count > 0 ? Encoding.ASCII.GetString(buffer.ToArray()) : string.Empty; - } - - private static object parseBinaryUnicodeString(int headerPosition) - { - int charStartPosition; - int charCount = getCount(headerPosition, out charStartPosition); - charCount = charCount * 2; - - byte[] buffer = new byte[charCount]; - byte one, two; - - for (int i = 0; i < charCount; i+=2) - { - one = objectTable.GetRange(charStartPosition+i,1)[0]; - two = objectTable.GetRange(charStartPosition + i+1, 1)[0]; - - if (BitConverter.IsLittleEndian) - { - buffer[i] = two; - buffer[i + 1] = one; - } - else - { - buffer[i] = one; - buffer[i + 1] = two; - } - } - - return Encoding.Unicode.GetString(buffer); - } - - private static object parseBinaryByteArray(int headerPosition) - { - int byteStartPosition; - int byteCount = getCount(headerPosition, out byteStartPosition); - return objectTable.GetRange(byteStartPosition, byteCount).ToArray(); - } - - #endregion - } - - internal enum plistType - { - Auto, Binary, Xml - } - - internal static class PlistDateConverter - { - public static long timeDifference = 978307200; - - public static long GetAppleTime(long unixTime) - { - return unixTime - timeDifference; - } - - public static long GetUnixTime(long appleTime) - { - return appleTime + timeDifference; - } - - public static DateTime ConvertFromAppleTimeStamp(double timestamp) - { - DateTime origin = new DateTime(2001, 1, 1, 0, 0, 0, 0); - return origin.AddSeconds(timestamp); - } - - public static double ConvertToAppleTimeStamp(DateTime date) - { - DateTime begin = new DateTime(2001, 1, 1, 0, 0, 0, 0); - TimeSpan diff = date - begin; - return Math.Floor(diff.TotalSeconds); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/Plist.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/Plist.cs.meta deleted file mode 100644 index d0b5b53..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/Plist.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2672b3f40586e4d319dfce4c30e00913 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/PrefsRecord.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/PrefsRecord.cs deleted file mode 100644 index d6b28df..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/PrefsRecord.cs +++ /dev/null @@ -1,491 +0,0 @@ -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Globalization; - using System.Text.RegularExpressions; - using Common; - using ObscuredTypes; - using Storage; - using UnityEditor; - using UnityEngine; - using Utils; - - [Serializable] - internal class PrefsRecord - { - protected const string DefaultString = "[^_; = ElinaKristinaMyGirlsLoveYou'16 = ;_^]"; - protected const float DefaultFloat = float.MinValue + 2016.0122f; - protected const int DefaultInt = int.MinValue + 20130524; - protected const string CantDecrypt = "Can't decrypt with specified key"; - - internal PrefsType prefType = PrefsType.Unknown; - internal StorageDataType obscuredType = StorageDataType.Unknown; - - internal bool dirtyKey; - internal bool dirtyValue; - - [SerializeField] - private string savedKey; - - [SerializeField] - private string key; - - internal string Key - { - get => key; - set - { - if (value == key) return; - key = value; - - dirtyKey = true; - } - } - - [SerializeField] - private string stringValue; - - internal string StringValue - { - get => stringValue; - set - { - if (value == stringValue) return; - - stringValue = value; - dirtyValue = true; - } - } - - [SerializeField] - private int intValue; - - internal int IntValue - { - get => intValue; - set - { - if (value == intValue) return; - - intValue = value; - dirtyValue = true; - } - } - - [SerializeField] - private float floatValue; - - internal float FloatValue - { - get => floatValue; - set - { - if (Math.Abs(value - floatValue) < 0.0000001f) return; - - floatValue = value; - dirtyValue = true; - } - } - - internal string DisplayValue - { - get - { - switch (prefType) - { - case PrefsType.Unknown: - return ACTkPrefsEditor.UnknownValueDescription; - case PrefsType.String: - return IsEditableObscuredValue() || !Obscured ? stringValue : ACTkPrefsEditor.UnsupportedValueDescription; - case PrefsType.Int: - return intValue.ToString(); - case PrefsType.Float: - return floatValue.ToString(CultureInfo.InvariantCulture); - default: - throw new ArgumentOutOfRangeException(); - } - } - } - - internal string DisplayType => Obscured ? obscuredType.ToString() : prefType.ToString(); - - internal static int SortByNameAscending(PrefsRecord n1, PrefsRecord n2) - { - return string.CompareOrdinal(n1.key, n2.key); - } - - internal static int SortByNameDescending(PrefsRecord n1, PrefsRecord n2) - { - var result = string.CompareOrdinal(n2.key, n1.key); - return result; - } - - internal static int SortByType(PrefsRecord n1, PrefsRecord n2) - { - var result = string.CompareOrdinal(n1.DisplayType, n2.DisplayType); - return result == 0 ? SortByNameAscending(n1, n2) : result; - } - - internal static int SortByObscurance(PrefsRecord n1, PrefsRecord n2) - { - var result = n1.Obscured.CompareTo(n2.Obscured); - return result == 0 ? SortByNameAscending(n1, n2) : result; - } - - internal bool Obscured { get; set; } - - internal PrefsRecord(string newKey, string value, bool encrypted) - { - key = savedKey = newKey; - stringValue = value; - - prefType = PrefsType.String; - - if (encrypted) - { - obscuredType = StorageDataType.String; - Obscured = true; - } - } - - internal PrefsRecord(string newKey, int value, bool encrypted) - { - key = savedKey = newKey; - intValue = value; - - if (encrypted) - { - prefType = PrefsType.String; - obscuredType = StorageDataType.Int32; - Obscured = true; - } - else - { - prefType = PrefsType.Int; - } - } - - internal PrefsRecord(string newKey, float value, bool encrypted) - { - key = savedKey = newKey; - floatValue = value; - - if (encrypted) - { - prefType = PrefsType.String; - obscuredType = StorageDataType.Single; - Obscured = true; - } - else - { - prefType = PrefsType.Float; - } - } - - internal PrefsRecord(string originalKey) - { - key = savedKey = originalKey; - - ReadValue(); - - // only string prefs may be obscured - if (prefType == PrefsType.String) - { - Obscured = IsValueObscured(stringValue); - - if (Obscured) - { - key = DecryptKey(key); - - if (obscuredType == StorageDataType.String) - { - stringValue = ObscuredPrefs.DecryptValue(key, null, DefaultString, stringValue); - if (stringValue == DefaultString) stringValue = CantDecrypt; - } - else if (obscuredType == StorageDataType.Int32) - { - intValue = ObscuredPrefs.DecryptValue(key, null, DefaultInt, stringValue); - if (intValue == DefaultInt) - { - obscuredType = StorageDataType.String; - stringValue = CantDecrypt; - } - } - else if (obscuredType == StorageDataType.Single) - { - floatValue = ObscuredPrefs.DecryptValue(key, null, DefaultFloat, stringValue); - if (Math.Abs(floatValue - DefaultFloat) < 0.00001f) - { - obscuredType = StorageDataType.String; - stringValue = CantDecrypt; - } - } - } - } - } - - internal bool Save(bool newRecord = false) - { - var savedString = stringValue; - string newSavedKey; - - if (Obscured) - { - savedString = GetEncryptedValue(); - newSavedKey = GetEncryptedKey(); - } - else - { - newSavedKey = key; - } - - if (newSavedKey != savedKey && PlayerPrefs.HasKey(newSavedKey)) - { - if (!EditorUtility.DisplayDialog("Pref overwrite", - "Pref with name " + key + " already exists!\n" + "Are you sure you wish to overwrite it?", "Yes", - "No")) - { - return false; - } - } - - if (dirtyKey) - { - PlayerPrefs.DeleteKey(savedKey); - } - - switch (prefType) - { - case PrefsType.Unknown: - Debug.LogError(ACTk.LogPrefix + "Can't save Pref of unknown type!"); - break; - case PrefsType.String: - PlayerPrefs.SetString(newSavedKey, savedString); - break; - case PrefsType.Int: - PlayerPrefs.SetInt(newSavedKey, intValue); - break; - case PrefsType.Float: - PlayerPrefs.SetFloat(newSavedKey, floatValue); - break; - default: - throw new ArgumentOutOfRangeException(); - } - - savedKey = newSavedKey; - - dirtyKey = false; - dirtyValue = false; - - PlayerPrefs.Save(); - - return true; - } - - internal void Delete() - { - PlayerPrefs.DeleteKey(savedKey); - PlayerPrefs.Save(); - } - - internal void Encrypt() - { - if (Obscured) return; - - var success = true; - - switch (prefType) - { - case PrefsType.Unknown: - success = false; - Debug.LogError(ACTk.LogPrefix + "Can't encrypt pref of unknown type!"); - break; - case PrefsType.String: - obscuredType = StorageDataType.String; - break; - case PrefsType.Int: - obscuredType = StorageDataType.Int32; - break; - case PrefsType.Float: - obscuredType = StorageDataType.Single; - break; - default: - throw new ArgumentOutOfRangeException(); - } - - if (success) - { - prefType = PrefsType.String; - Obscured = true; - dirtyValue = dirtyKey = true; - } - } - - internal void Decrypt() - { - if (!Obscured) return; - if (!IsEditableObscuredValue()) return; - - var success = true; - - switch (obscuredType) - { - case StorageDataType.Int32: - prefType = PrefsType.Int; - break; - case StorageDataType.String: - prefType = PrefsType.String; - break; - case StorageDataType.Single: - prefType = PrefsType.Float; - break; - case StorageDataType.UInt32: - case StorageDataType.Double: - case StorageDataType.Int64: - case StorageDataType.Boolean: - case StorageDataType.ByteArray: - case StorageDataType.Vector2: - case StorageDataType.Vector3: - case StorageDataType.Quaternion: - case StorageDataType.Color: - case StorageDataType.Color32: - case StorageDataType.Rect: - ACTkPrefsEditor.instance.ShowNotification(new GUIContent("Type " + obscuredType + " isn't supported")); - success = false; - break; - case StorageDataType.Unknown: - ACTkPrefsEditor.instance.ShowNotification(new GUIContent("Can't decrypt " + key)); - success = false; - break; - default: - throw new ArgumentOutOfRangeException(); - } - - if (success) - { - Obscured = false; - obscuredType = StorageDataType.Unknown; - dirtyValue = dirtyKey = true; - } - } - - internal string GetEncryptedKey() - { - return ObscuredPrefs.EncryptKey(key); - } - - internal string GetEncryptedValue() - { - string savedString; - - switch (obscuredType) - { - case StorageDataType.Int32: - savedString = ObscuredPrefs.EncryptValue(key, intValue); - break; - case StorageDataType.String: - savedString = ObscuredPrefs.EncryptValue(key, stringValue); - break; - case StorageDataType.Single: - savedString = ObscuredPrefs.EncryptValue(key, floatValue); - break; - default: - savedString = stringValue; - break;; - } - - return savedString; - } - - internal bool IsEditableObscuredValue() - { - return obscuredType == StorageDataType.Int32 || - obscuredType == StorageDataType.String || - obscuredType == StorageDataType.Single; - } - - internal string ToString(bool raw = false) - { - string result; - - if (raw) - { - result = "Key: " + GetEncryptedKey() + Environment.NewLine + "Value: " + GetEncryptedValue(); - } - else - { - result = "Key: " + key + Environment.NewLine + "Value: " + DisplayValue; - } - - return result; - } - - private void ReadValue() - { - var stringTry = PlayerPrefs.GetString(key, DefaultString); - if (stringTry != DefaultString) - { - prefType = PrefsType.String; - stringValue = stringTry; - return; - } - - var floatTry = PlayerPrefs.GetFloat(key, DefaultFloat); - if (Math.Abs(floatTry - DefaultFloat) > 0.0000001f) - { - prefType = PrefsType.Float; - floatValue = floatTry; - return; - } - - var intTry = PlayerPrefs.GetInt(key, DefaultInt); - if (intTry != DefaultInt) - { - prefType = PrefsType.Int; - intValue = intTry; - } - } - - private string DecryptKey(string encryptedKey) - { - string decryptedKey; - - try - { - var decryptedKeyChars = Base64Utils.FromBase64ToChars(encryptedKey); - decryptedKey = ObscuredString.Decrypt(decryptedKeyChars, ObscuredPrefs.GetCryptoKey()); - } - catch - { - decryptedKey = string.Empty; - } - - return decryptedKey; - } - - private bool IsValueObscured(string value) - { - var validBase64String = (value.Length % 4 == 0) && - Regex.IsMatch(value, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None); - if (!validBase64String) return false; - - var dataType = ObscuredPrefs.GetRawValueType(value); - if (!Enum.IsDefined(typeof(StorageDataType), dataType) || dataType == StorageDataType.Unknown) - { - return false; - } - - obscuredType = dataType; - - return true; - } - - internal enum PrefsType : byte - { - Unknown, - String, - Int, - Float - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/PrefsRecord.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/PrefsRecord.cs.meta deleted file mode 100644 index 44cd80e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/PrefsEditor/PrefsRecord.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bbfdc316834441f8a9b90c8d264eee2d -timeCreated: 1557960764 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors.meta deleted file mode 100644 index fd06c40..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: b75fb59d188745fba898daee356c6042 -timeCreated: 1621962890 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/BuildPreProcessor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/BuildPreProcessor.cs deleted file mode 100644 index c0a276e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/BuildPreProcessor.cs +++ /dev/null @@ -1,151 +0,0 @@ -// #region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -// #endregion - -namespace CodeStage.AntiCheat.EditorCode.Processors -{ - using System.IO; - using UnityEditor; - using UnityEditor.Build; - using UnityEditor.Build.Reporting; - using UnityEngine; - - public class BuildPreProcessor : IPreprocessBuildWithReport - { - private const string ProGuardExclusion = "-keep class net.codestage.actk.androidnative.ACTkAndroidRoutines { *; }\n" + - "-keep class net.codestage.actk.androidnative.CodeHashGenerator {public void GetCodeHash(...);}\n" + - "-keep class net.codestage.actk.androidnative.CodeHashCallback { *; }"; - - #region Implementation of IOrderedCallback - - public int callbackOrder => int.MinValue; - - public void OnPreprocessBuild(BuildReport report) - { - if (report.summary.platform == BuildTarget.Android) - CheckProGuard(); - } - - internal static void CheckProGuard(bool calledFromMenu = false) - { - if (!calledFromMenu && ACTkUserSettings.Instance.SkipProGuardNotice) - return; - - if (!calledFromMenu) - { - var devBuild = EditorUserBuildSettings.development; - var minifyEnabled = -#if UNITY_2020_1_OR_NEWER - (PlayerSettings.Android.minifyRelease && !devBuild) || - (PlayerSettings.Android.minifyDebug && devBuild); -#else - (EditorUserBuildSettings.androidReleaseMinification != AndroidMinification.None && !devBuild) || - (EditorUserBuildSettings.androidDebugMinification != AndroidMinification.None && devBuild); -#endif - if (!minifyEnabled) - return; - } - - ApplyProGuardConfiguration(calledFromMenu); - } - - private static void ApplyProGuardConfiguration(bool calledFromMenu) - { - var proguardFilePath = "Assets/Plugins/Android/proguard-user.txt"; - var disabledProguardFilePath = "Assets/Plugins/Android/proguard-user.txt.DISABLED"; - var needsConfiguration = false; - var activeConfigExists = false; - - if (!File.Exists(proguardFilePath)) - { - needsConfiguration = true; - } - else if (!FileHasACTkAdded(proguardFilePath)) - { - activeConfigExists = true; - needsConfiguration = true; - } - - if (!needsConfiguration) - { - if (calledFromMenu) - EditorUtility.DisplayDialog("Anti-Cheat Toolkit", - "ProGuard user file configuration is already applied, no action needed.", "OK"); - return; - } - - if (!calledFromMenu) - { - var choice = EditorUtility.DisplayDialogComplex("Anti-Cheat Toolkit", - "You're about to make a build with minification, but there is no active ProGuard User file configured to exclude ACTk which can cause runtime exceptions.\n\n" + - "Would you like to apply Anti-Cheat Toolkit rules to the ProGuard User file?", "Yes", "No", - "No and don't ask again"); - - if (choice != 0) - { - if (choice == 2) - ACTkUserSettings.Instance.SkipProGuardNotice = true; - return; - } - } - - var fileNeedsUpdate = true; - if (!activeConfigExists && File.Exists(disabledProguardFilePath)) - { - FileUtil.MoveFileOrDirectory(disabledProguardFilePath, proguardFilePath); - if (FileHasACTkAdded(proguardFilePath)) - fileNeedsUpdate = false; - } - - if (fileNeedsUpdate) - AddACTkToFile(proguardFilePath); - - AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); - - if (calledFromMenu) - EditorUtility.DisplayDialog("Anti-Cheat Toolkit", - $"ProGuard user file configuration at {proguardFilePath} updated.", "OK"); - } - - private static void AddACTkToFile(string path) - { - var folderPath = Path.GetDirectoryName(path); - if (!string.IsNullOrEmpty(folderPath) && !Directory.Exists(folderPath)) - Directory.CreateDirectory(folderPath); - - var file = string.Empty; - - if (File.Exists(path)) - file = File.ReadAllText(path); - - if (!string.IsNullOrEmpty(file)) - file += "\n"; - - file += ProGuardExclusion; - - File.WriteAllText(path, file); - } - - private static bool FileHasACTkAdded(string path) - { - var file = File.ReadAllText(path); - if (file.Contains("-keep class net.codestage.actk")) - { - // migrating old version of the config - if (file.Contains("-keep class net.codestage.actk.** { *; }")) - { - file = file.Replace("-keep class net.codestage.actk.** { *; }",ProGuardExclusion); - File.WriteAllText(path, file); - } - - return true; - } - - return false; - } - - #endregion - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/BuildPreProcessor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/BuildPreProcessor.cs.meta deleted file mode 100644 index 1cebb29..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/BuildPreProcessor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 206d36528cc940b3a156974ba2580c85 -timeCreated: 1657673033 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/WallHackDetectorLinkerProcessor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/WallHackDetectorLinkerProcessor.cs deleted file mode 100644 index d93e870..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/WallHackDetectorLinkerProcessor.cs +++ /dev/null @@ -1,80 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if ACTK_WALLHACK_LINK_XML - -namespace CodeStage.AntiCheat.EditorCode.Processors -{ - using System; - using System.IO; - using Common; - using Detectors; - using UnityEditor.Build; - using UnityEditor.Build.Reporting; - using UnityEditor.UnityLinker; - using UnityEngine; - - internal class WallHackDetectorLinkerProcessor : IUnityLinkerProcessor - { - private static string linkData; - - public int callbackOrder { get; } - - private readonly string path; - - public WallHackDetectorLinkerProcessor() - { - path = ACTkEditorConstants.LinkXmlPath; - } - - public string GenerateAdditionalLinkXmlFile(BuildReport report, UnityLinkerBuildPipelineData data) - { - try - { - if (linkData == null) - linkData = ConstructLinkData(); - - File.WriteAllText(path, linkData); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Couldn't write link.xml!", e); - } - - Debug.Log($"{ACTk.LogPrefix}Additional link.xml generated for {WallHackDetector.ComponentName}:\n{path}"); - return path; - } - -#if !UNITY_2021_2_OR_NEWER - public void OnBeforeRun(BuildReport report, UnityLinkerBuildPipelineData data) - { - // ignoring since it was deprecated in Unity 2021.2 - } - - public void OnAfterRun(BuildReport report, UnityLinkerBuildPipelineData data) - { - // ignoring since it was deprecated in Unity 2021.2 - } -#endif - - private string ConstructLinkData() - { - return "\n" + - $"\t\n" + - $"\t\t\n" + - $"\t\t\n" + - $"\t\t\n" + - $"\t\t\n" + - $"\t\t\n" + - $"\t\t\n" + - $"\t\t\n" + - "\t\n" + - ""; - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/WallHackDetectorLinkerProcessor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/WallHackDetectorLinkerProcessor.cs.meta deleted file mode 100644 index d26d864..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Processors/WallHackDetectorLinkerProcessor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6d740469e3e0430495570572d8084080 -timeCreated: 1621962902 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings.meta deleted file mode 100644 index 768892a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2a3f8c04015e4bf4faa5e7b926ff757a -folderAsset: yes -timeCreated: 1557585973 -licenseType: Store -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkEditorPrefsSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkEditorPrefsSettings.cs deleted file mode 100644 index 9af2a6f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkEditorPrefsSettings.cs +++ /dev/null @@ -1,131 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using UnityEditor; - - internal static class ACTkEditorPrefsSettings - { - private class FoldoutStorage - { - private bool il2cpp; - public bool Il2cpp - { - get => il2cpp; - set - { - il2cpp = value; - EditorPrefs.SetBool(IL2CPPFoldoutPref, value); - } - } - - private bool injection; - public bool Injection - { - get => injection; - set - { - injection = value; - EditorPrefs.SetBool(InjectionFoldoutPref, value); - } - } - - private bool hash; - public bool Hash - { - get => hash; - set - { - hash = value; - EditorPrefs.SetBool(HashFoldoutPref, value); - } - } - - private bool wallHack; - public bool WallHack - { - get => wallHack; - set - { - wallHack = value; - EditorPrefs.SetBool(WallHackFoldoutPref, value); - } - } - - private bool conditional; - public bool Conditional - { - get => conditional; - set - { - conditional = value; - EditorPrefs.SetBool(ConditionalFoldoutPref, value); - } - } - - public FoldoutStorage() - { - il2cpp = EditorPrefs.GetBool(IL2CPPFoldoutPref); - injection = EditorPrefs.GetBool(InjectionFoldoutPref); - hash = EditorPrefs.GetBool(HashFoldoutPref); - wallHack = EditorPrefs.GetBool(WallHackFoldoutPref); - conditional = EditorPrefs.GetBool(ConditionalFoldoutPref); - } - } - - private const string PrefsPrefix = "ACTkSettings_"; - - private const string IL2CPPFoldoutPref = PrefsPrefix + "IL2CPPFoldout"; - private const string InjectionFoldoutPref = PrefsPrefix + "injectionFoldout"; - private const string HashFoldoutPref = PrefsPrefix + "hashFoldout"; - private const string WallHackFoldoutPref = PrefsPrefix + "wallHackFoldout"; - private const string ConditionalFoldoutPref = PrefsPrefix + "conditionalFoldout"; - - private static readonly Lazy Storage = new Lazy(() => new FoldoutStorage()); - - public static bool IL2CPPFoldout - { - get => Storage.Value.Il2cpp; - set => Storage.Value.Il2cpp = value; - } - - public static bool InjectionFoldout - { - get => Storage.Value.Injection; - set => Storage.Value.Injection = value; - } - - public static bool HashFoldout - { - get => Storage.Value.Hash; - set => Storage.Value.Hash = value; - } - - public static bool WallHackFoldout - { - get => Storage.Value.WallHack; - set => Storage.Value.WallHack = value; - } - - public static bool ConditionalFoldout - { - get => Storage.Value.Conditional; - set => Storage.Value.Conditional = value; - } - - public static void FocusWallhackFoldout() - { - ConditionalFoldout = false; - HashFoldout = false; - InjectionFoldout = false; - IL2CPPFoldout = false; - - WallHackFoldout = true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkEditorPrefsSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkEditorPrefsSettings.cs.meta deleted file mode 100644 index 37cb82b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkEditorPrefsSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3371576aaf6a4dddb491b60c74360fb8 -timeCreated: 1558287287 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkSettings.cs deleted file mode 100644 index 773d25e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkSettings.cs +++ /dev/null @@ -1,230 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using UnityEngine.Serialization; - -namespace CodeStage.AntiCheat.EditorCode -{ - using Common; - using System; - using System.Collections.Generic; - using System.IO; - - using UnityEditor; - using UnityEngine; - using Object = UnityEngine.Object; - - /// - /// Represents settings scriptable object. Used mostly internally. - /// - /// Not intended for usage from user code, - /// touch at your peril since API can change and break backwards compatibility! - [Serializable] - public class ACTkSettings : ScriptableObject - { - private const string Directory = "ProjectSettings"; - private const string Path = Directory + "/ACTkSettings.asset"; - - [SerializeField] - private bool injectionDetectorEnabled; - - [SerializeField] - private bool preGenerateBuildHash; - - [SerializeField] - private bool disableInjectionDetectorValidation; - - [FormerlySerializedAs("disableWallhackDetectorValidation")] - [SerializeField] - private bool disableWallhackDetectorShaderValidation; - - [SerializeField] - private bool disableWallhackDetectorPhysicsValidation; - - [SerializeField] - private bool disableWallhackDetectorLinkXmlValidation; - - [SerializeField] - private List injectionDetectorWhiteList = new List(); - - [SerializeField] - private string version = ACTk.Version; - - private static ACTkSettings instance; - public static ACTkSettings Instance - { - get - { - if (instance != null) return instance; - instance = LoadOrCreate(); - return instance; - } - } - - public static void Show() - { - SettingsService.OpenProjectSettings(ACTkEditorConstants.SettingsProviderPath); - } - - public bool InjectionDetectorEnabled - { - get => injectionDetectorEnabled; - set - { - injectionDetectorEnabled = value; - Save(); - } - } - - public bool PreGenerateBuildHash - { - get => preGenerateBuildHash; - set - { - preGenerateBuildHash = value; - Save(); - } - } - - public bool DisableInjectionDetectorValidation - { - get => disableInjectionDetectorValidation; - set - { - disableInjectionDetectorValidation = value; - Save(); - } - } - - public bool DisableWallhackDetectorShaderValidation - { - get => disableWallhackDetectorShaderValidation; - set - { - disableWallhackDetectorShaderValidation = value; - Save(); - } - } - - public bool DisableWallhackDetectorPhysicsValidation - { - get => disableWallhackDetectorPhysicsValidation; - set - { - disableWallhackDetectorPhysicsValidation = value; - Save(); - } - } - - public bool DisableWallhackDetectorLinkXmlValidation - { - get => disableWallhackDetectorLinkXmlValidation; - set - { - disableWallhackDetectorLinkXmlValidation = value; - Save(); - } - } - - public List InjectionDetectorWhiteList - { - get => injectionDetectorWhiteList; - set - { - injectionDetectorWhiteList = value; - Save(); - } - } - - public static void Delete() - { - instance = null; - EditorTools.DeleteFile(Path); - } - - public static void Save() - { - SaveInstance(Instance); - } - - private static ACTkSettings LoadOrCreate() - { - ACTkSettings settings; - - if (!File.Exists(Path)) - { - settings = CreateNewSettingsFile(); - } - else - { - settings = LoadInstance(); - - if (settings == null) - { - EditorTools.DeleteFile(Path); - settings = CreateNewSettingsFile(); - } - - if (settings.version != ACTk.Version) - { - // for future migration reference - } - } - - settings.hideFlags = HideFlags.HideAndDontSave; - settings.version = ACTk.Version; - - return settings; - } - - private static ACTkSettings CreateNewSettingsFile() - { - var settingsInstance = CreateInstance(); - SaveInstance(settingsInstance); - return settingsInstance; - } - - private static void SaveInstance(ACTkSettings settingsInstance) - { - if (!System.IO.Directory.Exists(Directory)) - System.IO.Directory.CreateDirectory(Directory); - - try - { - UnityEditorInternal.InternalEditorUtility.SaveToSerializedFileAndForget(new Object[] { settingsInstance }, Path, true); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Can't save settings!", e); - } - } - - private static ACTkSettings LoadInstance() - { - ACTkSettings settingsInstance; - - try - { - settingsInstance = (ACTkSettings)UnityEditorInternal.InternalEditorUtility.LoadSerializedFileAndForget(Path)[0]; - } - catch (Exception e) - { - Debug.Log($"{ACTk.LogPrefix}Can't read settings, resetting them to defaults.\n" + - "This message is harmless in most cases and can be ignored if not repeating.\n" + - $"Exception: {e}"); - settingsInstance = null; - } - - return settingsInstance; - } - - private static ACTkSettings CreateInstance() - { - var newInstance = CreateInstance(); - return newInstance; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkSettings.cs.meta deleted file mode 100644 index 592ab6b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 22111be9689046e1bd7b8b1fae4d0b3c -timeCreated: 1552937993 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkUserSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkUserSettings.cs deleted file mode 100644 index 19430ef..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkUserSettings.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.IO; -using CodeStage.AntiCheat.Common; -using CodeStage.EditorCommon.Tools; -using UnityEngine; - -namespace CodeStage.AntiCheat.EditorCode -{ - internal class ACTkUserSettings : ScriptableObject - { -#if UNITY_2020_1_OR_NEWER - private const string Folder = "UserSettings"; -#else - private const string Folder = "Library"; -#endif - private const string Path = Folder + "/ACTkSettings.asset"; - - private static ACTkUserSettings instance; - - [SerializeField] - private bool skipProGuardNotice; - - internal bool SkipProGuardNotice - { - get => skipProGuardNotice; - set - { - skipProGuardNotice = value; - Save(); - } - } - - [field: SerializeField] - private string Version { get; set; } = ACTk.Version; // for backward compatibility in future versions - - public static ACTkUserSettings Instance - { - get - { - if (instance != null) return instance; - instance = LoadOrCreate(); - return instance; - } - } - - public static void Delete() - { - instance = null; - CSFileTools.DeleteFile(Path); - } - - public static void Save() - { - SaveInstance(Instance); - } - - private static ACTkUserSettings LoadOrCreate() - { - ACTkUserSettings settings; - - if (!File.Exists(Path)) - { - settings = CreateNewSettingsFile(); - } - else - { - settings = LoadInstance(); - - if (settings == null) - { - CSFileTools.DeleteFile(Path); - settings = CreateNewSettingsFile(); - } - } - - settings.Version = ACTk.Version; - return settings; - } - - private static ACTkUserSettings CreateNewSettingsFile() - { - var settingsInstance = CreateInstance(); - SaveInstance(settingsInstance); - return settingsInstance; - } - - private static void SaveInstance(ACTkUserSettings settingsInstance) - { - if (!Directory.Exists(Folder)) - Directory.CreateDirectory(Folder); - - try - { - UnityEditorInternal.InternalEditorUtility.SaveToSerializedFileAndForget(new[] { settingsInstance }, Path, true); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Can't save user settings!", e); - } - } - - private static ACTkUserSettings LoadInstance() - { - ACTkUserSettings settingsInstance; - - try - { - settingsInstance = (ACTkUserSettings)UnityEditorInternal.InternalEditorUtility.LoadSerializedFileAndForget(Path)[0]; - } - catch (Exception) - { - settingsInstance = null; - } - - return settingsInstance; - } - - private static ACTkUserSettings CreateInstance() - { - var newInstance = CreateInstance(); - return newInstance; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkUserSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkUserSettings.cs.meta deleted file mode 100644 index 6a806dd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/ACTkUserSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 04905b38ab174522a78ec941de8ba4ec -timeCreated: 1657739749 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs deleted file mode 100644 index 177a134..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs +++ /dev/null @@ -1,583 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using Common; - using Detectors; - using EditorCommon.Tools; - using Genuine.CodeHash; - using UnityEditor; - using UnityEditorInternal; - using UnityEngine; -#if UNITY_2021_2_OR_NEWER - using UnityEditor.Build; -#endif - - internal static class SettingsGUI - { - private const string Homepage = "https://codestage.net/uas/actk"; - private const string APILink = "https://codestage.net/uas_files/actk/api/"; - private const string DiscordLink = "https://discord.gg/Ppsb89naWf"; - private const string ForumLink = "https://forum.unity.com/threads/anti-cheat-toolkit-stop-cheaters-easily.196578/"; - private const string ReviewURL = "https://assetstore.unity.com/packages/slug/202695?aid=1011lGBp&pubref=actk#reviews"; - - private static SerializedObject graphicsSettingsAsset; - private static SerializedProperty includedShaders; - - public static void OnGUI() - { - GUITools.Separator(); - DrawSettingsHeader(); - - GUILayout.Space(5f); - DrawIL2CPPSection(); - - EditorGUILayout.Space(); - DrawInjectionSection(); - - EditorGUILayout.Space(); - DrawHashSection(); - - EditorGUILayout.Space(); - DrawWallHackSection(); - - EditorGUILayout.Space(); - DrawConditionalSection(); - - GUILayout.Space(5f); - } - - private static void DrawSettingsHeader() - { - using (new GUILayout.HorizontalScope()) - { - GUILayout.Space(5f); - using (new GUILayout.VerticalScope()) - { - GUILayout.Label("Version: " + ACTk.Version); - - using (new GUILayout.HorizontalScope()) - { - if (GUITools.ImageButton("", "Homepage", Icons.Home)) - Application.OpenURL(Homepage); - - if (GUITools.ImageButton("", "Live Support at Discord", Icons.Discord)) - Application.OpenURL(DiscordLink); - - if (GUITools.ImageButton("", "Forums Support thread", Icons.Forum)) - Application.OpenURL(ForumLink); - - if (GUITools.ImageButton("", "Other Support contacts", Icons.Support)) - Application.OpenURL(ACTk.SupportContact); - - if (GUITools.ImageButton("", "Write a Review at the Asset Store, it will help a lot!", CSEditorIcons.FavoriteIcon)) - { - if (!Event.current.control) - Application.OpenURL(ReviewURL); - else - AssetStore.Open(ReviewURL); - } - - GUILayout.Space(10f); - - if (GUITools.ImageButton("", "Anti-Cheat Toolkit Manual (Readme.pdf)", Icons.Manual)) - EditorTools.OpenReadme(); - - if (GUITools.ImageButton("", "API reference", Icons.API)) - Application.OpenURL(APILink); - - GUILayout.Space(10f); - - if (GUITools.ImageButton("", "About", CSEditorIcons.Help)) - { - EditorUtility.DisplayDialog("About Anti-Cheat Toolkit v" + ACTk.Version, - "Developer: Dmitriy Yukhanov\n" + - "Logo: Daniele Giardini \\m/\n" + - "Icons: Google, Discord\n" + - "Support: my lovely wife, daughters and you! <3\n\n" + - @"¯\_(ツ)_/¯", "Fine!"); - } - } - GUILayout.Space(1f); - } - - GUILayout.FlexibleSpace(); - - var logo = Images.Logo; - if (logo != null) - { - logo.wrapMode = TextureWrapMode.Clamp; - var logoRect = EditorGUILayout.GetControlRect(GUILayout.Width(logo.width), GUILayout.Height(logo.height)); - logoRect.y += 13; - GUI.DrawTexture(logoRect, logo); - } - } - } - - private static void DrawIL2CPPSection() - { - DrawSettingSection("IL2CPP is your friend", - ACTkEditorPrefsSettings.IL2CPPFoldout, - foldout => ACTkEditorPrefsSettings.IL2CPPFoldout = foldout, DrawContent); - - void DrawContent() - { - GUILayout.Label("IL2CPP prevents Mono injections and easy code decompilation. " + - "Also consider obfuscating your metadata to make cheaters cry, see readme for details.", - GUITools.RichLabel); - - GUILayout.Label("Note: IL2CPP is AOT and does not support JIT!", GUITools.RichMiniLabel); - - GUILayout.Space(5f); - - var supported = SettingsUtils.IsIL2CPPSupported(); - GUILayout.Label($"IL2CPP Supported: {CSColorTools.WrapBool(supported)}", - GUITools.RichLabel); - - var enabled = SettingsUtils.IsIL2CPPEnabled(); - GUILayout.Label($"IL2CPP Enabled: {CSColorTools.WrapBool(enabled)}", - GUITools.RichLabel); - - if (SettingsUtils.IsIL2CPPEnabled() || !SettingsUtils.IsIL2CPPSupported()) - return; - - GUILayout.Space(5f); - EditorGUILayout.HelpBox("Use IL2CPP to stop injections & easy code decompilation", - MessageType.Warning, true); - GUILayout.Space(5f); - if (GUILayout.Button(new GUIContent("Switch to IL2CPP"))) - { -#if UNITY_2021_2_OR_NEWER - var namedTarget = NamedBuildTarget.FromBuildTargetGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - PlayerSettings.SetScriptingBackend(namedTarget, - ScriptingImplementation.IL2CPP); -#else - PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup, - ScriptingImplementation.IL2CPP); -#endif - } - } - } - - private static void DrawInjectionSection() - { - DrawSettingSection("Injection Detector", - ACTkEditorPrefsSettings.InjectionFoldout, - foldout => ACTkEditorPrefsSettings.InjectionFoldout = foldout, DrawContent); - - void DrawContent() - { - var enableInjectionDetector = ACTkSettings.Instance.InjectionDetectorEnabled; - - if (SettingsUtils.IsIL2CPPEnabled()) - { - EditorGUILayout.HelpBox("Injection is not possible in IL2CPP,\n" + - "this detector is not needed in IL2CPP builds", MessageType.Info, true); - GUILayout.Space(5f); - } - else if (!InjectionRoutines.IsTargetPlatformCompatible()) - { - EditorGUILayout.HelpBox( - "Injection Detection is only supported in non-IL2CPP Standalone and Android builds", - MessageType.Warning, true); - GUILayout.Space(5f); - } - - using (new GUILayout.HorizontalScope()) - { - EditorGUI.BeginChangeCheck(); - enableInjectionDetector = EditorGUILayout.ToggleLeft(new GUIContent( - "Add mono injection detection support to build", - "Injection Detector checks assemblies against whitelist. " + - "Please enable this option if you're using Injection Detector " + - "and default whitelist will be generated while Unity builds resulting build.\n" + - "Has no effect for IL2CPP or unsupported platforms."), enableInjectionDetector - ); - if (EditorGUI.EndChangeCheck()) - { - ACTkSettings.Instance.InjectionDetectorEnabled = enableInjectionDetector; - } - } - - GUILayout.Space(3); - - if (GUILayout.Button(new GUIContent( - "Edit Custom Whitelist (" + ACTkSettings.Instance.InjectionDetectorWhiteList.Count + ")", - "Fill any external assemblies which are not included into the project to the user-defined whitelist to make Injection Detector aware of them.")) - ) - { - UserWhitelistEditor.ShowWindow(); - } - } - } - - private static void DrawHashSection() - { - DrawSettingSection("Code Hash Generator", - ACTkEditorPrefsSettings.HashFoldout, - foldout => ACTkEditorPrefsSettings.HashFoldout = foldout, DrawContent); - - void DrawContent() - { - var option = ACTkSettings.Instance.PreGenerateBuildHash; - - EditorGUI.BeginChangeCheck(); - option = EditorGUILayout.ToggleLeft( - new GUIContent("Generate code hash on build completion", - "Generates hash after build is finished, prints it to the console & sends it via CodeHashGeneratorPostprocessor."), - option); - if (EditorGUI.EndChangeCheck()) - { - ACTkSettings.Instance.PreGenerateBuildHash = option; - } - - EditorGUILayout.Space(); - - GUILayout.Label( - "Can differ from runtime hash if you post-process code in resulting build (e.g. obfuscate, compress, etc.).", - GUITools.RichLabel); - - GUILayout.Space(5f); - EditorGUILayout.HelpBox( - "Always make sure post-build hash equals runtime one if you're using it for later comparison", - MessageType.Info, true); - - if (!CodeHashGenerator.IsTargetPlatformCompatible()) - { - EditorGUILayout.HelpBox("Current platform is not supported: Windows or Android required", - MessageType.Warning, true); - } - } - } - - private static void DrawWallHackSection() - { - DrawSettingSection("WallHack Detector", - ACTkEditorPrefsSettings.WallHackFoldout, - foldout => ACTkEditorPrefsSettings.WallHackFoldout = foldout, DrawContent, false); - - void DrawContent() - { - DrawShaderPanel(); - GUILayout.Space(5f); - DrawLinkXmlPanel(); - } - - void DrawShaderPanel() - { - using (GUITools.Vertical(GUITools.PanelWithBackground)) - { - GUILayout.Label("Wireframe module shader", EditorStyles.boldLabel); - GUILayout.Space(5f); - GUILayout.Label( - "Wireframe module uses own shader under the hood and it should be included into the build.", - EditorStyles.wordWrappedLabel); - - ReadGraphicsAsset(); - - if (graphicsSettingsAsset != null && includedShaders != null) - { - // outputs whole included shaders list, use for debug - //EditorGUILayout.PropertyField(includedShaders, true); - - var shaderIndex = GetWallhackDetectorShaderIndex(); - - EditorGUI.BeginChangeCheck(); - - GUILayout.Label( - $"Shader status: {CSColorTools.WrapString("included", "not included", shaderIndex != -1)}", - GUITools.RichLabel); - GUILayout.Space(5f); - EditorGUILayout.HelpBox("You don't need to include it if you're not going to use Wireframe module", - MessageType.Info, true); - GUILayout.Space(5f); - - if (shaderIndex != -1) - { - if (GUILayout.Button("Remove shader")) - { - includedShaders.DeleteArrayElementAtIndex(shaderIndex); - includedShaders.DeleteArrayElementAtIndex(shaderIndex); - } - - GUILayout.Space(3); - } - else - { - using (GUITools.Horizontal()) - { - if (GUILayout.Button("Auto Include")) - { - var shader = Shader.Find(WallHackDetector.WireframeShaderName); - if (shader != null) - { - includedShaders.InsertArrayElementAtIndex(includedShaders.arraySize); - var newItem = includedShaders.GetArrayElementAtIndex(includedShaders.arraySize - 1); - newItem.objectReferenceValue = shader; - } - else - { - ACTk.PrintExceptionForSupport($"Can't find {WallHackDetector.WireframeShaderName} shader!"); - } - } - - if (GUILayout.Button("Include manually (see readme.pdf)")) - { - SettingsService.OpenProjectSettings("Project/Graphics"); - } - } - - GUILayout.Space(3); - } - - if (EditorGUI.EndChangeCheck()) - { - graphicsSettingsAsset.ApplyModifiedProperties(); - } - } - else - { - GUILayout.Label("Can't automatically control " + WallHackDetector.WireframeShaderName + - " shader existence at the Always Included Shaders list. Please, manage this manually in Graphics Settings."); - if (GUILayout.Button("Open Graphics Settings")) - { - SettingsService.OpenProjectSettings("Project/Graphics"); - } - } - } - } - - void DrawLinkXmlPanel() - { - using (GUITools.Vertical(GUITools.PanelWithBackground)) - { - GUILayout.Label("IL2CPP Strip Engine Code caution", EditorStyles.boldLabel); - GUILayout.Space(5f); - var linkXmlEnabled = SettingsUtils.IsLinkXmlEnabled(); - if (!linkXmlEnabled) - { - var linkXmlRequired = SettingsUtils.IsLinkXmlRequired(); - if (linkXmlRequired) - { - EditorGUILayout.HelpBox( - "False positives are possible due to IL2CPP Strip Engine Code feature, enable automatic link.xml generation below to prevent it.", - MessageType.Warning); - if (GUILayout.Button("Enable automatic link.xml generation")) - { - SettingsUtils.SwitchSymbol(ACTkEditorConstants.Conditionals.WallhackLinkXML, true); - } - } - else - { - EditorGUILayout.HelpBox( - "False positives are possible due to IL2CPP Strip Engine Code feature but you're safe since either IL2CPP or String Engine Code feature is not active now.", - MessageType.Info); - if (GUILayout.Button("Enable automatic link.xml generation anyway")) - { - SettingsUtils.SwitchSymbol(ACTkEditorConstants.Conditionals.WallhackLinkXML, true); - } - } - } - else - { - EditorGUILayout.HelpBox( - "Automatic link.xml generation enabled, you are safe from possible false positives caused by IL2CPP Strip Engine Code feature.", - MessageType.Info); - if (GUILayout.Button("Disable automatic link.xml generation")) - { - SettingsUtils.SwitchSymbol(ACTkEditorConstants.Conditionals.WallhackLinkXML, false); - } - } - - GUILayout.Label( - $"This setting is duplicated by {ACTkEditorConstants.Conditionals.WallhackLinkXML} conditional symbol in conditional symbols section below", - EditorStyles.wordWrappedMiniLabel); - - } - } - } - - private static void DrawConditionalSection() - { - var header = "Conditional Compilation Symbols"; - if (EditorApplication.isCompiling) - { - header += $" [{CSColorTools.WrapString("compiling...", CSColorTools.ColorKind.Purple)}]"; - } - - DrawSettingSection(header, - ACTkEditorPrefsSettings.ConditionalFoldout, - foldout => ACTkEditorPrefsSettings.ConditionalFoldout = foldout, DrawContent); - - void DrawContent() - { - if (EditorApplication.isCompiling) - GUI.enabled = false; - - GUILayout.Label("Here you may switch conditional compilation symbols used in ACTk.\n" + - "Check Readme for more details on each symbol.", EditorStyles.wordWrappedLabel); - EditorGUILayout.Space(); - - var symbolsData = SettingsUtils.GetSymbolsData(); - - GUILayout.Label("Debug", GUITools.LargeBoldLabel); - GUITools.Separator(); - - DrawSymbol(ref symbolsData.injectionDebug, - ACTkEditorConstants.Conditionals.InjectionDebug, - "Switches the Injection Detector debug."); - DrawSymbol(ref symbolsData.injectionDebugVerbose, - ACTkEditorConstants.Conditionals.InjectionDebugVerbose, - "Switches the Injection Detector verbose debug level."); - DrawSymbol(ref symbolsData.injectionDebugParanoid, - ACTkEditorConstants.Conditionals.InjectionDebugParanoid, - "Switches the Injection Detector paranoid debug level."); - DrawSymbol(ref symbolsData.wallhackDebug, - ACTkEditorConstants.Conditionals.WallhackDebug, - "Switches the WallHack Detector debug - you'll see the WallHack objects in scene and get extra information in console."); - DrawSymbol(ref symbolsData.detectionBacklogs, - ACTkEditorConstants.Conditionals.DetectionBacklogs, - "Enables additional logs in some detectors to make it easier to debug false positives."); - DrawSymbol(ref symbolsData.genericDevLogs, - ACTkEditorConstants.Conditionals.GenericDevLogs, - "Enables additional generic development logs all across the toolkit (used mainly for development purposes)."); - - EditorGUILayout.Space(); - GUILayout.Label("Third-party related", GUITools.LargeBoldLabel); - GUITools.Separator(); - - DrawSymbol(ref symbolsData.exposeThirdPartyIntegration, - ACTkEditorConstants.Conditionals.ThirdPartyIntegration, - "Enable to let other third-party code in project know you have ACTk added."); - DrawSymbol(ref symbolsData.newtonsoftJson, - ACTkEditorConstants.Conditionals.NewtonsoftJson, - "Enables Newtonsoft Json Converter for the Obscured Types if you're not using com.unity.nuget.newtonsoft-json Unity package."); - - EditorGUILayout.Space(); - GUILayout.Label("Compatibility", GUITools.LargeBoldLabel); - GUITools.Separator(); - - DrawSymbol(ref symbolsData.wallhackLinkXML, - ACTkEditorConstants.Conditionals.WallhackLinkXML, - "Enables automatic link.xml generation to prevent stripping of components required by WallHack Detector.\nSee details at WallHack Detector settings section above."); - DrawSymbol(ref symbolsData.excludeObfuscation, - ACTkEditorConstants.Conditionals.ExcludeObfuscation, - "Enable if you use Unity-unaware obfuscators which support ObfuscationAttribute to help avoid names corruption."); - DrawSymbol(ref symbolsData.preventReadPhoneState, - ACTkEditorConstants.Conditionals.PreventReadPhoneState, - "Disables ObscuredPrefs Lock To Device functionality."); - DrawSymbol(ref symbolsData.preventInternetPermission, - ACTkEditorConstants.Conditionals.PreventInternetPermission, - "Disables TimeCheatingDetector functionality."); - DrawSymbol(ref symbolsData.obscuredAutoMigration, - ACTkEditorConstants.Conditionals.ObscuredAutoMigration, - "Enables automatic migration of ObscuredFloat and ObscuredDouble instances from the ACTk 1.5.2.0-1.5.8.0 to the 1.5.9.0+ format. Reduces these types performance a bit."); - DrawSymbol(ref symbolsData.usExportCompatible, - ACTkEditorConstants.Conditionals.UsExportCompatible, - "Enables US Encryption Export Regulations compatibility mode so ACTk do not force you to declare you're using exempt encryption when publishing your application to the Apple App Store."); - - GUI.enabled = true; - } - } - - private static void DrawSettingSection(string caption, bool foldout, Action foldoutCallback, Action drawContentCallback, bool drawBackground = true) - { - using (var changed = new EditorGUI.ChangeCheckScope()) - { - var fold = GUITools.DrawFoldHeader(caption, foldout); - if (changed.changed) - { - foldout = fold; - foldoutCallback(foldout); - } - } - - if (!foldout) return; - - GUILayout.Space(3f); - using (GUITools.Horizontal()) - { - GUILayout.Space(20f); - - using (GUITools.Vertical(drawBackground ? GUITools.PanelWithBackground : GUIStyle.none)) - { - drawContentCallback(); - GUILayout.Space(3); - } - GUILayout.Space(5f); - } - } - - public static bool IsWallhackDetectorShaderIncluded() - { - var result = false; - - ReadGraphicsAsset(); - if (GetWallhackDetectorShaderIndex() != -1) - result = true; - - return result; - } - - private static void ReadGraphicsAsset() - { - if (graphicsSettingsAsset != null) return; - - var assets = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/GraphicsSettings.asset"); - if (assets.Length > 0) - graphicsSettingsAsset = new SerializedObject(assets[0]); - - if (graphicsSettingsAsset != null) - { - includedShaders = graphicsSettingsAsset.FindProperty("m_AlwaysIncludedShaders"); - if (includedShaders == null) - ACTk.PrintExceptionForSupport("Couldn't find m_AlwaysIncludedShaders property"); - } - else - { - ACTk.PrintExceptionForSupport("Couldn't find GraphicsSettings asset"); - } - } - - private static int GetWallhackDetectorShaderIndex() - { - if (graphicsSettingsAsset == null || includedShaders == null) return -1; - - var result = -1; - graphicsSettingsAsset.Update(); - - var itemsCount = includedShaders.arraySize; - for (var i = 0; i < itemsCount; i++) - { - var arrayItem = includedShaders.GetArrayElementAtIndex(i); - if (arrayItem.objectReferenceValue != null) - { - var shader = (Shader)(arrayItem.objectReferenceValue); - - if (shader.name == WallHackDetector.WireframeShaderName) - { - result = i; - break; - } - } - } - - return result; - } - - private static void DrawSymbol(ref bool field, string symbol, string hint) - { - EditorGUI.BeginChangeCheck(); - field = EditorGUILayout.ToggleLeft(new GUIContent(symbol, hint), field); - if (EditorGUI.EndChangeCheck()) - { - SettingsUtils.SwitchSymbol(symbol, field); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs.meta deleted file mode 100644 index 38781a1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: b26f8a79ff8f40aeba8abe91f4d3c9b9 -timeCreated: 1557586094 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsProviderWrapper.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsProviderWrapper.cs deleted file mode 100644 index 61e1ab6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsProviderWrapper.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System.Collections.Generic; - using UnityEditor; - - internal static class SettingsProviderWrapper - { - [SettingsProvider] - public static SettingsProvider CreateMyCustomSettingsProvider() - { - var provider = new SettingsProvider(ACTkEditorConstants.SettingsProviderPath, SettingsScope.Project) - { - label = "Anti-Cheat Toolkit", - guiHandler = searchContext => - { - SettingsGUI.OnGUI(); - }, - - keywords = new HashSet(new[] {"codestage", "Anti", "Cheat", "Toolkit", "Injection", "Hash", "Wall", "Hack", "ACTk", "Patch", "Protect", "Detect" }) - }; - - return provider; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsProviderWrapper.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsProviderWrapper.cs.meta deleted file mode 100644 index 976829b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsProviderWrapper.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4cad2b15267a468e893f905d662976b2 -timeCreated: 1557591437 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsUtils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsUtils.cs deleted file mode 100644 index 7517cb0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsUtils.cs +++ /dev/null @@ -1,248 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using Common; - using UnityEditor; - using UnityEngine; - using Object = UnityEngine.Object; -#if UNITY_2021_2_OR_NEWER - using UnityEditor.Build; -#endif - - internal static class SettingsUtils - { - private static SymbolsData cachedSymbolsData; - - public static bool IsIL2CPPEnabled() - { - // ReSharper disable once ConvertIfStatementToReturnStatement - it's not redundant ;) - if (IsScriptingBackendIL2CPP()) - return true; - -#if ENABLE_IL2CPP - return true; -#else - return false; -#endif - - bool IsScriptingBackendIL2CPP() - { -#if UNITY_2021_2_OR_NEWER - var namedTarget = NamedBuildTarget.FromBuildTargetGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - var scriptingBackend = PlayerSettings.GetScriptingBackend(namedTarget); -#else - var scriptingBackend = PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup); -#endif - return scriptingBackend == ScriptingImplementation.IL2CPP; - } - } - - public static bool IsIL2CPPSupported() - { - return IsIL2CPPEnabled() || ReflectionTools.IsScriptingImplementationSupported(ScriptingImplementation.IL2CPP, EditorUserBuildSettings.selectedBuildTargetGroup); - } - - public static bool IsLinkXmlRequired() - { - return IsIL2CPPEnabled() && PlayerSettings.stripEngineCode; - } - - public static bool IsLinkXmlEnabled() - { - return GetSymbolsData().wallhackLinkXML; - } - - public static SymbolsData GetSymbolsData() - { - var groups = (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup)); - foreach (var buildTargetGroup in groups) - { - if (buildTargetGroup == BuildTargetGroup.Unknown) continue; - if (IsBuildTargetGroupNameObsolete(buildTargetGroup.ToString())) continue; - - try - { - var symbols = GetConditionalSymbolsForPlatform(buildTargetGroup); - - cachedSymbolsData.wallhackLinkXML |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.WallhackLinkXML); - cachedSymbolsData.excludeObfuscation |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.ExcludeObfuscation); - cachedSymbolsData.preventReadPhoneState |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.PreventReadPhoneState); - cachedSymbolsData.preventInternetPermission |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.PreventInternetPermission); - cachedSymbolsData.obscuredAutoMigration |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.ObscuredAutoMigration); - cachedSymbolsData.exposeThirdPartyIntegration |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.ThirdPartyIntegration); - cachedSymbolsData.usExportCompatible |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.UsExportCompatible); - cachedSymbolsData.newtonsoftJson |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.NewtonsoftJson); - - cachedSymbolsData.injectionDebug |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.InjectionDebug); - cachedSymbolsData.injectionDebugVerbose |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.InjectionDebugVerbose); - cachedSymbolsData.injectionDebugParanoid |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.InjectionDebugParanoid); - cachedSymbolsData.wallhackDebug |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.WallhackDebug); - cachedSymbolsData.detectionBacklogs |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.DetectionBacklogs); - cachedSymbolsData.genericDevLogs |= GetSymbol(symbols, ACTkEditorConstants.Conditionals.GenericDevLogs); - } - catch (Exception) - { - // ignoring obsolete ones - } - } - - return cachedSymbolsData; - } - - private static string GetConditionalSymbolsForPlatform(BuildTargetGroup buildTargetGroup) - { -#if UNITY_2021_2_OR_NEWER - var namedTarget = NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); - return PlayerSettings.GetScriptingDefineSymbols(namedTarget); -#else - return PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); -#endif - } - - private static bool GetSymbol(string symbols, string symbol) - { - var result = false; - - if (symbols == symbol) - result = true; - else if (symbols.StartsWith(symbol + ';')) - result = true; - else if (symbols.EndsWith(';' + symbol)) - result = true; - else if (symbols.Contains(';' + symbol + ';')) - result = true; - - return result; - } - - public static void SwitchSymbol(string symbol, bool active) - { - var groups = (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup)); - - // this is required to get names for obsolete items alternatives like iOS instead of deprecated iPhone - var names = Enum.GetNames(typeof(BuildTargetGroup)); - - for (var i = 0; i < groups.Length; i++) - { - var buildTargetGroup = groups[i]; - var buildTargetName = names[i]; - - if (buildTargetGroup == BuildTargetGroup.Unknown) continue; - if (IsBuildTargetGroupNameObsolete(buildTargetName)) continue; - - try - { - var symbols = GetConditionalSymbolsForPlatform(buildTargetGroup); - - if (active) - AddSymbol(ref symbols, symbol); - else - RemoveSymbol(ref symbols, symbol); - -#if UNITY_2021_2_OR_NEWER - var namedTarget = NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); - PlayerSettings.SetScriptingDefineSymbols(namedTarget, symbols); -#else - PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, symbols); -#endif - } - catch (Exception) - { - // ignoring obsolete ones - } - } - } - - private static void AddSymbol(ref string symbols, string symbol) - { - if (symbols.Length == 0) - { - symbols = symbol; - } - else - { - if (symbols.EndsWith(";")) - symbols += symbol; - else - symbols += ';' + symbol; - } - } - - private static void RemoveSymbol(ref string symbols, string symbol) - { - if (symbols == symbol) - symbols = string.Empty; - else if (symbols.StartsWith(symbol + ';')) - symbols = symbols.Remove(0, symbol.Length + 1); - else if (symbols.EndsWith(';' + symbol)) - symbols = symbols.Remove(symbols.LastIndexOf(';' + symbol, StringComparison.Ordinal), symbol.Length + 1); - else if (symbols.Contains(';' + symbol + ';')) - symbols = symbols.Replace(';' + symbol + ';', ";"); - } - - private static bool IsBuildTargetGroupNameObsolete(string name) - { - var fi = typeof(BuildTargetGroup).GetField(name); - var attributes = (ObsoleteAttribute[])fi.GetCustomAttributes(typeof(ObsoleteAttribute), false); - return attributes.Length > 0; - } - - public static bool IsPhysicsUsesTemporalSolver() - { - var solverTypeProperty = GetPhysicsSolverTypeProperty(); - if (solverTypeProperty == null) - return false; - - return solverTypeProperty.intValue == 1; - } - - private static Object LoadDynamicManager() - { - var dynamicsManager = AssetDatabase.LoadAssetAtPath("ProjectSettings/DynamicsManager.asset"); - if (dynamicsManager == null) - ACTk.PrintExceptionForSupport("Couldn't find the DynamicsManager"); - - return dynamicsManager; - } - - private static SerializedProperty GetPhysicsSolverTypeProperty() - { - var dynamicsManager = LoadDynamicManager(); - if (dynamicsManager == null) - return null; - - var so = new SerializedObject(dynamicsManager); - var field = so.FindProperty("m_SolverType"); - - if (field == null) - ACTk.PrintExceptionForSupport("Couldn't find the m_SolverType field in the DynamicsManager class!"); - - return field; - } - - public static void ShowPhysicsSettings() - { - SettingsService.OpenProjectSettings("Project/Physics"); - } - - public static void ShowSolverTypesProperty() - { - ShowPhysicsSettings(); - -#if UNITY_2021_3_OR_NEWER - EditorApplication.delayCall += () => - { - var solverTypeProperty = GetPhysicsSolverTypeProperty(); - if (solverTypeProperty != null) - Highlighter.Highlight("Project Settings", solverTypeProperty.propertyPath, HighlightSearchMode.Identifier); - }; -#endif - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsUtils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsUtils.cs.meta deleted file mode 100644 index b84fcee..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsUtils.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 45ebf9a6511c49819d3a64fc4ca0eb03 -timeCreated: 1557586492 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsValidator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsValidator.cs deleted file mode 100644 index bd58096..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsValidator.cs +++ /dev/null @@ -1,138 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode.Validation -{ - using Detectors; - using UnityEditor; - - [InitializeOnLoad] - internal static class SettingsValidator - { - private static bool injectionValidated; - private static bool wallhackValidated; - - static SettingsValidator() - { - EditorApplication.hierarchyChanged += OnHierarchyChanged; - } - - private static void OnHierarchyChanged() - { - if (!injectionValidated && !ACTkSettings.Instance.DisableInjectionDetectorValidation) - { - var instance = InjectionDetector.Instance; - if (instance != null) - { - if (InjectionRoutines.IsInjectionPossible()) - { - if (!ACTkSettings.Instance.InjectionDetectorEnabled) - { - var result = EditorUtility.DisplayDialogComplex("Anti-Cheat Toolkit Validation", - "ACTk noticed you're using Injection Detector while having build injection detection support disabled.\n" + - "It should be enabled in order to work properly.\nWould you like to enable it now?", - "Yes", "Open Settings", "No, never ask again"); - - switch (result) - { - case 0: - ACTkSettings.Instance.InjectionDetectorEnabled = true; - break; - case 1: - ACTkSettings.Show(); - injectionValidated = true; - return; - default: - ACTkSettings.Instance.DisableInjectionDetectorValidation = true; - break; - } - } - } - } - injectionValidated = true; - } - - if (!wallhackValidated && - (!ACTkSettings.Instance.DisableWallhackDetectorShaderValidation || - !ACTkSettings.Instance.DisableWallhackDetectorLinkXmlValidation || - !ACTkSettings.Instance.DisableWallhackDetectorPhysicsValidation)) - { - var instance = WallHackDetector.Instance; - if (instance != null) - { - if (!ACTkSettings.Instance.DisableWallhackDetectorShaderValidation && - instance.CheckWireframe && - !SettingsGUI.IsWallhackDetectorShaderIncluded()) - { - var result = EditorUtility.DisplayDialog("Anti-Cheat Toolkit Validation", - "ACTk noticed you're using WallHack Detector with Wireframe option enabled but you have no required shader added" + - " to the Always Included Shaders.\n" + - "Would you like to exit Play Mode and open Settings to include it now?", - "Yes", "No, never ask again"); - - if (result) - { - EditorApplication.isPlaying = false; - ACTkEditorPrefsSettings.FocusWallhackFoldout(); - ACTkSettings.Show(); - wallhackValidated = true; - return; - } - - ACTkSettings.Instance.DisableWallhackDetectorShaderValidation = true; - } - - if (!ACTkSettings.Instance.DisableWallhackDetectorPhysicsValidation && - (instance.CheckRigidbody || instance.CheckController) && - SettingsUtils.IsPhysicsUsesTemporalSolver()) - { - var result = EditorUtility.DisplayDialog("Anti-Cheat Toolkit Validation", - "ACTk noticed you're using WallHack Detector with either Rigidbody or Character Controller option enabled while having Project Settings > Physics > Solver Type property set to the Temporal Gauss Seidel value.\n\n" + - "This can lead to the physics anomalies and unpredicted behavior due to how this solver operates while having few continuously colliding objects in the scene (which is going to happen when you use the WallHack Detector with current options).\n\n" + - "It's recommended to switch the Solver Type to the Projected Gauss Seidel in such case.\n" + - "Would you like to exit Play Mode and open Settings to switch it now?", - "Yes", "No, never ask again"); - - if (result) - { - EditorApplication.isPlaying = false; - SettingsUtils.ShowSolverTypesProperty(); - wallhackValidated = true; - return; - } - - ACTkSettings.Instance.DisableWallhackDetectorPhysicsValidation = true; - } - - if (!ACTkSettings.Instance.DisableWallhackDetectorLinkXmlValidation && - SettingsUtils.IsLinkXmlRequired() && - !SettingsUtils.IsLinkXmlEnabled()) - { - var result = EditorUtility.DisplayDialog("Anti-Cheat Toolkit Validation", - "ACTk noticed you're using WallHack Detector while having IL2CPP's " + - "Strip Engine Code setting enabled which can lead to stripping of components " + - "required by WallHack Detector causing false positives.\n\n" + - "To prevent such stripping, components should be added to the link.xml so linker could exclude them from stripping.\n" + - "Would you like to exit Play Mode and open Settings to enable automatic link.xml generation?", - "Yes", "No, never ask again"); - - if (result) - { - EditorApplication.isPlaying = false; - ACTkEditorPrefsSettings.FocusWallhackFoldout(); - ACTkSettings.Show(); - wallhackValidated = true; - return; - } - - ACTkSettings.Instance.DisableWallhackDetectorLinkXmlValidation = true; - } - } - wallhackValidated = true; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsValidator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsValidator.cs.meta deleted file mode 100644 index e54a596..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsValidator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 78821826b15a44e79ed6c8549e3c1f1d -timeCreated: 1557605995 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SymbolsData.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SymbolsData.cs deleted file mode 100644 index 696492c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SymbolsData.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - internal struct SymbolsData - { - public bool wallhackLinkXML; - public bool excludeObfuscation; - public bool preventReadPhoneState; - public bool preventInternetPermission; - public bool obscuredAutoMigration; - public bool exposeThirdPartyIntegration; - public bool usExportCompatible; - public bool newtonsoftJson; - - public bool injectionDebug; - public bool injectionDebugVerbose; - public bool injectionDebugParanoid; - public bool wallhackDebug; - public bool detectionBacklogs; - public bool genericDevLogs; - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SymbolsData.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SymbolsData.cs.meta deleted file mode 100644 index 7d13527..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SymbolsData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8259422d2c3f43a6a50862621be7436d -timeCreated: 1557586522 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools.meta deleted file mode 100644 index 85f1764..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b8ffd81fe391c4c4d99936ae7a0bbc08 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/AsyncHelpers.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/AsyncHelpers.cs deleted file mode 100644 index 5190263..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/AsyncHelpers.cs +++ /dev/null @@ -1,129 +0,0 @@ -// -// original source: https://stackoverflow.com/a/5097066/929246 -// - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace CodeStage.AntiCheat.EditorCode -{ - internal static class AsyncHelpers - { - public static void RunSync(Func task) - { - var oldContext = SynchronizationContext.Current; - var synch = new ExclusiveSynchronizationContext(); - SynchronizationContext.SetSynchronizationContext(synch); - synch.Post(async _ => - { - try - { - await task(); - } - catch (Exception e) - { - synch.InnerException = e; - throw; - } - finally - { - synch.EndMessageLoop(); - } - }, null); - synch.BeginMessageLoop(); - - SynchronizationContext.SetSynchronizationContext(oldContext); - } - - public static T RunSync(Func> task) - { - var oldContext = SynchronizationContext.Current; - var synch = new ExclusiveSynchronizationContext(); - SynchronizationContext.SetSynchronizationContext(synch); - T ret = default(T); - synch.Post(async _ => - { - try - { - ret = await task(); - } - catch (Exception e) - { - synch.InnerException = e; - throw; - } - finally - { - synch.EndMessageLoop(); - } - }, null); - synch.BeginMessageLoop(); - SynchronizationContext.SetSynchronizationContext(oldContext); - return ret; - } - - private class ExclusiveSynchronizationContext : SynchronizationContext - { - private bool done; - public Exception InnerException { get; set; } - - private readonly AutoResetEvent workItemsWaiting = new AutoResetEvent(false); - private readonly Queue> items = new Queue>(); - - public override void Send(SendOrPostCallback d, object state) - { - throw new NotSupportedException("We cannot send to our same thread"); - } - - public override void Post(SendOrPostCallback d, object state) - { - lock (items) - { - items.Enqueue(Tuple.Create(d, state)); - } - - workItemsWaiting.Set(); - } - - public void EndMessageLoop() - { - Post(_ => done = true, null); - } - - public void BeginMessageLoop() - { - while (!done) - { - Tuple task = null; - lock (items) - { - if (items.Count > 0) - { - task = items.Dequeue(); - } - } - - if (task != null) - { - task.Item1(task.Item2); - if (InnerException != null) // the method threw an exeption - { - throw new AggregateException("AsyncHelpers.Run method threw an exception.", InnerException); - } - } - else - { - workItemsWaiting.WaitOne(); - } - } - } - - public override SynchronizationContext CreateCopy() - { - return this; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/AsyncHelpers.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/AsyncHelpers.cs.meta deleted file mode 100644 index 7cd42d8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/AsyncHelpers.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6f7a87b8e9d64a87bfeac78cba14813a -timeCreated: 1683630296 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/DetectorTools.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/DetectorTools.cs deleted file mode 100644 index 4e5869c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/DetectorTools.cs +++ /dev/null @@ -1,90 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using Common; - using UnityEditor; - using UnityEngine; - - internal static class DetectorTools - { - public static void SetupDetectorInScene() where T : KeepAliveBehaviour - { -#if UNITY_2023_1_OR_NEWER - var component = Object.FindAnyObjectByType(); -#else - var component = Object.FindObjectOfType(); -#endif - var detectorName = typeof(T).Name; - - if (component != null) - { - if (component.gameObject.name == ContainerHolder.ContainerName) - { - EditorUtility.DisplayDialog(detectorName + " already exists!", - detectorName + " already exists in scene and correctly placed on object \"" + ContainerHolder.ContainerName + - "\"", "OK"); - } - else - { - var dialogResult = EditorUtility.DisplayDialogComplex(detectorName + " already exists!", - detectorName + " already exists in scene and placed on object \"" + component.gameObject.name + - "\". Do you wish to move it to the Game Object \"" + ContainerHolder.ContainerName + - "\" or delete it from scene at all?", "Move", "Delete", "Cancel"); - switch (dialogResult) - { - case 0: - var container = GameObject.Find(ContainerHolder.ContainerName); - if (container == null) - { - container = new GameObject(ContainerHolder.ContainerName); - } - - var newComponent = container.AddComponent(); - EditorUtility.CopySerialized(component, newComponent); - DestroyDetectorImmediate(component); - break; - case 1: - DestroyDetectorImmediate(component); - break; - default: - Debug.LogError("Unknown result from the EditorUtility.DisplayDialogComplex API!"); - break; - } - } - } - else - { - var container = GameObject.Find(ContainerHolder.ContainerName); - if (container == null) - { - container = new GameObject(ContainerHolder.ContainerName); - - Undo.RegisterCreatedObjectUndo(container, "Create " + ContainerHolder.ContainerName); - } - - Undo.AddComponent(container); - - EditorUtility.DisplayDialog(detectorName + " added!", - detectorName + " successfully added to the object \"" + ContainerHolder.ContainerName + "\"", "OK"); - Selection.activeGameObject = container; - } - } - - private static void DestroyDetectorImmediate(Component component) where T: KeepAliveBehaviour - { - if (component.transform.childCount == 0 && component.GetComponentsInChildren(true).Length <= 2) - { - Object.DestroyImmediate(component.gameObject); - } - else - { - Object.DestroyImmediate(component); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/DetectorTools.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/DetectorTools.cs.meta deleted file mode 100644 index d3a5c2d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/DetectorTools.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2efcce1fc5ffdd740845b9df0f9cd7ae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/EditorTools.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/EditorTools.cs deleted file mode 100644 index 6ea3270..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/EditorTools.cs +++ /dev/null @@ -1,447 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using UnityEditor.SceneManagement; -using UnityEngine.SceneManagement; - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Collections.Generic; - using System.IO; - using Common; - using UnityEditor; - using UnityEngine; - using UnityEngine.Events; - using Object = UnityEngine.Object; - - internal delegate bool ProcessSerializedProperty(Object target, SerializedProperty sp, string location, string type); - - internal static class EditorTools - { - private static SerializedObject audioManager; - - #region files and directories - - private static string directory; - - public static void DeleteFile(string path) - { - if (!File.Exists(path)) return; - RemoveReadOnlyAttribute(path); - File.Delete(path); - } - - public static void RemoveDirectoryIfEmpty(string directoryName) - { - if (Directory.Exists(directoryName) && IsDirectoryEmpty(directoryName)) - { - FileUtil.DeleteFileOrDirectory(directoryName); - var metaFile = AssetDatabase.GetTextMetaFilePathFromAssetPath(directoryName); - if (File.Exists(metaFile)) - { - FileUtil.DeleteFileOrDirectory(metaFile); - } - } - } - - public static bool IsDirectoryEmpty(string path) - { - var dirs = Directory.GetDirectories(path); - var files = Directory.GetFiles(path); - return dirs.Length == 0 && files.Length == 0; - } - - public static string GetACTkDirectory() - { - if (!string.IsNullOrEmpty(directory)) - { - return directory; - } - - directory = ACTkMarker.GetAssetPath(); - - if (!string.IsNullOrEmpty(directory)) - { - if (directory.IndexOf("Editor/Scripts/ACTkMarker.cs", StringComparison.Ordinal) >= 0) - { - directory = directory.Replace("Editor/Scripts/ACTkMarker.cs", ""); - } - else - { - directory = null; - ACTk.PrintExceptionForSupport("Looks like Anti-Cheat Toolkit is placed in project incorrectly!"); - } - } - else - { - directory = null; - ACTk.PrintExceptionForSupport("Can't locate the Anti-Cheat Toolkit directory!"); - } - return directory; - } - - #endregion - - public static bool CheckUnityEventHasActivePersistentListener(SerializedProperty unityEvent) - { - if (unityEvent == null) return false; - - var calls = unityEvent.FindPropertyRelative("m_PersistentCalls.m_Calls"); - if (calls == null) - { - ACTk.PrintExceptionForSupport("Can't find Unity Event calls!"); - return false; - } - if (!calls.isArray) - { - ACTk.PrintExceptionForSupport("Looks like Unity Event calls are not array anymore!"); - return false; - } - - var result = false; - - var callsCount = calls.arraySize; - for (var i = 0; i < callsCount; i++) - { - var call = calls.GetArrayElementAtIndex(i); - - var targetProperty = call.FindPropertyRelative("m_Target"); - var methodNameProperty = call.FindPropertyRelative("m_MethodName"); - var callStateProperty = call.FindPropertyRelative("m_CallState"); - - if (targetProperty != null && methodNameProperty != null && callStateProperty != null && - targetProperty.propertyType == SerializedPropertyType.ObjectReference && - methodNameProperty.propertyType == SerializedPropertyType.String && - callStateProperty.propertyType == SerializedPropertyType.Enum) - { - var target = targetProperty.objectReferenceValue; - var methodName = methodNameProperty.stringValue; - var callState = (UnityEventCallState)callStateProperty.enumValueIndex; - - if (target != null && !string.IsNullOrEmpty(methodName) && callState != UnityEventCallState.Off) - { - result = true; - break; - } - } - else - { - ACTk.PrintExceptionForSupport("Can't parse Unity Event call!"); - } - } - return result; - } - - public static void RemoveReadOnlyAttribute(string path) - { - var attributes = File.GetAttributes(path); - if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) - File.SetAttributes(path, attributes & ~FileAttributes.ReadOnly); - } - - public static string[] FindLibrariesAt(string folder, bool recursive = true) - { - folder = folder.Replace('\\', '/'); - - if (!Directory.Exists(folder)) - { - return new string[0]; - } - - var allFiles = Directory.GetFiles(folder, "*", recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); - var result = new List(); - - foreach (var file in allFiles) - { - var extension = Path.GetExtension(file); - if (string.IsNullOrEmpty(extension)) - { - continue; - } - - if (extension.Equals(".dll", StringComparison.OrdinalIgnoreCase)) - { - var path = file.Replace('\\', '/'); - result.Add(path); - } - } - - return result.ToArray(); - } - - public static void OpenReadme() - { - var defaultReadmePath = Path.Combine(GetACTkDirectory(), "Readme.pdf"); - var loadedReadme = AssetDatabase.LoadMainAssetAtPath(defaultReadmePath); - AssetDatabase.OpenAsset(loadedReadme); - } - - public static Object GetPingableObject(Object target) - { - if (!AssetDatabase.Contains(target)) - return target; - - if (!(target is Component component)) - return target; - - target = component.gameObject; - - if (PrefabUtility.IsPartOfAnyPrefab(target)) - { - var asset = PrefabUtility.GetCorrespondingObjectFromSource(target); - if (asset != null) - target = asset; - } - - return target; - } - - public static bool IsAudioManagerEnabled() - { - return !GetUpdatedAudioManagerDisableAudioProperty().boolValue; - } - -#if UNITY_2021_3_OR_NEWER - public static string GetAudioManagerEnabledPropertyPath() - { - return GetUpdatedAudioManagerDisableAudioProperty().propertyPath; - } -#endif - - private static SerializedProperty GetUpdatedAudioManagerDisableAudioProperty() - { - if (audioManager == null) - { - var asset = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/AudioManager.asset")[0]; - audioManager = new SerializedObject(asset); - } - - audioManager.Update(); - return audioManager.FindProperty("m_DisableAudio"); - } - - #region Trversal - - public static void TraverseSerializedScriptsAssets(ProcessSerializedProperty itemCallback, string[] typesFilter) - { - var touchedCount = 0; - var scannedCont = 0; - - try - { - const string progressHeader = "ACTk: Looking through assets"; - var targets = new Dictionary(); - - EditorUtility.DisplayProgressBar(progressHeader, "Collecting data...", 0); - - AssetDatabase.SaveAssets(); - - GetScriptingObjects("t:ScriptableObject", true, ref targets); - GetScriptingObjects("t:Prefab", false, ref targets); - - var count = targets.Count; - foreach (var target in targets) - { - if (EditorUtility.DisplayCancelableProgressBar(progressHeader, - "Item " + (scannedCont + 1) + " from " + count, - scannedCont / (float)count)) - { - Debug.Log(ACTk.LogPrefix + "operation canceled by user."); - break; - } - - var unityObject = target.Key; - - var so = new SerializedObject(unityObject); - var modified = ProcessObject(unityObject, so, target.Value, typesFilter, itemCallback); - - if (modified) - { - touchedCount++; - so.ApplyModifiedProperties(); - } - - scannedCont++; - } - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Something went wrong while traversing objects!", e); - } - finally - { - AssetDatabase.SaveAssets(); - EditorUtility.ClearProgressBar(); - } - - Debug.Log($"{ACTk.LogPrefix}Objects modified: {touchedCount}, scanned: {scannedCont}"); - } - - public static void TraverseSerializedScriptsInScenes(ProcessSerializedProperty itemCallback, string[] typesFilter) - { - var touchedCount = 0; - var scannedCont = 0; - - try - { - const string progressHeader = "ACTk: Looking through scenes"; - - EditorUtility.DisplayProgressBar(progressHeader, "Collecting data...", 0); - - for (var i = 0; i < SceneManager.sceneCount; i++) - { - var scene = SceneManager.GetSceneAt(i); - var roots = scene.GetRootGameObjects(); - var count = roots.Length; - - for (var j = 0; j < count; j++) - { - var root = roots[j]; - if (EditorUtility.DisplayCancelableProgressBar(progressHeader, - "Item " + (j + 1) + " from " + count, - j / (float)count)) - { - Debug.Log(ACTk.LogPrefix + "operation canceled by user."); - break; - } - - var components = root.GetComponentsInChildren(true); - - foreach (var component in components) - { - if (component == null) continue; - var so = new SerializedObject(component); - var modified = ProcessObject(component, so, GetLocation(scene.path, component), typesFilter, itemCallback); - if (modified) - { - EditorSceneManager.MarkSceneDirty(component.gameObject.scene); - touchedCount++; - so.ApplyModifiedProperties(); - } - - scannedCont++; - } - } - } - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Something went wrong while traversing objects!", e); - } - finally - { - if (touchedCount > 0) - { - EditorUtility.DisplayDialog($"Objects modified: {touchedCount}", - "Please save your scenes to keep the changes made to the objects.", "Fine"); - EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo(); - } - - AssetDatabase.SaveAssets(); - EditorUtility.ClearProgressBar(); - } - - Debug.Log($"{ACTk.LogPrefix}Objects modified: {touchedCount}, scanned: {scannedCont}"); - } - - private static bool GetScriptingObjects(string filter, bool loadAll, ref Dictionary results) - { - var anythingFound = false; - var assets = AssetDatabase.FindAssets(filter); - var count = assets.Length; - for (var i = 0; i < count; i++) - { - var guid = assets[i]; - var path = AssetDatabase.GUIDToAssetPath(guid); - if (!path.StartsWith("assets", StringComparison.OrdinalIgnoreCase)) continue; - - if (loadAll) - { - var objects = AssetDatabase.LoadAllAssetsAtPath(path); - foreach (var unityObject in objects) - { - if (unityObject == null) continue; - if (unityObject.name == "Deprecated EditorExtensionImpl") continue; - results.Add(unityObject, $"Path: {path}\n" + - $"Object: {unityObject.name} (InstanceID {unityObject.GetInstanceID()})"); - anythingFound = true; - } - } - else - { - var root = AssetDatabase.LoadMainAssetAtPath(path) as GameObject; - if (root == null) continue; - var components = root.GetComponentsInChildren(true); - foreach (var component in components) - { - if (component == null) continue; - results.Add(component, GetLocation(path, component)); - anythingFound = true; - } - } - } - - return anythingFound; - } - - private static bool ProcessObject(Object target, SerializedObject so, string location, string[] typesFilter, - ProcessSerializedProperty callback) - { - var modified = false; - - var sp = so.GetIterator(); - if (sp == null) - return false; - - while (sp.NextVisible(true)) - { - if (sp.propertyType != SerializedPropertyType.Generic) - continue; - var type = sp.type; - if (Array.IndexOf(typesFilter, type) == -1) - continue; - if (sp.isArray) - continue; - - modified |= callback(target, sp, location, type); - } - - return modified; - } - - #endregion - - private static string GetLocation(string path, Component component) - { - return $"Path: {path}\n" + - $"Transform: {GetFullTransformPath(component.transform)}\n" + - $"Component: {GetComponentName(component)} (InstanceID {component.GetInstanceID()})"; - - string GetComponentName(Component target) - { - var result = target.GetType().Name; - - if ((target.hideFlags & HideFlags.HideInInspector) != 0) - result += " (HideInInspector)"; - - return result; - } - - string GetFullTransformPath(Transform transform, Transform stopAt = null) - { - var transformPath = transform.name; - while (transform.parent != null) - { - transform = transform.parent; - if (transform == stopAt) break; - transformPath = transform.name + "/" + transformPath; - } - return transformPath; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/EditorTools.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/EditorTools.cs.meta deleted file mode 100644 index 654dcc0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/EditorTools.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8ea824ce9fb98314d8b42d371d177b05 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/GUITools.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/GUITools.cs deleted file mode 100644 index f2f2b61..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/GUITools.cs +++ /dev/null @@ -1,442 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using Common; - using UnityEditor; - using UnityEngine; - - internal static class GUITools - { - private static GUIStyle iconButtonStyle; - public static GUIStyle IconButtonStyle - { - get - { - Init(); - return iconButtonStyle; - } - } - - private static GUIStyle lineStyle; - public static GUIStyle LineStyle - { - get - { - Init(); - return lineStyle; - } - } - - private static GUIStyle richFoldoutStyle; - public static GUIStyle RichFoldoutStyle - { - get - { - Init(); - return richFoldoutStyle; - } - } - - private static GUIStyle richMiniLabel; - public static GUIStyle RichMiniLabel - { - get - { - Init(); - return richMiniLabel; - } - } - - private static GUIStyle richLabel; - public static GUIStyle RichLabel - { - get - { - Init(); - return richLabel; - } - } - - private static GUIStyle boldLabel; - public static GUIStyle BoldLabel - { - get - { - Init(); - return boldLabel; - } - } - - private static GUIStyle largeBoldLabel; - internal static GUIStyle LargeBoldLabel - { - get - { - Init(); - return largeBoldLabel; - } - } - - private static GUIStyle centeredLabel; - internal static GUIStyle CenteredLabel - { - get - { - Init(); - return centeredLabel; - } - } - - private static GUIStyle panelWithBackground; - internal static GUIStyle PanelWithBackground - { - get - { - Init(); - return panelWithBackground; - } - } - - private static GUIStyle compactButton; - internal static GUIStyle CompactButton - { - get - { - Init(); - return compactButton; - } - } - - private static GUIStyle compactImageButton; - internal static GUIStyle CompactImageButton - { - get - { - Init(); - return compactImageButton; - } - } - - private static GUIStyle toolbarSearchTextField; - internal static GUIStyle ToolbarSearchTextField - { - get - { - Init(); - return toolbarSearchTextField; - } - } - - private static GUIStyle toolbarSearchTextFieldPopup; - internal static GUIStyle ToolbarSearchTextFieldPopup - { - get - { - Init(); - return toolbarSearchTextFieldPopup; - } - } - - private static GUIStyle toolbarSearchCancelButton; - internal static GUIStyle ToolbarSearchCancelButton - { - get - { - Init(); - return toolbarSearchCancelButton; - } - } - - private static GUIStyle toolbarSearchCancelButtonEmpty; - internal static GUIStyle ToolbarSearchCancelButtonEmpty - { - get - { - Init(); - return toolbarSearchCancelButtonEmpty; - } - } - - private static GUIStyle toolbar; - internal static GUIStyle Toolbar - { - get - { - Init(); - return toolbar; - } - } - - private static GUIStyle toolbarLabel; - internal static GUIStyle ToolbarLabel - { - get - { - Init(); - return toolbarLabel; - } - } - - private static bool inited; - - private static void Init() - { - if (inited) - { - return; - } - - richMiniLabel = new GUIStyle(EditorStyles.miniLabel) - { - wordWrap = true, - richText = true - }; - - richLabel = new GUIStyle(EditorStyles.label) - { - wordWrap = true, - richText = true - }; - - boldLabel = new GUIStyle(richLabel) - { - fontStyle = FontStyle.Bold - }; - - largeBoldLabel = new GUIStyle(EditorStyles.largeLabel) - { - wordWrap = true, fontStyle = FontStyle.Bold, richText = true - }; - - compactButton = new GUIStyle(GUI.skin.button) - { - overflow = richLabel.overflow, - padding = new RectOffset(5, 5, 1, 4), - margin = new RectOffset(2, 2, 3, 2), - richText = true - }; - - compactImageButton = new GUIStyle(compactButton) - { - fixedWidth = 24, - fixedHeight = 24, -#if UNITY_2020_1_OR_NEWER - padding = new RectOffset(3, 3, 3, 4), - margin = new RectOffset(0, 0, 3, 2), -#else - padding = new RectOffset(3, 3, 1, 4), - margin = new RectOffset(2, 2, 3, 2), -#endif - }; - - iconButtonStyle = new GUIStyle(compactButton) - { - padding = new RectOffset(0, 0, EditorGUIUtility.isProSkin ? -5 : -4, -2), - overflow = EditorGUIUtility.isProSkin ? new RectOffset(1, 1, 1, 1) : new RectOffset(0, 0, 2, 1), - fixedHeight = 18, - fixedWidth = 22 - }; - - centeredLabel = new GUIStyle(richLabel) - { - alignment = TextAnchor.MiddleCenter - }; - - panelWithBackground = new GUIStyle(GUI.skin.box) - { - padding = new RectOffset() - }; - - lineStyle = new GUIStyle(GUI.skin.box); - lineStyle.border.top = lineStyle.border.bottom = 1; - lineStyle.margin.top = lineStyle.margin.bottom = 1; - lineStyle.padding.top = lineStyle.padding.bottom = 1; - - richFoldoutStyle = new GUIStyle(EditorStyles.foldout); - richFoldoutStyle.active = richFoldoutStyle.focused = richFoldoutStyle.normal; - richFoldoutStyle.onActive = richFoldoutStyle.onFocused = richFoldoutStyle.onNormal; - richFoldoutStyle.richText = true; - - toolbar = new GUIStyle(EditorStyles.toolbar); - toolbar.margin.top++; - - toolbarLabel = new GUIStyle(EditorStyles.miniLabel) - { - richText = true - }; - toolbarLabel.padding.top--; - - toolbarSearchTextField = GetBuiltinStyle("ToolbarSeachTextField", true) ?? - GetBuiltinStyle("ToolbarSearchTextField"); - - toolbarSearchTextFieldPopup = GetBuiltinStyle("ToolbarSeachTextFieldPopup", true) ?? - GetBuiltinStyle("ToolbarSearchTextFieldPopup"); - - toolbarSearchCancelButton = GetBuiltinStyle("ToolbarSeachCancelButton", true) ?? - GetBuiltinStyle("ToolbarSearchCancelButton"); - - toolbarSearchCancelButtonEmpty = GetBuiltinStyle("ToolbarSeachCancelButtonEmpty", true) ?? - GetBuiltinStyle("ToolbarSearchCancelButtonEmpty"); - - inited = true; - } - - - internal static void Separator() - { - GUILayout.Box(GUIContent.none, LineStyle, GUILayout.ExpandWidth(true), GUILayout.Height(1f)); - } - - public static bool IconButton(Texture icon, params GUILayoutOption[] options) - { - return IconButton(icon, null, options); - } - - public static bool IconButton(Texture icon, string hint, params GUILayoutOption[] options) - { - return ImageButton(null, hint, icon, IconButtonStyle, options); - } - - public static bool ImageButton(string label, Texture image, params GUILayoutOption[] options) - { - return ImageButton(label, null, image, options); - } - - public static bool ImageButton(string label, string hint, Texture image, params GUILayoutOption[] options) - { - return ImageButton(label, hint, image, CompactImageButton, options); - } - - public static bool ImageButton(string label, string hint, Texture image, GUIStyle style, params GUILayoutOption[] options) - { - var content = new GUIContent(); - - if (!string.IsNullOrEmpty(label)) - { - content.text = label; - } - - if (!string.IsNullOrEmpty(hint)) - { - content.tooltip = hint; - } - - content.image = image; - if (!string.IsNullOrEmpty(label)) - { - content.text = " " + label; - } - - return GUILayout.Button(content, style, options); - } - - internal static bool Foldout(bool foldout, string caption) - { - return Foldout(foldout, new GUIContent(caption)); - } - - internal static bool Foldout(bool foldout, GUIContent caption) - { - return EditorGUI.Foldout(EditorGUILayout.GetControlRect(), foldout, caption, true, RichFoldoutStyle); - } - - internal static string SearchToolbar(string searchPattern) - { - var searchFieldRect = EditorGUILayout.GetControlRect(false, ToolbarSearchTextField.lineHeight, ToolbarSearchTextField); - var searchFieldTextRect = searchFieldRect; - searchFieldTextRect.width -= 14f; - - searchPattern = EditorGUI.TextField(searchFieldTextRect, searchPattern, ToolbarSearchTextField); - - GUILayout.Space(10); - - var searchFieldButtonRect = searchFieldRect; - searchFieldButtonRect.x += searchFieldRect.width - 14f; - searchFieldButtonRect.width = 14f; - - var buttonStyle = string.IsNullOrEmpty(searchPattern) ? ToolbarSearchCancelButtonEmpty : ToolbarSearchCancelButton; - if (GUI.Button(searchFieldButtonRect, GUIContent.none, buttonStyle) && !string.IsNullOrEmpty(searchPattern)) - { - searchPattern = string.Empty; - GUIUtility.keyboardControl = 0; - } - - return searchPattern; - } - - internal static void DrawHeader(string text) - { - using (Horizontal(PanelWithBackground, GUILayout.Height(20), GUILayout.ExpandHeight(false))) - { - EditorGUILayout.LabelField(text, LargeBoldLabel); - } - GUILayout.Space(3); - } - - internal static bool DrawFoldHeader(string text, bool fold) - { - bool result; - text = "" + text + ""; - using (Horizontal(PanelWithBackground, GUILayout.Height(20), GUILayout.ExpandHeight(false))) - { - result = EditorGUILayout.Foldout(fold, new GUIContent(text), true, RichFoldoutStyle); - } - GUILayout.Space(3); - - return result; - } - - private static GUIStyle GetBuiltinStyle(string name, bool silent = false) - { - var style = GUI.skin.FindStyle(name) ?? - EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector).FindStyle(name); - - if (!silent && style == null) - { - style = GUIStyle.none; - Debug.LogError(ACTk.LogPrefix + "Can't find builtin style " + name); - } - - return style; - } - - // ------------------------------------------------------------------- - // tooling for "using" keyword - // ------------------------------------------------------------------- - - internal static GUILayout.HorizontalScope Horizontal() - { - return Horizontal(GUIStyle.none); - } - - internal static GUILayout.HorizontalScope Horizontal(GUIStyle style) - { - return Horizontal(style, null); - } - - internal static GUILayout.HorizontalScope Horizontal(params GUILayoutOption[] options) - { - return Horizontal(GUIStyle.none, options); - } - - internal static GUILayout.HorizontalScope Horizontal(GUIStyle style, params GUILayoutOption[] options) - { - return new GUILayout.HorizontalScope(style, options); - } - - internal static GUILayout.VerticalScope Vertical(params GUILayoutOption[] options) - { - return Vertical(GUIStyle.none, options); - } - - internal static GUILayout.VerticalScope Vertical(GUIStyle style, params GUILayoutOption[] options) - { - return new GUILayout.VerticalScope(style, options); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/GUITools.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/GUITools.cs.meta deleted file mode 100644 index d115107..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/GUITools.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 91b4cedaccda1604fa6d0f05bc76b0f1 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/ReflectionTools.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/ReflectionTools.cs deleted file mode 100644 index 3553333..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/ReflectionTools.cs +++ /dev/null @@ -1,92 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Reflection; - using Common; - using UnityEditor; - using UnityEngine; -#if UNITY_2021_2_OR_NEWER - using UnityEditor.Build; -#endif - - internal static class ReflectionTools - { - private static readonly Type ScriptingImplementationType = typeof(ScriptingImplementation); -#if UNITY_2021_2_OR_NEWER - private delegate object GetScriptingImplementations(NamedBuildTarget target); - private static readonly Type NamedBuildTargetType = typeof(NamedBuildTarget); -#else - private delegate object GetScriptingImplementations(BuildTargetGroup target); - private static readonly Type BuildTargetGroupType = typeof(BuildTargetGroup); -#endif - private static readonly Type ModuleManagerType = ScriptingImplementationType.Assembly.GetType("UnityEditor.Modules.ModuleManager", false); - private static readonly Type ScriptingImplementationsType = ScriptingImplementationType.Assembly.GetType("UnityEditor.Modules.IScriptingImplementations", false); - - private static GetScriptingImplementations getScriptingImplementationsDelegate; - private static MethodInfo scriptingImplementationsTypeEnabledMethodInfo; - - public static bool IsScriptingImplementationSupported(ScriptingImplementation implementation, BuildTargetGroup target) - { - if (ModuleManagerType == null) - { - ACTk.PrintExceptionForSupport("Couldn't find UnityEditor.Modules.ModuleManager type!"); - return false; - } - - if (ScriptingImplementationsType == null) - { - ACTk.PrintExceptionForSupport("Couldn't find UnityEditor.Modules.IScriptingImplementations type!"); - return false; - } - - if (getScriptingImplementationsDelegate == null) - { -#if UNITY_2021_2_OR_NEWER - var mi = ModuleManagerType.GetMethod("GetScriptingImplementations", BindingFlags.Static | BindingFlags.NonPublic, Type.DefaultBinder, new []{NamedBuildTargetType}, null); -#else - var mi = ModuleManagerType.GetMethod("GetScriptingImplementations", BindingFlags.Static | BindingFlags.NonPublic, Type.DefaultBinder, new []{BuildTargetGroupType}, null); -#endif - if (mi == null) - { - ACTk.PrintExceptionForSupport("Couldn't find GetScriptingImplementations method!"); - return false; - } - getScriptingImplementationsDelegate = (GetScriptingImplementations)Delegate.CreateDelegate(typeof(GetScriptingImplementations), mi); - } - -#if UNITY_2021_2_OR_NEWER - var namedTarget = NamedBuildTarget.FromBuildTargetGroup(target); - var result = getScriptingImplementationsDelegate.Invoke(namedTarget); -#else - var result = getScriptingImplementationsDelegate.Invoke(target); -#endif - if (result == null) // happens for default platform support module - { -#if UNITY_2021_2_OR_NEWER - return PlayerSettings.GetDefaultScriptingBackend(namedTarget) == implementation; -#else - return PlayerSettings.GetDefaultScriptingBackend(target) == implementation; -#endif - } - - if (scriptingImplementationsTypeEnabledMethodInfo == null) - { - scriptingImplementationsTypeEnabledMethodInfo = ScriptingImplementationsType.GetMethod("Enabled", BindingFlags.Public | BindingFlags.Instance); - if (scriptingImplementationsTypeEnabledMethodInfo == null) - { - ACTk.PrintExceptionForSupport("Couldn't find IScriptingImplementations.Enabled() method!"); - return false; - } - } - - var enabledImplementations = (ScriptingImplementation[])scriptingImplementationsTypeEnabledMethodInfo.Invoke(result, null); - return Array.IndexOf(enabledImplementations, implementation) != -1; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/ReflectionTools.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/ReflectionTools.cs.meta deleted file mode 100644 index 1803d2f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/ReflectionTools.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ab4b33806d114d87a9398e9929685f2d -timeCreated: 1557616224 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/SerializedPropertyExtensions.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/SerializedPropertyExtensions.cs deleted file mode 100644 index 35ee460..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/SerializedPropertyExtensions.cs +++ /dev/null @@ -1,77 +0,0 @@ -// -// douduck08: https://github.com/douduck08 -// https://gist.github.com/douduck08/6d3e323b538a741466de00c30aa4b61f#file-serializedpropertyextensions-cs -// -// Use Reflection to get instance of Unity's SerializedProperty in Custom Editor. -// Modified codes from 'Unity Answers', in order to apply on nested List or Array. -// -// Original author: HiddenMonk & Johannes Deml -// Ref: http://answers.unity3d.com/questions/627090/convert-serializedproperty-to-custom-class.html -// - -namespace CodeStage.AntiCheat.EditorCode -{ - using System; - using System.Collections; - using System.Linq; - using System.Reflection; - using System.Text.RegularExpressions; - using UnityEditor; - - internal static class SerializedPropertyExtensions - { - public static SerializedProperty GetProperty(this SerializedObject serializedObject, string propertyName) - { - return serializedObject.FindProperty($"<{propertyName}>k__BackingField"); - } - - public static T GetValue(this SerializedProperty property) where T : class - { - var obj = (object)property.serializedObject.targetObject; - var path = property.propertyPath.Replace(".Array.data", ""); - var fieldStructure = path.Split('.'); - var rgx = new Regex(@"\[\d+\]"); - foreach (var fieldPart in fieldStructure) - { - if (fieldPart.Contains("[")) - { - var index = System.Convert.ToInt32(new string(fieldPart.Where(char.IsDigit) - .ToArray())); - obj = GetFieldValueWithIndex(rgx.Replace(fieldPart, ""), obj, index); - } - else - { - obj = GetFieldValue(fieldPart, obj); - } - } - - return (T)obj; - } - - private static object GetFieldValue(string fieldName, object obj, - BindingFlags bindings = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | - BindingFlags.NonPublic) - { - var field = obj.GetType().GetField(fieldName, bindings); - return field != null ? field.GetValue(obj) : default; - } - - private static object GetFieldValueWithIndex(string fieldName, object obj, int index, - BindingFlags bindings = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | - BindingFlags.NonPublic) - { - var field = obj.GetType().GetField(fieldName, bindings); - if (field != null) - { - var list = field.GetValue(obj); - if (list.GetType().IsArray) - return ((Array)list).GetValue(index); - - if (list is IEnumerable) - return ((IList)list)[index]; - } - - return default; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/SerializedPropertyExtensions.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/SerializedPropertyExtensions.cs.meta deleted file mode 100644 index 66f4994..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/SerializedPropertyExtensions.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6d8a254c37bd4bb6b7e47a556d284f24 -timeCreated: 1667670637 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs deleted file mode 100644 index 640fcac..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.EditorCode -{ - using System.IO; - using EditorCommon.Tools; - using UnityEngine; - - internal static class Icons - { - public static Texture API => CSTextureLoader.GetIconTexture("API.png"); - public static Texture Forum => CSTextureLoader.GetIconTexture("Forum.png"); - public static Texture Discord => CSTextureLoader.GetIconTexture("Discord.png"); - public static Texture Manual => CSTextureLoader.GetIconTexture("Manual.png"); - public static Texture Home => CSTextureLoader.GetIconTexture("Home.png"); - public static Texture Support => CSTextureLoader.GetIconTexture("Support.png"); - - static Icons() - { - SetupPath(); - } - - public static void SetupPath() - { - CSTextureLoader.ExternalTexturesFolder = Path.Combine(EditorTools.GetACTkDirectory(), "Editor"); - } - } - - internal static class Images - { - public static Texture Logo => CSTextureLoader.GetTexture("Logo.png"); - - static Images() - { - Icons.SetupPath(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs.meta deleted file mode 100644 index dc7ef60..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0b7ab4c6b69945fa980b355a1f1b9dee -timeCreated: 1557660491 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip.meta deleted file mode 100644 index 2a86cdf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 688c2be7bb7259b4382618cce8a240c6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/ACTkSharpZipLib.dll b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/ACTkSharpZipLib.dll deleted file mode 100644 index 7e3cf7e..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/ACTkSharpZipLib.dll and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/ACTkSharpZipLib.dll.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/ACTkSharpZipLib.dll.meta deleted file mode 100644 index 04bb8cc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/ACTkSharpZipLib.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 5b329176be91acd49a93731a24aaf2ef -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/LICENSE.txt b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/LICENSE.txt deleted file mode 100644 index f4597ac..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/SharpZip/LICENSE.txt +++ /dev/null @@ -1,17 +0,0 @@ -Copyright © 2000-2018 SharpZipLib Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or -substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures.meta deleted file mode 100644 index 207ef63..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 00101290d05d02446897e4ba15e3745f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons.meta deleted file mode 100644 index a5b09ad..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9efb45cd993adc04ca803e6d37ab6045 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/API.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/API.png deleted file mode 100644 index 7be3d08..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/API.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/API.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/API.png.meta deleted file mode 100644 index aeac67c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/API.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 40fd6ffeeb9882e4e936544cf3ad2a7f -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Discord.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Discord.png deleted file mode 100644 index 1ff41f2..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Discord.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Discord.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Discord.png.meta deleted file mode 100644 index 809030e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Discord.png.meta +++ /dev/null @@ -1,132 +0,0 @@ -fileFormatVersion: 2 -guid: c19afd3f1792e84469c891524f2bebbd -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Forum.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Forum.png deleted file mode 100644 index 40e7965..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Forum.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Forum.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Forum.png.meta deleted file mode 100644 index 28aea9a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Forum.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 29808f9bad076cd44bf828cd0f0aca23 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Home.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Home.png deleted file mode 100644 index a6c3e73..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Home.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Home.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Home.png.meta deleted file mode 100644 index 8c7c977..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Home.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 92ca6df7507706a4cb3e1b65f76feb32 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Manual.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Manual.png deleted file mode 100644 index c254556..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Manual.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Manual.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Manual.png.meta deleted file mode 100644 index 10ad257..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Manual.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 9aae83a07b8e94f44ba4ce6a8e06395d -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Support.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Support.png deleted file mode 100644 index 149cedb..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Support.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Support.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Support.png.meta deleted file mode 100644 index c7da278..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/Support.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: ffbce22a5f4aa4748aa9bace9df0e956 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_API.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_API.png deleted file mode 100644 index 987ac89..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_API.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_API.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_API.png.meta deleted file mode 100644 index b4fa8dd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_API.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 23b913f6e7520ff479f45d45f7cd88ee -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Discord.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Discord.png deleted file mode 100644 index adf4549..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Discord.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Discord.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Discord.png.meta deleted file mode 100644 index ff7a11e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Discord.png.meta +++ /dev/null @@ -1,132 +0,0 @@ -fileFormatVersion: 2 -guid: 8957daa28fe154b429a7301f247cc79c -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Forum.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Forum.png deleted file mode 100644 index d23a3cd..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Forum.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Forum.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Forum.png.meta deleted file mode 100644 index fbb3128..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Forum.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 7b4e1479a7e9dff41aa6ca712956a416 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Home.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Home.png deleted file mode 100644 index 3e0cf93..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Home.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Home.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Home.png.meta deleted file mode 100644 index 55efa44..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Home.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 5f0296acda3f37e4a8286c7cd6d15234 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Manual.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Manual.png deleted file mode 100644 index 6ff52b5..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Manual.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Manual.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Manual.png.meta deleted file mode 100644 index 9f6bcdf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Manual.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 83751b678ac01e540b47cafc4e82dd20 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Support.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Support.png deleted file mode 100644 index 033d22d..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Support.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Support.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Support.png.meta deleted file mode 100644 index 83f82e4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Icons/d_Support.png.meta +++ /dev/null @@ -1,154 +0,0 @@ -fileFormatVersion: 2 -guid: 031d945f217d56e4c95e17d5ff7ba66d -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Logo.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Logo.png deleted file mode 100644 index 90a016b..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Logo.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Logo.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Logo.png.meta deleted file mode 100644 index 9d323dd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/Logo.png.meta +++ /dev/null @@ -1,136 +0,0 @@ -fileFormatVersion: 2 -guid: ab8f2446b2b4f0e4fba38f888517d7fd -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/d_Logo.png b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/d_Logo.png deleted file mode 100644 index 30ef95a..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/d_Logo.png and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/d_Logo.png.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/d_Logo.png.meta deleted file mode 100644 index c4d2e0e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/d_Logo.png.meta +++ /dev/null @@ -1,136 +0,0 @@ -fileFormatVersion: 2 -guid: 99edeaaa0eabb3c4b879f5515c702398 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 0 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: tvOS - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples.meta deleted file mode 100644 index 3acf6aa..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 78bafa9205d344342a28db7b6d9de550 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples.meta deleted file mode 100644 index 711d3ac..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 76a655e2e8214db4bb4160e974b81a55 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/API Examples.unity b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/API Examples.unity deleted file mode 100644 index 36e8aba..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/API Examples.unity +++ /dev/null @@ -1,1105 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 1 - m_BakeResolution: 1 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &390067134 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 100000, guid: 43d4b62f08e94424a836fb0710f6c996, - type: 2} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 390067135} - - component: {fileID: 390067136} - - component: {fileID: 390067138} - - component: {fileID: 390067137} - - component: {fileID: 390067139} - - component: {fileID: 390067140} - - component: {fileID: 390067141} - m_Layer: 0 - m_Name: ExamplesGUI - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &390067135 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 400000, guid: 43d4b62f08e94424a836fb0710f6c996, - type: 2} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 390067134} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &390067136 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 11400000, guid: 43d4b62f08e94424a836fb0710f6c996, - type: 2} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 390067134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5160f8c07d4686041a17220988137837, type: 3} - m_Name: - m_EditorClassIdentifier: - fontSize: 20 ---- !u!114 &390067137 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 390067134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8528554a675bd23498b237325c380884, type: 3} - m_Name: - m_EditorClassIdentifier: - regularString: I'm regular string - regularInt: 1987 - regularFloat: 2013.0524 - regularVector3: {x: 10.5, y: 11.5, z: 12.5} - obscuredString: - currentCryptoKey: - hiddenValue: - cryptoKey: 76008b00b2000300150047005400 - hiddenChars: 3f00ac00df0023007a00250027001500fe00c00066007100670027000200f900db006d007200 - fakeValue: I'm obscured string - fakeValueActive: 1 - inited: 1 - obscuredInt: - currentCryptoKey: 444444 - hiddenValue: 446431 - fakeValue: 1987 - fakeValueActive: 1 - inited: 1 - obscuredFloat: - migratedVersion: - currentCryptoKey: 230887 - hiddenValue: 1143273546 - hiddenValueOldByte4: - b1: 0 - b2: 0 - b3: 0 - b4: 0 - fakeValue: 2013.0524 - fakeValueActive: 1 - inited: 1 - obscuredVector3: - migratedVersion: - currentCryptoKey: 120207 - hiddenValue: - x: 1104488847 - y: 1104492943 - z: 1104497039 - fakeValue: {x: 10.5, y: 11.5, z: 12.5} - fakeValueActive: 1 - inited: 1 - obscuredBool: - currentCryptoKey: 215 - hiddenValue: 2 - fakeValue: 1 - inited: 1 - fakeValueActive: 1 - obscuredLong: - currentCryptoKey: 444442 - hiddenValue: 945678987653941067 - fakeValue: 945678987654123345 - fakeValueActive: 1 - inited: 1 - obscuredDouble: - migratedVersion: - currentCryptoKey: 210987 - hiddenValue: -2296201488976176132 - hiddenValueOldByte8: - b1: 0 - b2: 0 - b3: 0 - b4: 0 - b5: 0 - b6: 0 - b7: 0 - b8: 0 - fakeValue: 9.45678987654 - fakeValueActive: 1 - inited: 1 - obscuredVector2: - migratedVersion: - currentCryptoKey: 120206 - hiddenValue: - x: 1104480654 - y: 1104484750 - fakeValue: {x: 8.5, y: 9.5} - fakeValueActive: 1 - inited: 1 - obscuredDecimal: - currentCryptoKey: 209208 - hiddenValue: - b1: 56 - b2: 49 - b3: 6 - b4: 0 - b5: 0 - b6: 0 - b7: 0 - b8: 0 - b9: 196 - b10: 5 - b11: 3 - b12: 3 - b13: 0 - b14: 0 - b15: 0 - b16: 0 - inited: 1 - fakeValueActive: 0 - obscuredVector2Int: - currentCryptoKey: 160122 - hiddenValue: - x: 160114 - y: 160115 - fakeValue: {x: 8, y: 9} - fakeValueActive: 1 - inited: 1 - obscuredVector3Int: - currentCryptoKey: 120207 - hiddenValue: - x: 120192 - y: 120223 - z: 120222 - fakeValue: {x: 15, y: 16, z: 17} - fakeValueActive: 1 - inited: 1 - obscuredBigInteger: - hiddenValue: - raw: - sign: 1928220542 - bits: daa60e2e28a3dfaac5fe1560adf99d82 - fakeValue: - raw: - sign: 1 - bits: d2b673f028a3dfaac5fe1560a5e9e05c - currentCryptoKey: 1928220543 - fakeValueActive: 1 - inited: 1 - obscuredDateTime: - currentCryptoKey: 4735517144133995710 - hiddenValue: 679031911576150718 - fakeValue: 5249939520627387904 - fakeValueActive: 1 - inited: 1 ---- !u!114 &390067138 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 390067134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 87388f037bda48d49a6448f583e27215, type: 3} - m_Name: - m_EditorClassIdentifier: - hdrColor: {r: 62.122414, g: 0, b: 9.84443, a: 0.7490196} ---- !u!114 &390067139 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 390067134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 404985a153ed24d4d9d37e4440eb1697, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &390067140 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 390067134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5cdd7f4d9c5093c4ea9b389f6d3bf600, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &390067141 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 390067134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8332ee246a4e4720931b08f5144f61c2, type: 3} - m_Name: - m_EditorClassIdentifier: - dataToSave: "Heyhoy, I'm just a dummy string (\xAC\u203F\xAC)" - bytesToSave: 16777216 ---- !u!1 &589551972 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 589551974} - - component: {fileID: 589551973} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &589551973 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 589551972} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 0.24528301, g: 0.24528301, b: 0.24528301, a: 1} - m_Intensity: 4 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &589551974 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 589551972} - m_LocalRotation: {x: 0.35355338, y: -0.35355338, z: 0.1464466, w: 0.8535535} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1397219647} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 45, y: -45, z: 0} ---- !u!1 &1099216752 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1099216753} - - component: {fileID: 1099216754} - m_Layer: 0 - m_Name: Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1099216753 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1099216752} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -4} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1397219647} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &1099216754 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1099216752} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.122641504, g: 0.122641504, b: 0.122641504, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 1 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: 0 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!1 &1137338249 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1137338253} - - component: {fileID: 1137338252} - - component: {fileID: 1137338250} - - component: {fileID: 1137338254} - m_Layer: 0 - m_Name: VulnerableCube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &1137338250 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1137338249} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 0 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 0 - m_RayTracingMode: 2 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 1006b698a54949746bfc466260de19f6, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1137338252 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1137338249} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1137338253 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1137338249} - m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} - m_Children: [] - m_Father: {fileID: 1397219647} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} ---- !u!114 &1137338254 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1137338249} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: be9398f4953f71c43a73299bd636e79d, type: 3} - m_Name: - m_EditorClassIdentifier: - speed: 50 ---- !u!1 &1397219646 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1397219647} - m_Layer: 0 - m_Name: Environment - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1397219647 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1397219646} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1099216753} - - {fileID: 1137338253} - - {fileID: 1550209996} - - {fileID: 589551974} - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1416300460 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 390067139} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: OnInjectionDetected - objectReference: {fileID: 0} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEventHasListener - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000010853957840, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: autoDispose - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 390067139} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: OnSpeedHackDetected - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEventHasListener - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: autoDispose - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: coolDown - value: 200 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: maxFalsePositives - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: threshold - value: 0.1 - objectReference: {fileID: 0} - - target: {fileID: 114000012364938312, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: k__BackingField - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 390067139} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: OnTimeCheatingDetected - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEventHasListener - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: autoDispose - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114000012727147702, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: interval - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 390067139} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: OnObscuredTypeCheatingDetected - objectReference: {fileID: 0} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEventHasListener - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000013573189354, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: autoDispose - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 390067139} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: OnWallHackDetected - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: detectionEventHasListener - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: autoDispose - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: spawnPosition.x - value: 1000 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: spawnPosition.y - value: 1000 - objectReference: {fileID: 0} - - target: {fileID: 114000013931489308, guid: 95b162e541f72be46bac48d6f19b855a, - type: 3} - propertyPath: spawnPosition.z - value: 1000 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 95b162e541f72be46bac48d6f19b855a, type: 3} ---- !u!1 &1550209995 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1550209996} - - component: {fileID: 1550209999} - - component: {fileID: 1550209998} - - component: {fileID: 1550209997} - m_Layer: 0 - m_Name: ReliableCube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1550209996 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1550209995} - m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} - m_LocalPosition: {x: 0, y: -1, z: 0} - m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} - m_Children: [] - m_Father: {fileID: 1397219647} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} ---- !u!114 &1550209997 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1550209995} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2f4ec8228c66a7e4baf104f6767f2adb, type: 3} - m_Name: - m_EditorClassIdentifier: - speed: 50 ---- !u!23 &1550209998 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1550209995} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 0 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 0 - m_RayTracingMode: 2 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: d4829d0c74c806a4686dd39e47292994, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1550209999 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1550209995} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1653586604 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1653586607} - - component: {fileID: 1653586605} - m_Layer: 0 - m_Name: PerformanceTests - m_TagString: EditorOnly - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &1653586605 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1653586604} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c012c5f3a6748c4f82dd30cb5e666ca, type: 3} - m_Name: - m_EditorClassIdentifier: - boolTest: 1 - boolIterations: 2500000 - byteTest: 1 - byteIterations: 2500000 - shortTest: 1 - shortIterations: 2500000 - ushortTest: 1 - ushortIterations: 2500000 - intTest: 1 - intIterations: 2500000 - uintTest: 1 - uintIterations: 2500000 - longTest: 1 - longIterations: 2500000 - floatTest: 1 - floatIterations: 2500000 - doubleTest: 1 - doubleIterations: 1500000 - stringTest: 1 - stringIterations: 250000 - vector3Test: 1 - vector3Iterations: 1500000 - prefsTest: 1 - prefsIterations: 2500 ---- !u!4 &1653586607 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1653586604} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/API Examples.unity.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/API Examples.unity.meta deleted file mode 100644 index 8413630..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/API Examples.unity.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 5bca97b4033e9234abb953430df1cd67 -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials.meta deleted file mode 100644 index 3465072..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 91517eb9ff6d68240906e6993a03532e -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExample.mat b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExample.mat deleted file mode 100644 index 1889d89..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExample.mat +++ /dev/null @@ -1,84 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: VertexLitExample - m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _Shininess: 0.01 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} - - _Emission: {r: 0, g: 0, b: 0, a: 0} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExample.mat.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExample.mat.meta deleted file mode 100644 index 49221ee..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExample.mat.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 1006b698a54949746bfc466260de19f6 -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExampleGreen.mat b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExampleGreen.mat deleted file mode 100644 index 62681c8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExampleGreen.mat +++ /dev/null @@ -1,84 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: VertexLitExampleGreen - m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _Shininess: 0.01 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 0.02670848, g: 0.19117647, b: 0.10395861, a: 1} - - _Emission: {r: 0, g: 0, b: 0, a: 0} - - _EmissionColor: {r: 0.007843138, g: 0.78431374, b: 0.37254903, a: 1} - - _SpecColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExampleGreen.mat.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExampleGreen.mat.meta deleted file mode 100644 index 880d6e9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Materials/VertexLitExampleGreen.mat.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: d4829d0c74c806a4686dd39e47292994 -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs.meta deleted file mode 100644 index fd39929..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 14a3d92b84717b64cae0c46ec919dac9 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors Flat.prefab b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors Flat.prefab deleted file mode 100644 index e1878b6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors Flat.prefab +++ /dev/null @@ -1,156 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100000 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 400000} - - component: {fileID: 11400004} - - component: {fileID: 11400002} - - component: {fileID: 11400000} - - component: {fileID: 11400008} - - component: {fileID: 11400006} - m_Layer: 0 - m_Name: ACTk Detectors Flat - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &400000 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 100000} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &11400004 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a30ad7dd9c3245a488e57ae755cf870e, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - doubleEpsilon: 0.0001 - floatEpsilon: 0.0001 - vector2Epsilon: 0.1 - vector3Epsilon: 0.1 - quaternionEpsilon: 0.1 ---- !u!114 &11400002 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2c0c2cd00b8d16c43b34c7f120c7df15, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0d04994c2cd96140a8cf16a1ede4fb1, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - interval: 1 - threshold: 0.2 - maxFalsePositives: 3 - coolDown: 30 ---- !u!114 &11400008 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1cb994d96ecfe4d4697d649e0e7d5100, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - requestUrl: https://google.com - requestMethod: 0 - timeoutSeconds: 10 - interval: 1 - realCheatThreshold: 65 - wrongTimeThreshold: 65 - ignoreSetCorrectTime: 1 ---- !u!114 &11400006 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d123a0bf35a94004aa342821cfcc3ea8, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - checkRigidbody: 1 - checkController: 1 - checkWireframe: 1 - checkRaycast: 1 - wireframeDelay: 10 - raycastDelay: 10 - spawnPosition: {x: 0, y: 0, z: 0} - maxFalsePositives: 3 diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors Flat.prefab.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors Flat.prefab.meta deleted file mode 100644 index d3a878c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors Flat.prefab.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 60b6c172f7c2a1f4abacc848f7547d63 -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors.prefab b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors.prefab deleted file mode 100644 index 66cbd3b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors.prefab +++ /dev/null @@ -1,311 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100000 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 400000} - m_Layer: 0 - m_Name: ACTk Detectors - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &400000 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 100000} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4000011916942720} - - {fileID: 4000012744368652} - - {fileID: 4000011178743296} - - {fileID: 4000013782891912} - - {fileID: 4000013311534020} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1000010530748218 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4000011178743296} - - component: {fileID: 114000012364938312} - m_Layer: 0 - m_Name: SpeedHackDetector - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4000011178743296 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000010530748218} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 400000} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114000012364938312 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000010530748218} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0d04994c2cd96140a8cf16a1ede4fb1, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - interval: 1 - threshold: 0.2 - maxFalsePositives: 3 - coolDown: 30 ---- !u!1 &1000011110700032 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4000011916942720} - - component: {fileID: 114000010853957840} - m_Layer: 0 - m_Name: InjectionDetector - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4000011916942720 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000011110700032} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 400000} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114000010853957840 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000011110700032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2c0c2cd00b8d16c43b34c7f120c7df15, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 ---- !u!1 &1000011491924642 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4000012744368652} - - component: {fileID: 114000013573189354} - m_Layer: 0 - m_Name: ObscuredCheatingDetector - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4000012744368652 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000011491924642} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 400000} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114000013573189354 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000011491924642} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a30ad7dd9c3245a488e57ae755cf870e, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - doubleEpsilon: 0.0001 - floatEpsilon: 0.0001 - vector2Epsilon: 0.1 - vector3Epsilon: 0.1 - quaternionEpsilon: 0.1 ---- !u!1 &1000011647782440 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4000013311534020} - - component: {fileID: 114000013931489308} - m_Layer: 0 - m_Name: WallHackDetector - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4000013311534020 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000011647782440} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 400000} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114000013931489308 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000011647782440} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d123a0bf35a94004aa342821cfcc3ea8, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - checkRigidbody: 1 - checkController: 1 - checkWireframe: 1 - checkRaycast: 1 - wireframeDelay: 10 - raycastDelay: 10 - spawnPosition: {x: 0, y: 0, z: 0} - maxFalsePositives: 3 ---- !u!1 &1000013148407208 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4000013782891912} - - component: {fileID: 114000012727147702} - m_Layer: 0 - m_Name: TimeCheatingDetector - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4000013782891912 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000013148407208} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 400000} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114000012727147702 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1000013148407208} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1cb994d96ecfe4d4697d649e0e7d5100, type: 3} - m_Name: - m_EditorClassIdentifier: - keepAlive: 1 - autoStart: 1 - autoDispose: 1 - detectionEvent: - m_PersistentCalls: - m_Calls: [] - detectionEventHasListener: 0 - requestUrl: https://google.com - requestMethod: 0 - timeoutSeconds: 10 - interval: 5 - realCheatThreshold: 65 - wrongTimeThreshold: 65 - ignoreSetCorrectTime: 1 diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors.prefab.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors.prefab.meta deleted file mode 100644 index b230c0b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Prefabs/ACTk Detectors.prefab.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 95b162e541f72be46bac48d6f19b855a -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts.meta deleted file mode 100644 index 72ad93b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 996d5bad3660300428b16ca3bbb4d521 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime.meta deleted file mode 100644 index 9af4d1f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 45e78875993834943a3b3442d3d6d22a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ACTk.Examples.Runtime.asmdef b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ACTk.Examples.Runtime.asmdef deleted file mode 100644 index 314d795..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ACTk.Examples.Runtime.asmdef +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "ACTk.Examples.Runtime", - "references": [ - "ACTk.Runtime" - ], - "optionalUnityReferences": [], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [] -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ACTk.Examples.Runtime.asmdef.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ACTk.Examples.Runtime.asmdef.meta deleted file mode 100644 index 70b69d7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ACTk.Examples.Runtime.asmdef.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: fb916ebfae36eec4ba1dfb094994b0db -timeCreated: 1554196070 -licenseType: Store -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ExamplesGUI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ExamplesGUI.cs deleted file mode 100644 index ff41988..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ExamplesGUI.cs +++ /dev/null @@ -1,161 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Examples -{ - using System; - using Storage; - using UnityEngine; - - [AddComponentMenu("")] - internal class ExamplesGUI : MonoBehaviour - { - private enum ExamplePage - { - ObscuredTypes = 0, - SavesProtection = 1, - Detectors = 2, - CodeHashing = 3 - } - - [SerializeField] private int fontSize = 20; - - internal const string RedColor = "FF6060"; - internal const string YellowColor = "E9D604"; - internal const string GreenColor = "02C85F"; - internal const string BlueColor = "75C4EB"; - - internal static GUIStyle centeredStyle; - - private ObscuredTypesExamples obscuredTypesExamples; - private ObscuredPrefsExamples obscuredPrefsExamples; - private ObscuredFilePrefsExamples obscuredFilePrefsExamples; - private DetectorsExamples detectorsExamples; - private GenuineChecksExamples genuineChecksExamples; - - private readonly string[] tabs = {"Variables protection", "Saves protection", "Cheating detectors", "Build Genuine Checks"}; - private readonly string[] savesTabs = {"ObscuredPrefs", "ObscuredFilePrefs"}; - private ExamplePage currentPage; - private int savesPage; - - public DetectorsExamples DetectorsExamples => detectorsExamples; - - private void Awake() - { - obscuredTypesExamples = GetComponent(); - obscuredPrefsExamples = GetComponent(); - obscuredFilePrefsExamples = GetComponent(); - detectorsExamples = GetComponent(); - genuineChecksExamples = GetComponent(); - } - - private void OnGUI() - { - GUI.skin.label.fontSize = GUI.skin.box.fontSize = GUI.skin.toggle.fontSize = GUI.skin.button.fontSize = fontSize; - - if (centeredStyle == null) - centeredStyle = new GUIStyle(GUI.skin.label) {alignment = TextAnchor.UpperCenter}; - - GUILayout.BeginArea(new Rect(10, 5, Screen.width - 20, Screen.height - 10)); - - GUILayout.Label(Colorize("Anti-Cheat Toolkit Sandbox", BlueColor), centeredStyle); - GUILayout.Label("Here you can overview common ACTk features and try to cheat something yourself.", centeredStyle); - GUILayout.Space(5); - currentPage = (ExamplePage)GUILayout.Toolbar((int)currentPage, tabs); - GUILayout.Space(25); - - switch (currentPage) - { - case ExamplePage.ObscuredTypes: - { - obscuredTypesExamples.DrawUI(this); - break; - } - case ExamplePage.SavesProtection: - { - DrawSavesProtectionPage(); - break; - } - case ExamplePage.Detectors: - { - detectorsExamples.DrawUI(); - break; - } - case ExamplePage.CodeHashing: - { - genuineChecksExamples.DrawUI(); - break; - } - } - GUILayout.EndArea(); - } - - private void DrawSavesProtectionPage() - { - savesPage = GUILayout.Toolbar(savesPage, savesTabs); - using (new GUILayout.HorizontalScope()) - { - using (new GUILayout.VerticalScope(GUILayout.MinWidth(130))) - { - GUILayout.Label("Supported types:"); - GUILayout.Label(GetAllObscuredPrefsDataTypes(), GUILayout.MaxWidth(100)); - } - - GUILayout.Space(10); - - using (new GUILayout.VerticalScope()) - { - switch (savesPage) - { - case 0: - { - obscuredPrefsExamples.DrawUI(); - break; - } - case 1: - { - obscuredFilePrefsExamples.DrawUI(); - break; - } - } - } - } - } - - internal static string ColorizeGreenOrRed(string stringToWrap, bool green) - { - return Colorize(stringToWrap, green ? GreenColor : RedColor); - } - - internal static string Colorize(string stringToWrap, string color) - { - return $"{stringToWrap}"; - } - - private static string GetAllObscuredPrefsDataTypes() - { - var result = string.Empty; - var values = Enum.GetNames(typeof(StorageDataType)); - - for (var i = 0; i < values.Length; i++) - { - var value = values[i]; - var lowerCase = value.ToLowerInvariant(); - - if (lowerCase.Contains(StorageDataType.Unknown.ToString().ToLowerInvariant())) - continue; - - result += lowerCase; - if (i != values.Length - 1) - result += ", "; - } - - result = Colorize(result, BlueColor); - - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ExamplesGUI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ExamplesGUI.cs.meta deleted file mode 100644 index ccbf826..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ExamplesGUI.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5160f8c07d4686041a17220988137837 -timeCreated: 1508158683 -licenseType: Store -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotator.cs deleted file mode 100644 index ed406c4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotator.cs +++ /dev/null @@ -1,23 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Examples -{ - using UnityEngine; - - // dummy code, just to add some rotation to the cube from example scene - [AddComponentMenu("")] - internal class InfiniteRotator : MonoBehaviour - { - [Range(1f, 100f)] - public float speed = 5f; - - private void LateUpdate() - { - transform.Rotate(0, speed * Time.deltaTime, 0); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotator.cs.meta deleted file mode 100644 index 6617019..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotator.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: be9398f4953f71c43a73299bd636e79d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotatorReliable.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotatorReliable.cs deleted file mode 100644 index 395d575..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotatorReliable.cs +++ /dev/null @@ -1,25 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Examples -{ - using Time; - using UnityEngine; - - // speed-hack resistant analogue of the InfiniteRotator.cs - [AddComponentMenu("")] - internal class InfiniteRotatorReliable : MonoBehaviour - { - [Range(1f, 100f)] - public float speed = 5f; - - private void Update() - { - // just use SpeedHackProofTime.* instead of Time.* to reach speed hacks resistant time - transform.Rotate(0, speed * SpeedHackProofTime.deltaTime, 0); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotatorReliable.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotatorReliable.cs.meta deleted file mode 100644 index 2e977b4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/InfiniteRotatorReliable.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2f4ec8228c66a7e4baf104f6767f2adb -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ObscuredPerformanceTests.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ObscuredPerformanceTests.cs deleted file mode 100644 index 72dcaf6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ObscuredPerformanceTests.cs +++ /dev/null @@ -1,638 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System.Numerics; - -namespace CodeStage.AntiCheat.Examples -{ - using Storage; - using ObscuredTypes; - - using System; - using System.Diagnostics; - using System.Text; - using UnityEngine; - using Debug = UnityEngine.Debug; - - /// - /// These super simple and stupid tests allow you to see how slower Obscured types can be compared to the regular types. - /// Take in account iterations count though. - /// - [AddComponentMenu("")] - internal class ObscuredPerformanceTests : MonoBehaviour - { - public bool boolTest = true; - public int boolIterations = 2500000; - - public bool byteTest = true; - public int byteIterations = 2500000; - - public bool shortTest = true; - public int shortIterations = 2500000; - - public bool ushortTest = true; - public int ushortIterations = 2500000; - - public bool intTest = true; - public int intIterations = 2500000; - - public bool uintTest = true; - public int uintIterations = 2500000; - - public bool longTest = true; - public int longIterations = 2500000; - - public bool bigIntTest = true; - public int bigIntIterations = 2500000; - - public bool floatTest = true; - public int floatIterations = 2500000; - - public bool doubleTest = true; - public int doubleIterations = 2500000; - - public bool stringTest = true; - public int stringIterations = 250000; - - public bool vector3Test = true; - public int vector3Iterations = 2500000; - - public bool prefsTest = true; - public int prefsIterations = 2500; - - private readonly StringBuilder logBuilder = new StringBuilder(); - - private void Start() - { - Invoke(nameof(StartTests), 1f); - } - - private void StartTests() - { - logBuilder.Length = 0; - logBuilder.AppendLine("[ Performance tests ]"); - - if (boolTest) TestBool(); - if (byteTest) TestByte(); - if (shortTest) TestShort(); - if (ushortTest) TestUShort(); - if (intTest) TestInt(); - if (uintTest) TestUInt(); - if (longTest) TestLong(); - if (bigIntTest) TestBigInt(); - if (floatTest) TestFloat(); - if (doubleTest) TestDouble(); - if (stringTest) TestString(); - if (vector3Test) TestVector3(); - if (prefsTest) TestPrefs(); - - Debug.Log(logBuilder); - } - - private void TestBool() - { - logBuilder.AppendLine("ObscuredBool vs bool, " + boolIterations + " iterations for read and write"); - - ObscuredBool obscured = true; - bool notObscured = obscured; - var dummy = false; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < boolIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < boolIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredBool:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < boolIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < boolIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("bool:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy) {} - if (obscured) {} - if (notObscured) {} - } - - private void TestByte() - { - logBuilder.AppendLine("ObscuredByte vs byte, " + byteIterations + " iterations for read and write"); - - ObscuredByte obscured = 100; - byte notObscured = obscured; - byte dummy = 0; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < byteIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < byteIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredByte:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < byteIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < byteIterations; i++) - { - notObscured = dummy; - } - - sw.Stop(); - logBuilder.AppendLine("byte:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != 0) {} - if (obscured != 0) {} - if (notObscured != 0) {} - } - - private void TestShort() - { - logBuilder.AppendLine("ObscuredShort vs short, " + shortIterations + " iterations for read and write"); - - ObscuredShort obscured = 100; - short notObscured = obscured; - short dummy = 0; - - var sw = Stopwatch.StartNew(); - - - for (var i = 0; i < shortIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < shortIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredShort:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < shortIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < shortIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("short:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != 0) {} - if (obscured != 0) {} - if (notObscured != 0) {} - } - - private void TestUShort() - { - logBuilder.AppendLine("ObscuredUShort vs ushort, " + ushortIterations + " iterations for read and write"); - - ObscuredUShort obscured = 100; - ushort notObscured = obscured; - ushort dummy = 0; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < ushortIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < ushortIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredUShort:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < ushortIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < ushortIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ushort:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != 0) {} - if (obscured != 0) {} - if (notObscured != 0) {} - } - - private void TestDouble() - { - logBuilder.AppendLine("ObscuredDouble vs double, " + doubleIterations + " iterations for read and write"); - - ObscuredDouble obscured = 100d; - double notObscured = obscured; - double dummy = 0; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < doubleIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < doubleIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredDouble:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < doubleIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < doubleIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("double:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (Math.Abs(dummy) > 0.00001d) {} - if (Math.Abs(obscured) > 0.00001d) {} - if (Math.Abs(notObscured) > 0.00001d) {} - } - - private void TestFloat() - { - logBuilder.AppendLine("ObscuredFloat vs float, " + floatIterations + " iterations for read and write"); - - ObscuredFloat obscured = 100f; - float notObscured = obscured; - float dummy = 0; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < floatIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < floatIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredFloat:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < floatIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < floatIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("float:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (Math.Abs(dummy) > 0.00001f) {} - if (Math.Abs(obscured) > 0.00001f) {} - if (Math.Abs(notObscured) > 0.00001f) {} - } - - private void TestBigInt() - { - logBuilder.AppendLine("ObscuredBigInteger vs BigInteger, " + bigIntIterations + " iterations for read and write"); - - ObscuredBigInteger obscured = 100; - BigInteger notObscured = obscured; - BigInteger dummy = 0; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < bigIntIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < bigIntIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredBigInteger:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < bigIntIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < bigIntIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("BigInteger:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != 0) {} - if (obscured != 0) {} - if (notObscured != 0) {} - } - - private void TestLong() - { - logBuilder.AppendLine("ObscuredLong vs long, " + longIterations + " iterations for read and write"); - - ObscuredLong obscured = 100L; - long notObscured = obscured; - long dummy = 0; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < longIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < longIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredLong:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < longIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < longIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("long:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != 0) {} - if (obscured != 0) {} - if (notObscured != 0) {} - } - - private void TestInt() - { - logBuilder.AppendLine("ObscuredInt vs int, " + intIterations + " iterations for read and write"); - - ObscuredInt obscured = 100; - int notObscured = obscured; - var dummy = 0; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < intIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < intIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredInt:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < intIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < intIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("int:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != 0) {} - if (obscured != 0) {} - if (notObscured != 0) {} - } - - private void TestString() - { - logBuilder.AppendLine("ObscuredString vs string, " + stringIterations + " iterations for read and write"); - - ObscuredString obscured = "abcd"; - string notObscured = obscured; - var dummy = ""; - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < stringIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < stringIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredString:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < stringIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < stringIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("string:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != "") {} - if (obscured != "") {} - if (notObscured != "") {} - } - - private void TestUInt() - { - logBuilder.AppendLine("ObscuredUInt vs uint, " + uintIterations + " iterations for read and write"); - - ObscuredUInt obscured = 100u; - uint notObscured = obscured; - uint dummy = 0; - - var sw = Stopwatch.StartNew(); - for (var i = 0; i < uintIterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < uintIterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredUInt:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < uintIterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < uintIterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("uint:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != 0) {} - if (obscured != 0) {} - if (notObscured != 0) {} - } - - private void TestVector3() - { - logBuilder.AppendLine("ObscuredVector3 vs Vector3, " + vector3Iterations + " iterations for read and write"); - - ObscuredVector3 obscured = new Vector3(1f, 2f, 3f); - Vector3 notObscured = obscured; - var dummy = new Vector3(0, 0, 0); - - var sw = Stopwatch.StartNew(); - for (var i = 0; i < vector3Iterations; i++) - { - dummy = obscured; - } - - for (var i = 0; i < vector3Iterations; i++) - { - obscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("ObscuredVector3:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < vector3Iterations; i++) - { - dummy = notObscured; - } - - for (var i = 0; i < vector3Iterations; i++) - { - notObscured = dummy; - } - sw.Stop(); - logBuilder.AppendLine("Vector3:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - if (dummy != Vector3.zero) {} - if (obscured != Vector3.zero) {} - if (notObscured != Vector3.zero) {} - } - - private void TestPrefs() - { - logBuilder.AppendLine("ObscuredPrefs vs PlayerPrefs, " + prefsIterations + " iterations for read and write"); - - var sw = Stopwatch.StartNew(); - - for (var i = 0; i < prefsIterations; i++) - { - ObscuredPrefs.Set("__a", 1); - ObscuredPrefs.Set("__b", 2f); - ObscuredPrefs.Set("__c", "3"); - } - - for (var i = 0; i < prefsIterations; i++) - { - ObscuredPrefs.Get("__a", 1); - ObscuredPrefs.Get("__b", 2f); - ObscuredPrefs.Get("__c", "3"); - } - sw.Stop(); - logBuilder.AppendLine("ObscuredPrefs:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - ObscuredPrefs.DeleteKey("__a"); - ObscuredPrefs.DeleteKey("__b"); - ObscuredPrefs.DeleteKey("__c"); - - ObscuredPrefs.DeleteCryptoKey(); - - sw.Reset(); - sw.Start(); - for (var i = 0; i < prefsIterations; i++) - { - PlayerPrefs.SetInt("__a", 1); - PlayerPrefs.SetFloat("__b", 2f); - PlayerPrefs.SetString("__c", "3"); - } - - for (var i = 0; i < prefsIterations; i++) - { - PlayerPrefs.GetInt("__a", 1); - PlayerPrefs.GetFloat("__b", 2f); - PlayerPrefs.GetString("__c", "3"); - } - sw.Stop(); - logBuilder.AppendLine("PlayerPrefs:").AppendLine(sw.ElapsedMilliseconds + " ms"); - - PlayerPrefs.DeleteKey("__a"); - PlayerPrefs.DeleteKey("__b"); - PlayerPrefs.DeleteKey("__c"); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ObscuredPerformanceTests.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ObscuredPerformanceTests.cs.meta deleted file mode 100644 index db4cde0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/ObscuredPerformanceTests.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7c012c5f3a6748c4f82dd30cb5e666ca -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples.meta deleted file mode 100644 index 60f1365..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0ebb3a82e0bc79a4fa374f8027497c2e -folderAsset: yes -timeCreated: 1540481579 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.UI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.UI.cs deleted file mode 100644 index e933440..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.UI.cs +++ /dev/null @@ -1,96 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if (UNITY_STANDALONE || UNITY_ANDROID) && !ENABLE_IL2CPP -#define ACTK_INJECTION_DETECTOR_ENABLED -#endif - -#define ACTK_TIME_CHEATING_DETECTOR_ENABLED - -#if ACTK_PREVENT_INTERNET_PERMISSION -#undef ACTK_TIME_CHEATING_DETECTOR_ENABLED -#endif - -namespace CodeStage.AntiCheat.Examples -{ - using Detectors; - using UnityEngine; - - internal partial class DetectorsExamples - { - public void DrawUI() - { - GUILayout.Label("ACTk is able to detect some types of cheating to let you take action on the cheating players. " + - "This example scene has all possible detectors and they do automatically start on scene start."); - GUILayout.Space(5); - using (new GUILayout.VerticalScope(GUI.skin.box)) - { - GUILayout.Label($"{SpeedHackDetector.ComponentName}"); - GUILayout.Label("Allows to detect speed hack applied from Cheat Engine, Game Guardian and such."); - GUILayout.Label($"Running: {SpeedHackDetector.Instance.IsRunning}\n" + - ExamplesGUI.ColorizeGreenOrRed($"Detected: {speedHackDetected.ToString().ToLower()}", !speedHackDetected)); - -#if ACTK_TIME_CHEATING_DETECTOR_ENABLED - GUILayout.Space(10); - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label($"{TimeCheatingDetector.ComponentName} (updates once per 1 min by default)"); - if (GUILayout.Button("Force check")) - ForceTimeCheatingDetectorCheck(); - } -#else - GUILayout.Space(10); - GUILayout.Label($"{TimeCheatingDetector.ComponentName}"); -#endif - GUILayout.Label("Allows to detect system time change to cheat " + - "some long-term processes (building progress, etc.)."); - -#if ACTK_TIME_CHEATING_DETECTOR_ENABLED - if (wrongTimeDetected && !timeCheatingDetected) - { - GUILayout.Label($"Running: {TimeCheatingDetector.Instance.IsRunning}\n" + - ExamplesGUI.Colorize( - "Wrong time detected (diff more than: {TimeCheatingDetector.Instance.wrongTimeThreshold} minutes)", - ExamplesGUI.YellowColor)); - } - else - { - GUILayout.Label($"Running: {TimeCheatingDetector.Instance.IsRunning}\n" + - ExamplesGUI.ColorizeGreenOrRed($"Detected: {timeCheatingDetected.ToString()}", !timeCheatingDetected)); - } -#else - GUILayout.Label("Was disabled with ACTK_PREVENT_INTERNET_PERMISSION compilation symbol."); -#endif - GUILayout.Space(10); - GUILayout.Label($"{ObscuredCheatingDetector.ComponentName}"); - - GUILayout.Label("Detects cheating of any Obscured type (except ObscuredPrefs, " + - "it has own detection features) used in project."); - GUILayout.Label($"Running: {ObscuredCheatingDetector.Instance.IsRunning}\n" + - ExamplesGUI.ColorizeGreenOrRed($"Detected: {obscuredTypeCheatDetected.ToString()}", !obscuredTypeCheatDetected)); - - GUILayout.Space(10); - GUILayout.Label($"{WallHackDetector.ComponentName}"); - GUILayout.Label("Detects common types of wall hack cheating: walking through the walls " + - "(Rigidbody and CharacterController modules), shooting through the walls " + - "(Raycast module), looking through the walls (Wireframe module)."); - GUILayout.Label($"Running: {WallHackDetector.Instance.IsRunning}\n" + - ExamplesGUI.ColorizeGreenOrRed($"Detected: {wallHackCheatDetected.ToString()}", !wallHackCheatDetected)); - - GUILayout.Space(10); - GUILayout.Label($"{InjectionDetector.ComponentName}"); - GUILayout.Label("Allows to detect foreign managed assemblies in your application."); - -#if ACTK_INJECTION_DETECTOR_ENABLED - GUILayout.Label($"Running: {InjectionDetector.Instance != null && InjectionDetector.Instance.IsRunning}\n" + - ExamplesGUI.ColorizeGreenOrRed($"Detected: {injectionDetected.ToString()}", !injectionDetected)); -#else - GUILayout.Label("Managed injections are not possible in any non-Mono builds (such as WebGL)."); -#endif - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.UI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.UI.cs.meta deleted file mode 100644 index 4e7fed9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.UI.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: df90e2bd16bb4a948bd866e4fe02a8e7 -timeCreated: 1623244538 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.cs deleted file mode 100644 index 6dc60b3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.cs +++ /dev/null @@ -1,255 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#define ACTK_TIME_CHEATING_DETECTOR_ENABLED - -#if ACTK_PREVENT_INTERNET_PERMISSION -#undef ACTK_TIME_CHEATING_DETECTOR_ENABLED -#endif - -#if (UNITY_STANDALONE || UNITY_ANDROID) && !ENABLE_IL2CPP -#define ACTK_INJECTION_DETECTOR_ENABLED -#endif - -// add this line in order to use Detectors from code: -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.Examples -{ - using UnityEngine; - - internal partial class DetectorsExamples : MonoBehaviour - { - internal bool injectionDetected; - internal bool speedHackDetected; -#if ACTK_TIME_CHEATING_DETECTOR_ENABLED - internal bool wrongTimeDetected; - internal bool timeCheatingDetected; -#endif - internal bool obscuredTypeCheatDetected; - internal bool wallHackCheatDetected; - - #region detection callbacks - - /* -------------------------------------------------------------------------------- - these methods are get called by the Detection Events of detectors placed in the - ACTk Detectors game object, i.e. they are referenced from Inspector - -------------------------------------------------------------------------------- */ - - public void OnSpeedHackDetected() - { - speedHackDetected = true; - Debug.Log("Speed hack Detected!"); - } - -#if ACTK_TIME_CHEATING_DETECTOR_ENABLED - public void OnTimeCheatingDetected() - { - timeCheatingDetected = true; - Debug.Log("Time cheating Detected!"); - } -#endif - - public void OnInjectionDetected() - { - injectionDetected = true; - Debug.Log("Injection Detected!"); - } - - // cause will have detection cause or full assembly name - public void OnInjectionDetectedWithCause(string cause) - { - injectionDetected = true; - Debug.Log("Injection Detected! Cause: " + cause); - } - - public void OnObscuredTypeCheatingDetected() - { - obscuredTypeCheatDetected = true; - - // you can get access to the latest detection information and find out more about the detection context - var detection = ObscuredCheatingDetector.Instance.LastDetectionInfo; - Debug.Log($"Obscured Vars Cheating Detected:\n{detection}"); - } - - public void OnWallHackDetected() - { - wallHackCheatDetected = true; - Debug.Log("Wall hack Detected!"); - } - - /* -------------------------------------------------------------------------------- - these methods are passed as arguments StartDetection in examples below - -------------------------------------------------------------------------------- */ - - private void OnTimeCheatChecked(TimeCheatingDetector.CheckResult checkResult, - TimeCheatingDetector.ErrorKind errorKind) - { -#if ACTK_TIME_CHEATING_DETECTOR_ENABLED - switch (checkResult) - { - case TimeCheatingDetector.CheckResult.CheckPassed: - Debug.Log("TimeCheatingDetector: Check passed, time seems to be fine."); - break; - case TimeCheatingDetector.CheckResult.WrongTimeDetected: - wrongTimeDetected = true; - Debug.LogWarning("TimeCheatingDetector: Wrong time Detected!"); - break; - case TimeCheatingDetector.CheckResult.CheatDetected: - timeCheatingDetected = true; - Debug.LogWarning("TimeCheatingDetector: Time cheating Detected!"); - break; - case TimeCheatingDetector.CheckResult.Unknown: - case TimeCheatingDetector.CheckResult.Error: - Debug.LogError("TimeCheatingDetector: some error occured: " + errorKind); - break; - default: - Debug.LogError("TimeCheatingDetector: incorrect CheckResult value!"); - break; - } -#endif - } - - #endregion - - private void Start() - { - // All detectors have auto start option enabled by default, so you don't need to - // write any code to start them generally. - // - // However, you still can start and control detectors from code. - // You have 3 options for using detectors from code in general now: - // - // - configure detector in inspector, disable Auto Start, - // fill Detection Event and start it via StartDetection(); - // - // - configure detector in inspector, disable Auto Start, - // do not fill Detection Event and start it via StartDetection(), passing detection callback; - // - // - do not add detector to your scene at all and create it completely from code using StartDetection(); - // - // Also, generally, you have 3 options for the detection event listening: - // - // - configure Unity Event through the detector inspector - // - subscribe to the [DetectorName].Instance.CheatDetected event - // - pass reference to the delegate when starting detection from code - - SpeedHackDetectorExample(); - InjectionDetectorExample(); - ObscuredCheatingDetectorExample(); - TimeCheatingDetectorExample(); - - // We can change all options of any detectors from code like this: - // ObscuredCheatingDetector.StartDetection(OnObscuredTypeCheatingDetected); - // ObscuredCheatingDetector.Instance.autoDispose = true; - // ObscuredCheatingDetector.Instance.keepAlive = true; - } - - private void SpeedHackDetectorExample() - { - // --------------------------------------------- - /* SpeedHackDetector pure code usage example. */ - // --------------------------------------------- - - // SpeedHackDetector allows to detect speed hack applied - // in tools like Cheat Engine, Game Guardian, etc. - - // In this case we subscribe to the speed hack detection event, - // set detector update interval to 1 second, allowing 5 false positives and - // allowing Cool Down after 60 seconds (read more about Cool Down in the readme.pdf). - // Thus OnSpeedHackDetected normally will execute after 5 seconds since - // speed hack was applied to the application. - // Please, note, if we have detector added to scene, all settings - // we made there in inspector will be overridden by settings we pass - // to the StartDetection(); e.g.: - // SpeedHackDetector.StartDetection(OnSpeedHackDetected, 1f, 5, 60); - } - - private void InjectionDetectorExample() - { - // --------------------------------------------- - /* InjectionDetector pure code usage example. */ - // --------------------------------------------- - - // InjectionDetector can detect foreign managed - // assemblies loaded into your AppDomain - // - // build with IL2CPP to completely prevent managed injections - // and make it harder to reverse-engineer your game - -#if ACTK_INJECTION_DETECTOR_ENABLED - // may be started with 1 string parameter callback to get the detection cause - // InjectionDetector.StartDetection(OnInjectionDetectedWithCause); -#endif - } - - private void ObscuredCheatingDetectorExample() - { - // ---------------------------------------------------- - /* ObscuredCheatingDetector pure code usage example. */ - // ---------------------------------------------------- - - // When you start ObscuredCheatingDetector, it starts to - // create fake unprotected versions of all obscured - // variables in memory, making 'honey pot' for the cheaters - // allowing them to find desired value and cheat it just to - // be caught, original obscured value will stay untouched - - // that's it =D - // ObscuredCheatingDetector.StartDetection(OnObscuredTypeCheatingDetected); - } - - private void TimeCheatingDetectorExample() - { -#if ACTK_TIME_CHEATING_DETECTOR_ENABLED - // --------------------------------------------------------------------- - /* TimeCheatingDetector pure code usage example and additional notes */ - // --------------------------------------------------------------------- - - // TimeCheatingDetector can compare local time against - // online time to detect wrong local time - // and compare difference of their differences to detect local time cheating - - // TimeCheatingDetector can be disabled with ACTK_PREVENT_INTERNET_PERMISSION conditional - // which can be enabled in Settings window if you need to avoid - // android.permission.INTERNET and you do not use TimeCheatingDetector in your project. - - // TimeCheatingDetector has this additional event: CheatChecked - // it's get called after each cheat check and lets you know result of the check - // - // this is a preferred way over the inspector event as this CheatChecked event allows - // you to see if check was successful or if user has incorrect time for example - // (which may signalize for the suspicious activity) - TimeCheatingDetector.Instance.CheatChecked += OnTimeCheatChecked; - - // also you may execute checks manually using one of these 3 methods: - // - // TimeCheatingDetector.Instance.ForceCheck() - // and listen to callbacks passed to StartDetection - // - // yield return StartCoroutine(TimeCheatingDetector.Instance.ForceCheckEnumerator()); - // and check TimeCheatingDetector.Instance.LastResult property - // - // await TimeCheatingDetector.Instance.ForceCheckTask(); in async method (.NET 4.6 +) - // and check TimeCheatingDetector.Instance.LastResult property or result of this call -#endif - } - - // you can manually force TimeCheatingDetector cheating check - // in case you don't wish to wait for the interval to elapse, - // or if you wish to call it manually only, when interval is set to 0 - internal void ForceTimeCheatingDetectorCheck() - { -#if ACTK_TIME_CHEATING_DETECTOR_ENABLED - if (TimeCheatingDetector.Instance != null && - TimeCheatingDetector.Instance.IsReadyForForceCheck()) - { - TimeCheatingDetector.Instance.ForceCheck(); - } -#endif - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.cs.meta deleted file mode 100644 index 60400c9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 404985a153ed24d4d9d37e4440eb1697 -timeCreated: 1540503633 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.UI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.UI.cs deleted file mode 100644 index 4c5ccf7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.UI.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using CodeStage.AntiCheat.Genuine.Android; - -namespace CodeStage.AntiCheat.Examples -{ - using UnityEngine; - - internal partial class GenuineChecksExamples - { - public void DrawUI() - { - DrawBuildHashUI(); - GUILayout.Space(10); - DrawAppInstallSourceUI(); - } - - private void DrawBuildHashUI() - { - GUILayout.Label("Code Hash Generator"); - GUILayout.Space(10); - using (new GUILayout.VerticalScope(GUI.skin.box)) - { - GUILayout.Label("ACTk can hash the binaries included into the build to let you compare the runtime hash with " + - "the genuine hash to figure out if any of the build code binaries were altered.\n" + - "Use server-side validation to keep it unreachable for bad actors."); - - GUILayout.Space(5); - - if (IsHashingSupported && !Application.isEditor) - { - // just to make sure it's added to the scene and Instance will be not empty - Init(); - - if (!IsHashingBusy) - { - if (BuildHashResult != null) - { - if (BuildHashResult.Success) - { - GUILayout.Label($"Generated Summary Hash: {BuildHashResult.SummaryHash}"); - GUILayout.Label($"Time spent: {BuildHashResult.DurationSeconds:F2} secs"); - GUILayout.Label($"Files hashed: {BuildHashResult.FileHashes.Count}"); - } - else - { - GUILayout.Label($"Error: {BuildHashResult.ErrorMessage}"); - } - } - else - { - if (GUILayout.Button("Generate Hash")) - { - StartGeneration(); - } - if (GUILayout.Button("Generate Hash Async")) - { - StartGenerationAsync(); - } - } - } - else - { - GUILayout.Label("Generating..."); - } - } - else - { - GUILayout.Label(ExamplesGUI.Colorize("Code Hash Generator works only in Standalone Windows and Android builds.", - ExamplesGUI.YellowColor)); - } - } - } - - private void DrawAppInstallSourceUI() - { - GUILayout.Label("Android Installation Source Validation"); - GUILayout.Space(10); - using (new GUILayout.VerticalScope(GUI.skin.box)) - { - GUILayout.Label( - $"You can figure out where app was installed from using {nameof(AppInstallationSourceValidator)}" + - "This can be used to detect unauthorized redistribution of your app."); - - GUILayout.Space(5); - - if (Application.platform != RuntimePlatform.Android) - { - GUILayout.Label(ExamplesGUI.Colorize("Android Installation Source detection works only in Android builds.", - ExamplesGUI.YellowColor)); - } - else - { - if (AppInstallationResult != null) - { - GUILayout.Label($"Installation source: {AppInstallationResult.PackageName}"); - GUILayout.Label($"Detected store: {AppInstallationResult.DetectedSource}"); - } - else if (GUILayout.Button("Get Android Installation Source")) - { - AppInstallationResult = GetAndroidInstallationSource(); - } - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.UI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.UI.cs.meta deleted file mode 100644 index ad52f0c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.UI.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 655861a67e654fb48156fb32279bdf2c -timeCreated: 1623255861 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.cs deleted file mode 100644 index af2d3a0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.cs +++ /dev/null @@ -1,140 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using UnityEngine; -using CodeStage.AntiCheat.Genuine.Android; -using CodeStage.AntiCheat.Genuine.CodeHash; - -namespace CodeStage.AntiCheat.Examples -{ - internal partial class GenuineChecksExamples : MonoBehaviour - { - private HashGeneratorResult BuildHashResult { get; set; } - private AppInstallationSource AppInstallationResult { get; set; } - - private static bool IsHashingBusy => CodeHashGenerator.Instance.IsBusy; - - private static bool IsHashingSupported => CodeHashGenerator.IsTargetPlatformCompatible(); - - private void Init() - { - // Just to make sure it's added to the scene and Instance will be not empty. - CodeHashGenerator.AddToSceneOrGetExisting(); - } - - // Event-driven hash generation example - private void StartGeneration() - { - // You can check if current platform is supported first. - if (!CodeHashGenerator.IsTargetPlatformCompatible()) - return; - - // This is a good practice to avoid new requests while generator is busy with previous requests. - if (CodeHashGenerator.Instance.IsBusy) - return; - - // Just subscribe to generation event and start generation. - // Generation runs in separate thread avoiding cpu spikes in main thread. - // It generates hash only once and cache it for any new requests since compiled code does not change in runtime. - CodeHashGenerator.HashGenerated += OnHashGenerated; - - // using all available cores except 1 (we need to keep it free for the Main / UI thread) - var availableCores = Math.Max(1, Environment.ProcessorCount - 1); - - // calling hash generation to get result using HashGenerated event - CodeHashGenerator.Generate(availableCores); - } - - // Async hash generation example - private async void StartGenerationAsync() - { - // You can check if current platform is supported first. - if (!CodeHashGenerator.IsTargetPlatformCompatible()) - return; - - // This is a good practice to avoid new requests while generator is busy with previous requests. - if (CodeHashGenerator.Instance.IsBusy) - return; - - // using all available cores except 1 (we need to keep it free for the Main / UI thread) - var availableCores = Math.Max(1, Environment.ProcessorCount - 1); - - // You can await generation result and process it right away. - // Generation runs in separate thread avoiding cpu spikes in main thread. - // It generates hash only once and cache it for any new requests since hashed binaries do not change at runtime. - var generationResult = await CodeHashGenerator.GenerateAsync(availableCores); - - // re-using event listener to avoid code duplication - OnHashGenerated(generationResult); - } - - // Generated hash processing example - private void OnHashGenerated(HashGeneratorResult result) - { - BuildHashResult = result; - CodeHashGenerator.HashGenerated -= OnHashGenerated; - - if (result.Success) - { - Debug.Log($"Files hashed: {result.FileHashes.Count} in {result.DurationSeconds:F2} secs"); - foreach (var fileHash in result.FileHashes) - { - Debug.Log(fileHash.ToString()); - } - - // Here you can upload your hashes to the server to make a validation check on the server side and punish cheater with server logic. - // - // This is a preferred use case since cheater will have to figure out proper hash using - // packets sniffing (https packets harder to sniff) or debugging first to fake it on the client side requiring more - // skills and motivation from cheater. - // - // check SummaryHash first and if it differs (it can if your runtime build has only portion of the initial build you made in Unity) - // check FileHashes if SummaryHash differs to see if runtime build have any new hashes - it will indicate build is altered - // - // UploadHashes(result.SummaryHash, result.FileHashes); - - // Or you may compare it with hardcoded hashes if you did save them somewhere in the build previously. - // - // This is less preferred way since cheater can still try to hack your client-side validation check to make it always pass. - // Anyways, this is better than nothing and will require some additional time from cheater reducing overall motivation to hack your game. - // In case implementing it fully on the client side, make sure to compile IL2CPP build and use code - // obfuscation which runs integrated into the Unity build process so hashing will happen AFTER code obfuscation. - // If obfuscation will happen after hashing it will change code hash and you'll need to re-calculate it - // using Tools > Code Stage > Anti-Cheat Toolkit > Calculate external build hash feature. - // - // if (!CompareHashes(result.SummaryHash, result.FileHashes)) - // { - // Debug.Log("You patched my code, cheater!"); - // } - } - else - { - Debug.LogError("Oh, something went wrong while getting the hash!\n" + - "Error message: " + result.ErrorMessage); - } - } - - // Android app installation source detection example - private AppInstallationSource GetAndroidInstallationSource() - { - var installationSource = AppInstallationSourceValidator.GetAppInstallationSource(); - if (installationSource.DetectedSource == AndroidAppSource.AccessError) - { - Debug.LogError("Failed to detect installation source"); - } - else - { - Debug.Log($"Installed from: {installationSource.DetectedSource} (package name: {installationSource.PackageName})"); - - if (installationSource.DetectedSource != AndroidAppSource.GooglePlayStore) - Debug.LogWarning("App was installed not from the Google Play Store!"); - } - - return installationSource; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.cs.meta deleted file mode 100644 index 5ea672d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/GenuineChecksExamples.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5cdd7f4d9c5093c4ea9b389f6d3bf600 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.UI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.UI.cs deleted file mode 100644 index 3b1bf91..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.UI.cs +++ /dev/null @@ -1,294 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if !UNITY_WEBGL -#define ACTK_ASYNC -#endif - -namespace CodeStage.AntiCheat.Examples -{ - using UnityEngine; - - internal partial class ObscuredFilePrefsExamples - { - private readonly string[] sizes = { "B", "KB", "MB", "GB" }; - - private bool isLoadedGUI; - private bool isFileLoadingGUI; -#if ACTK_ASYNC - private bool isSettingBytesGUI; - private bool isGettingBytesGUI; -#endif - private bool isFileSavingGUI; - - private bool unloadPrefs; - private bool loadPrefs; - private bool loadPrefsAsync; - private bool setStringPref; - private bool getStringPref; - - public void DrawUI() - { - // change vars affecting OnGUI layout at the EventType.Layout - // to avoid errors while painting OnGUI - if (Event.current.type == EventType.Layout) - { - isLoadedGUI = IsLoaded; - isFileLoadingGUI = isFileLoading; - isFileSavingGUI = isFileSaving; - -#if ACTK_ASYNC - isSettingBytesGUI = isSettingBytes; - isGettingBytesGUI = isGettingBytes; -#endif - } - - GUILayout.Label("ACTk has secure version of traditional binary file with few helpful " + - "APIs built on top of it to make it as easy to use as usual Player Prefs."); - - using (new GUILayout.HorizontalScope(GUI.skin.box)) - { - using (new GUILayout.VerticalScope(GUILayout.Width(400))) - { - DrawStatusPanel(); - } - - // lock UI while waiting for something - GUI.enabled = !isFileLoading && !isFileSaving; -#if ACTK_ASYNC - GUI.enabled &= !isGettingBytes && !isSettingBytes; -#endif - - using (new GUILayout.VerticalScope()) - { - GUILayout.Label("Sandbox"); - - GUILayout.Space(5f); - - DrawLoadUnloadPanel(); - - GUILayout.Space(5f); - - DrawStringPrefPanel(); - -#if ACTK_ASYNC - GUILayout.Space(5f); - DrawBinaryPrefPanel(); -#endif - GUILayout.Space(5f); - - if (!IsLoaded) - GUI.enabled = false; - - DrawSavePanel(); - - GUI.enabled = IsExists && !isFileLoading && !isFileSaving; -#if ACTK_ASYNC - GUI.enabled &= !isGettingBytes && !isSettingBytes; -#endif - - if (GUILayout.Button("Delete all file prefs")) - { - DeleteAllPrefs(); - } - - GUI.enabled = true; - } - } - - // these are called at OnGUI end to avoid changing - // layout state causing logic conflicts - if (unloadPrefs) - { - UnloadPrefs(); - unloadPrefs = false; - } - - if (loadPrefs) - { - LoadPrefs(); - loadPrefs = false; - } - -#if ACTK_ASYNC - if (loadPrefsAsync) - { - LoadPrefsAsync(); - loadPrefsAsync = false; - } -#endif - - if (setStringPref) - { - SetStringPref(); - setStringPref = false; - } - - if (getStringPref) - { - GetStringPref(); - getStringPref = false; - } - } - - private void DrawStatusPanel() - { - var keys = GetKeys(); - var keysLabel = keys == null ? "Empty / not loaded" : string.Join(", ", keys); - - GUILayout.Label("Status"); - GUILayout.Label($"File exists: {ExamplesGUI.ColorizeGreenOrRed(IsExists.ToString(), IsExists)}\n" + - $"Prefs Loaded: {ExamplesGUI.ColorizeGreenOrRed(IsLoaded.ToString(), IsLoaded)}\n" + - $"Prefs keys: {keysLabel}\n" + - $"Data corruption detected: {ExamplesGUI.ColorizeGreenOrRed(NotGenuine.ToString(), !NotGenuine)}\n" + - $"Data from another device detected: {ExamplesGUI.ColorizeGreenOrRed(FromAnotherDevice.ToString(), !FromAnotherDevice)}"); - } - - private void DrawLoadUnloadPanel() - { - if (!isLoadedGUI) - { - if (isFileLoadingGUI) - { - GUILayout.Label("Loading..."); - } - else - { - using (new GUILayout.HorizontalScope()) - { - if (GUILayout.Button("Load prefs")) - { - loadPrefs = true; - } -#if ACTK_ASYNC - if (GUILayout.Button("Load prefs async")) - { - loadPrefsAsync = true; - } -#endif - } - } - } - else - { - if (GUILayout.Button("Unload prefs")) - { - unloadPrefs = true; - } - } - } - - private void DrawStringPrefPanel() - { - if (!isLoadedGUI) - return; - - GUILayout.Label("Enter any data you wish to save:"); - dataToSave = GUILayout.TextArea(dataToSave,GUILayout.Height(40)); - - if (GUILayout.Button("Set string pref")) - setStringPref = true; - - if (!string.IsNullOrEmpty(LoadedData)) - GUILayout.Label("Loaded data: " + LoadedData); - - var guiEnabled = GUI.enabled; - GUI.enabled = guiEnabled && HasKey(StringKey); - - if (GUILayout.Button("Load string pref")) - getStringPref = true; - - GUI.enabled = guiEnabled; - } - -#if ACTK_ASYNC - private void DrawBinaryPrefPanel() - { - if (!isLoadedGUI) - return; - - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label("Random bytes: ", GUILayout.ExpandWidth(false)); - - var value = GUILayout.TextField(bytesToSave.ToString(), GUILayout.Width(100)); - long.TryParse(value, out bytesToSave); - - if (bytesToSave > 1073741824) // cap it to 1 GB in demo - bytesToSave = 1073741824; - - GUILayout.Label($" {FormatBytes(bytesToSave)}"); - } - - if (isSettingBytesGUI) - GUILayout.Label("Setting & hashing bytes..."); - else if (savedBytesHash != 0) - GUILayout.Label($"Set byte[] with hash: {savedBytesHash}"); - - if (isGettingBytesGUI) - GUILayout.Label("Getting & hashing bytes..."); - else if (loadedBytesHash != 0) - GUILayout.Label($"Got byte[] with hash: {loadedBytesHash}"); - - using (new GUILayout.HorizontalScope()) - { - if (GUILayout.Button("Set & hash byte[] pref")) - SetBytesPref(); - - if (GUILayout.Button("Set & hash byte[] pref async")) - SetBytesPrefAsync(); - } - - var guiEnabled = GUI.enabled; - GUI.enabled = guiEnabled && HasKey(ByteArrayKey); - - using (new GUILayout.HorizontalScope()) - { - if (GUILayout.Button("Get & hash byte[]")) - GetBytesPref(); - - if (GUILayout.Button("Get & hash byte[] async")) - GetBytesPrefAsync(); - } - - GUI.enabled = guiEnabled; - } -#endif - - private void DrawSavePanel() - { - if (!isLoadedGUI) - return; - - if (isFileSavingGUI) - { - GUILayout.Label("Saving..."); - return; - } - - if (GUILayout.Button("Save prefs file")) - Save(); - -#if ACTK_ASYNC - if (GUILayout.Button("Save prefs file async")) - SaveAsync(); -#endif - } - - public string FormatBytes(double bytes) - { - var order = 0; - - while (bytes >= 1024 && order + 1 < 4) - { - order++; - bytes /= 1024; - } - - return $"{bytes:0.##} {sizes[order]}"; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.UI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.UI.cs.meta deleted file mode 100644 index 9ac258b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.UI.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: dca282ccd1894862afce85957d5cd899 -timeCreated: 1623189486 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.cs deleted file mode 100644 index f0f48f7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.cs +++ /dev/null @@ -1,212 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if !UNITY_WEBGL -#define ACTK_ASYNC -#endif - -// add this line in order to use obscured file prefs from code -using CodeStage.AntiCheat.Storage; - -namespace CodeStage.AntiCheat.Examples -{ -#if ACTK_ASYNC - using System.Threading.Tasks; - using Utils; -#endif - using System.Collections.Generic; - using UnityEngine; - - internal partial class ObscuredFilePrefsExamples : MonoBehaviour - { - private const string StringKey = "string example"; - -#if ACTK_ASYNC - private const string ByteArrayKey = "byte[] example"; -#endif - - [SerializeField] - private string dataToSave; - -#if ACTK_ASYNC - [SerializeField] - private long bytesToSave = 16777216; // 16 MB -#endif - - private uint savedBytesHash; - private uint loadedBytesHash; - - private string LoadedData { get; set; } - private bool NotGenuine { get; set; } - private bool FromAnotherDevice { get; set; } - - private bool IsExists => ObscuredFilePrefs.IsExists; - private bool IsLoaded => ObscuredFilePrefs.IsLoaded; - - private bool isFileSaving; - private bool isFileLoading; - -#if ACTK_ASYNC - private bool isSettingBytes; - private bool isGettingBytes; -#endif - - private void Start() - { - var deviceLockSettings = new DeviceLockSettings(DeviceLockLevel.Strict); - var encryptionSettings = new EncryptionSettings("super secret password"); - var settings = new ObscuredFileSettings(encryptionSettings, deviceLockSettings); - - // Always initialize ObscuredFilePrefs before using. - // In this case, it's initialized with such settings: - // - device lock enabled (Strict), - // - encryption enabled (with "super secret password") - // - data integrity validation: true - // - file location: default (Application.persistentDataPath) - // - file name: "ACTkFilePrefs.bin" - // - immediate prefs loading: false - ObscuredFilePrefs.Init("ACTkFilePrefs.bin", settings, false); - - // Subscribe to these events to detect data integrity violation and data from another devices: - ObscuredFilePrefs.NotGenuineDataDetected += OnNotGenuineDataDetected; - ObscuredFilePrefs.DataFromAnotherDeviceDetected += OnDataFromAnotherDeviceDetected; - - // Feel free to access different settings and properties like this: - Debug.Log($"{nameof(ObscuredFilePrefs)} file path: {ObscuredFilePrefs.FilePath}\n" + - $"{nameof(ObscurationMode)}: {ObscuredFilePrefs.CurrentSettings.EncryptionSettings.ObscurationMode}"); -#if ACTK_ASYNC - // Call this if you're going to use ObscuredFile or ObscuredFilePrefs - // from non-main thread while using Lock To Device feature without custom DeviceId - // or with default file path to avoid exception due to Unity API access from non-main thread. - Common.UnityApiResultsHolder.InitForAsyncUsage(true); - - PrewarmAsync(); -#endif - } - -#if ACTK_ASYNC - private async void PrewarmAsync() - { - // just to prewarm async stuff so first - // async call would not produce spike - await Task.Delay(500); - } - - private void SetBytesPref() - { - isSettingBytes = true; - - var data = new byte[bytesToSave]; - for (var i = 0; i < bytesToSave; i++) - { - data[i] = (byte)ThreadSafeRandom.Next(0, 256); - } - - savedBytesHash = xxHash.CalculateHash(data, data.Length, 4444); - ObscuredFilePrefs.Set(ByteArrayKey, data); - - isSettingBytes = false; - } - - private void GetBytesPref() - { - isGettingBytes = true; - - var data = ObscuredFilePrefs.Get(ByteArrayKey, System.Array.Empty()); - loadedBytesHash = xxHash.CalculateHash(data, data.Length, 4444); - - isGettingBytes = false; - } - - // Here are examples of async usage from non-main thread. - // Please note ObscuredFile and ObscuredFilePrefs are not thread-safe and - // should not be used simultaneously from different threads. - private async void SetBytesPrefAsync() - { - savedBytesHash = 0; - await Task.Run(SetBytesPref); - } - - private async void GetBytesPrefAsync() - { - loadedBytesHash = 0; - await Task.Run(GetBytesPref); - } - - private async void LoadPrefsAsync() - { - await Task.Run(LoadPrefs); - } - - private async void SaveAsync() - { - await Task.Run(Save); - } -#endif - private void LoadPrefs() - { - if (isFileLoading) - return; - - isFileLoading = true; - ObscuredFilePrefs.LoadPrefs(); - isFileLoading = false; - } - - private void UnloadPrefs() - { - ObscuredFilePrefs.UnloadPrefs(false); - } - - private bool HasKey(string key) - { - return ObscuredFilePrefs.HasKey(key); - } - - private ICollection GetKeys() - { - return IsLoaded ? ObscuredFilePrefs.GetKeys() : null; - } - - private void SetStringPref() - { - ObscuredFilePrefs.Set(StringKey, dataToSave); - } - - private void GetStringPref() - { - LoadedData = ObscuredFilePrefs.Get(StringKey, "No data found!"); - } - - private void DeleteAllPrefs() - { - ObscuredFilePrefs.DeleteAll(); - } - - private void OnNotGenuineDataDetected() - { - NotGenuine = true; - } - - private void OnDataFromAnotherDeviceDetected() - { - FromAnotherDevice = true; - } - - private void Save() - { - if (isFileSaving) - return; - - isFileSaving = true; - - if (!ObscuredFilePrefs.Save()) - Debug.LogError("Couldn't save prefs!"); - - isFileSaving = false; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.cs.meta deleted file mode 100644 index 9912070..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredFilePrefsExamples.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8332ee246a4e4720931b08f5144f61c2 -timeCreated: 1620055049 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.UI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.UI.cs deleted file mode 100644 index fdc71a9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.UI.cs +++ /dev/null @@ -1,109 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Examples -{ - using System; - using Storage; - using UnityEngine; - - internal partial class ObscuredPrefsExamples - { - private DeviceLockLevel savesLock; - private DeviceLockTamperingSensitivity tamperingSensitivity; - - public void DrawUI() - { - GUILayout.Label($"ACTk has secure layer for the PlayerPrefs: {ExamplesGUI.Colorize(nameof(ObscuredPrefs), ExamplesGUI.BlueColor)}. " + - "It protects data from view, detects any cheating attempts, " + - "optionally locks data to the current device and supports additional data types."); - GUILayout.Space(5); - GUILayout.Label("Below you can try to cheat both regular PlayerPrefs and secure ObscuredPrefs:"); - GUILayout.Space(5); - using (new GUILayout.VerticalScope()) - { - using (new GUILayout.VerticalScope(GUI.skin.box)) - { - GUILayout.Label($"{ExamplesGUI.Colorize($"{nameof(PlayerPrefs)}:", ExamplesGUI.RedColor)}\n" + - "easy to cheat, only 3 supported types"); - GUILayout.Space(5); - if (string.IsNullOrEmpty(regularPrefs)) - { - LoadRegularPrefs(); - } - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label(regularPrefs, GUILayout.Width(450)); - using (new GUILayout.VerticalScope()) - { - using (new GUILayout.HorizontalScope()) - { - if (GUILayout.Button("Save")) - SaveRegularPrefs(); - if (GUILayout.Button("Load")) - LoadRegularPrefs(); - } - if (GUILayout.Button("Delete")) - DeleteRegularPrefs(); - } - } - } - GUILayout.Space(5); - using (new GUILayout.VerticalScope(GUI.skin.box)) - { - GUILayout.Label($"{ExamplesGUI.ColorizeGreenOrRed($"{nameof(ObscuredPrefs)}:", true)}\n" + - "secure, lot of additional types and extra options"); - GUILayout.Space(5); - if (string.IsNullOrEmpty(obscuredPrefs)) - LoadObscuredPrefs(); - - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label(obscuredPrefs, GUILayout.Width(450)); - using (new GUILayout.VerticalScope()) - { - using (new GUILayout.HorizontalScope()) - { - if (GUILayout.Button("Save")) - SaveObscuredPrefs(); - if (GUILayout.Button("Load")) - LoadObscuredPrefs(); - } - if (GUILayout.Button("Delete")) - DeleteObscuredPrefs(); - - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label("LockToDevice level"); - } - - savesLock = (DeviceLockLevel)GUILayout.SelectionGrid((int)savesLock, Enum.GetNames(typeof(DeviceLockLevel)), 3); - ApplyDeviceLockLevel(savesLock); - - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label("TamperingSensitivity level"); - } - - tamperingSensitivity = (DeviceLockTamperingSensitivity)GUILayout.SelectionGrid((int)tamperingSensitivity, Enum.GetNames(typeof(DeviceLockTamperingSensitivity)), 3); - ApplyTamperingSensitivity(tamperingSensitivity); - - GUILayout.Space(5); - using (new GUILayout.HorizontalScope()) - { - PreservePlayerPrefs = GUILayout.Toggle(PreservePlayerPrefs, "preservePlayerPrefs"); - } - GUILayout.Space(5); - GUILayout.Label(ExamplesGUI.ColorizeGreenOrRed("Saves modification detected: " + savesAlterationDetected, !savesAlterationDetected)); - GUILayout.Label(ExamplesGUI.ColorizeGreenOrRed("Foreign saves detected: " + foreignSavesDetected, !foreignSavesDetected)); - } - } - } - GUILayout.Space(5); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.UI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.UI.cs.meta deleted file mode 100644 index 5712456..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.UI.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9ecab7daaf894cd5ae3f75caddc6823a -timeCreated: 1623189874 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.cs deleted file mode 100644 index 6524575..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.cs +++ /dev/null @@ -1,202 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -// add this line in order to use obscured prefs from code -using CodeStage.AntiCheat.Storage; - -namespace CodeStage.AntiCheat.Examples -{ - using UnityEngine; - - internal partial class ObscuredPrefsExamples : MonoBehaviour - { - private const string PrefsString = "name"; - private const string PrefsInt = "money"; - private const string PrefsFloat = "lifeBar"; - private const string PrefsBool = "gameComplete"; - private const string PrefsUint = "demoUint"; - private const string PrefsLong = "demoLong"; - private const string PrefsDouble = "demoDouble"; - private const string PrefsVector2 = "demoVector2"; - private const string PrefsVector3 = "demoVector3"; - private const string PrefsQuaternion = "demoQuaternion"; - private const string PrefsRect = "demoRect"; - private const string PrefsColor = "demoColor"; - private const string PrefsColor32 = "demoColor32"; - private const string PrefsByteArray = "demoByteArray"; - - [ColorUsage(true, true)] - [SerializeField] - #pragma warning disable CS0649 - private Color hdrColor; - #pragma warning restore CS0649 - - private string regularPrefs; - private string obscuredPrefs; - - private bool savesAlterationDetected; - private bool foreignSavesDetected; - - // you can keep original PlayerPrefs values while - // migrating to the ObscuredPrefs if you wish to - private bool PreservePlayerPrefs - { - get => ObscuredPrefs.preservePlayerPrefs; - set => ObscuredPrefs.preservePlayerPrefs = value; - } - - private void Awake() - { - // you can detect saves alteration attempts using this event - ObscuredPrefs.NotGenuineDataDetected += OnSavesNotGenuineDataDetected; - - // and even may react on foreign saves (from another device) - ObscuredPrefs.DataFromAnotherDeviceDetected += OnDataFromAnotherDeviceDetected; - - MigrateFromV1(); - } - - private void OnDestroy() - { - DeleteRegularPrefs(); - DeleteObscuredPrefs(); - } - - private void OnSavesNotGenuineDataDetected() - { - savesAlterationDetected = true; - } - - private void OnDataFromAnotherDeviceDetected() - { - foreignSavesDetected = true; - } - - private void LoadRegularPrefs() - { - regularPrefs = "int: " + PlayerPrefs.GetInt(PrefsInt, -1) + "\n"; - regularPrefs += "float: " + PlayerPrefs.GetFloat(PrefsFloat, -1) + "\n"; - regularPrefs += "string: " + PlayerPrefs.GetString(PrefsString, "No saved PlayerPrefs!"); - } - - private void SaveRegularPrefs() - { - PlayerPrefs.SetInt(PrefsInt, 456); - PlayerPrefs.SetFloat(PrefsFloat, 456.789f); - PlayerPrefs.SetString(PrefsString, "Hey, there!"); - PlayerPrefs.Save(); - } - - private void DeleteRegularPrefs() - { - PlayerPrefs.DeleteKey(PrefsInt); - PlayerPrefs.DeleteKey(PrefsFloat); - PlayerPrefs.DeleteKey(PrefsString); - PlayerPrefs.Save(); - } - - private void ApplyDeviceLockLevel(DeviceLockLevel level) - { - // you can lock saves to the device (so they can't be read on another device) - // there are few different levels of strictness, please see DeviceLockSettings - // API docs for additional details; - // set to None by default (does not lock to device) - ObscuredPrefs.DeviceLockSettings.Level = level; - } - - private void ApplyTamperingSensitivity(DeviceLockTamperingSensitivity value) - { - // in case you can't read locked to the device saves for - // some reason (e.g. device ID unexpectedly changed), you - // can use different DeviceLockTamperingSensitivity modes - // to bypass lock to device and recover your saves - ObscuredPrefs.DeviceLockSettings.Sensitivity = value; - } - - private void LoadObscuredPrefs() - { - // you can store typical int, float and string at the ObscuredPrefs - obscuredPrefs = "int: " + ObscuredPrefs.Get(PrefsInt, -1) + "\n"; - obscuredPrefs += "float: " + ObscuredPrefs.Get(PrefsFloat, -1f) + "\n"; - obscuredPrefs += "string: " + ObscuredPrefs.Get(PrefsString, "No saved ObscuredPrefs!") + "\n"; - - // comparing to the vanilla PlayerPrefs, you have much more freedom on what to save - obscuredPrefs += "bool: " + ObscuredPrefs.Get(PrefsBool, false) + "\n"; - obscuredPrefs += "uint: " + ObscuredPrefs.Get(PrefsUint, 0u) + "\n"; - obscuredPrefs += "long: " + ObscuredPrefs.Get(PrefsLong, -1L) + "\n"; - obscuredPrefs += "double: " + ObscuredPrefs.Get(PrefsDouble, -1d) + "\n"; - obscuredPrefs += "Vector2: " + ObscuredPrefs.Get(PrefsVector2, Vector2.zero) + "\n"; - obscuredPrefs += "Vector3: " + ObscuredPrefs.Get(PrefsVector3, Vector3.zero) + "\n"; - obscuredPrefs += "Quaternion: " + ObscuredPrefs.Get(PrefsQuaternion, Quaternion.identity) + "\n"; - obscuredPrefs += "Rect: " + ObscuredPrefs.Get(PrefsRect, new Rect(0, 0, 0, 0)) + "\n"; - obscuredPrefs += "Color: " + ObscuredPrefs.Get(PrefsColor, Color.black) + "\n"; - obscuredPrefs += "Color32: " + ObscuredPrefs.Get(PrefsColor, (Color32)Color.black) + "\n"; - - // you can even store raw byte array with any data inside - var ba = ObscuredPrefs.Get(PrefsByteArray, new byte[4]); - obscuredPrefs += "byte[]: {" + ba[0] + "," + ba[1] + "," + ba[2] + "," + ba[3] + "}"; - } - - private void SaveObscuredPrefs() - { - // same types as at the regular PlayerPrefs - ObscuredPrefs.Set(PrefsInt, 123); - ObscuredPrefs.Set(PrefsFloat, 123.456f); - ObscuredPrefs.Set(PrefsString, "Goscurry is not a lie ;)"); - - // some of additional types, just for example, - // see full supported types list at StorageDataType enum - ObscuredPrefs.Set(PrefsBool, true); - ObscuredPrefs.Set(PrefsUint, 1234567891u); - ObscuredPrefs.Set(PrefsLong, 1234567891234567890L); - ObscuredPrefs.Set(PrefsDouble, 1.234567890123456d); - ObscuredPrefs.Set(PrefsVector2, Vector2.one); - ObscuredPrefs.Set(PrefsVector3, Vector3.one); - ObscuredPrefs.Set(PrefsQuaternion, Quaternion.Euler(new Vector3(10, 20, 30))); - ObscuredPrefs.Set(PrefsRect, new Rect(1.5f, 2.6f, 3.7f, 4.8f)); - ObscuredPrefs.Set(PrefsColor, hdrColor); - ObscuredPrefs.Set(PrefsColor32, Color.red); - ObscuredPrefs.Set(PrefsByteArray, new byte[] { 44, 104, 43, 32 }); - - ObscuredPrefs.Save(); - } - - private void DeleteObscuredPrefs() - { - ObscuredPrefs.DeleteKey(PrefsInt); - ObscuredPrefs.DeleteKey(PrefsFloat); - ObscuredPrefs.DeleteKey(PrefsString); - ObscuredPrefs.DeleteKey(PrefsBool); - ObscuredPrefs.DeleteKey(PrefsUint); - ObscuredPrefs.DeleteKey(PrefsLong); - ObscuredPrefs.DeleteKey(PrefsDouble); - ObscuredPrefs.DeleteKey(PrefsVector2); - ObscuredPrefs.DeleteKey(PrefsVector3); - ObscuredPrefs.DeleteKey(PrefsQuaternion); - ObscuredPrefs.DeleteKey(PrefsRect); - ObscuredPrefs.DeleteKey(PrefsColor); - ObscuredPrefs.DeleteKey(PrefsColor32); - ObscuredPrefs.DeleteKey(PrefsByteArray); - - ObscuredPrefs.Save(); - } - - private void MigrateFromV1() - { - // here is a migration example for the raw values you got from ACTk v1 ObscuredPrefs.GetRawValue() - // - // first you need to encrypt clean prefs key value with the v1 encryption - // (you can ignore second argument to use default Crypto Key) - // var v1PrefsKey = ObscuredPrefs.EncryptKeyWithACTkV1Algorithm(prefsKey, cryptoKey); - // - // then just set it back as normal (v1RawValue - value you got from v1 GetRawValue()) - // ObscuredPrefs.SetRawValue(v1PrefsKey, v1RawValue); - // - // now you can read it back as usual and it will be automatically migrated to v2 format: - // var savedData = ObscuredPrefs.GetFloat(prefsKey); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.cs.meta deleted file mode 100644 index 6a7e8ad..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredPrefsExamples.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 87388f037bda48d49a6448f583e27215 -timeCreated: 1540485351 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.UI.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.UI.cs deleted file mode 100644 index 8b6dfd3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.UI.cs +++ /dev/null @@ -1,141 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Examples -{ - using System.Linq; - using ObscuredTypes; - using UnityEngine; - - internal partial class ObscuredTypesExamples - { - private string allSimpleObscuredTypes; - - public void DrawUI(ExamplesGUI examplesGUIInstance) - { - GUILayout.Label("ACTk offers own collection of the secure types to let you protect your variables from ANY memory hacking tools (Cheat Engine, ArtMoney, GameCIH, Game Guardian, etc.)."); - GUILayout.Label("Below you can try to cheat few variables of the regular types and their obscured (secure) analogues (you may change initial values from Tester object inspector):"); - GUILayout.Space(5); - using (new GUILayout.HorizontalScope()) - { - using (new GUILayout.VerticalScope()) - { - GUILayout.Label("Obscured types:", GUILayout.MinWidth(130)); - GUILayout.Label($"{ExamplesGUI.Colorize($"{Get()}", ExamplesGUI.BlueColor)}", GUILayout.MinWidth(130)); - } - GUILayout.Space(10); - using (new GUILayout.VerticalScope(GUI.skin.box)) - { - #region int - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label($"int:\n{regularInt}", GUILayout.Width(250)); - if (GUILayout.Button("Add random value")) - regularInt += Random.Range(1, 100); - if (GUILayout.Button("Reset")) - regularInt = 0; - } - - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label($"ObscuredInt:\n{obscuredInt}", GUILayout.Width(250)); - if (GUILayout.Button("Add random value")) - obscuredInt += Random.Range(1, 100); - if (GUILayout.Button("Reset")) - obscuredInt = 0; - } - #endregion - - #region float - GUILayout.Space(10); - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label($"float:\n{regularFloat}", GUILayout.Width(250)); - if (GUILayout.Button("Add random value")) - regularFloat += Random.Range(1f, 100f); - if (GUILayout.Button("Reset")) - regularFloat = 0; - } - - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label($"ObscuredFloat:\n{obscuredFloat}", GUILayout.Width(250)); - if (GUILayout.Button("Add random value")) - obscuredFloat += Random.Range(1f, 100f); - if (GUILayout.Button("Reset")) - obscuredFloat = 0; - } - #endregion - - #region Vector3 - GUILayout.Space(10); - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label($"Vector3:\n{regularVector3}", GUILayout.Width(250)); - if (GUILayout.Button("Add random value")) - regularVector3 += Random.insideUnitSphere; - if (GUILayout.Button("Reset")) - regularVector3 = Vector3.zero; - } - - using (new GUILayout.HorizontalScope()) - { - GUILayout.Label($"ObscuredVector3:\n{obscuredVector3}", GUILayout.Width(250)); - if (GUILayout.Button("Add random value")) - obscuredVector3 += Random.insideUnitSphere; - if (GUILayout.Button("Reset")) - obscuredVector3 = Vector3.zero; - } - - var detected = examplesGUIInstance.DetectorsExamples.obscuredTypeCheatDetected; - GUILayout.Label(ExamplesGUI.ColorizeGreenOrRed($"Cheating attempt detected: {detected.ToString()}", !detected)); - - #endregion - } - } - } - - private string Get() - { - var result = "Can't use reflection here, sorry :("; - var types = ""; - - if (string.IsNullOrEmpty(allSimpleObscuredTypes)) - { - var csharpAssembly = typeof(ObscuredInt).Assembly; - var q = from t in csharpAssembly.GetTypes() - where t.IsPublic && t.Namespace == "CodeStage.AntiCheat.ObscuredTypes" && t.Name != "IObscuredType" - select t; - q.ToList().ForEach(t => - { - if (types.Length > 0) - { - types += "\n" + t.Name; - } - else - { - types += t.Name; - } - }); - - if (!string.IsNullOrEmpty(types)) - { - result = types; - allSimpleObscuredTypes = types; - } - else - { - allSimpleObscuredTypes = result; - } - } - else - { - result = allSimpleObscuredTypes; - } - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.UI.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.UI.cs.meta deleted file mode 100644 index bed1416..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.UI.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c0e1d48066a44b34921ae337f72fde1c -timeCreated: 1623189587 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.cs deleted file mode 100644 index ad7ad94..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.cs +++ /dev/null @@ -1,155 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -// add this line in order to use any obscured types from code -using CodeStage.AntiCheat.ObscuredTypes; - -using System; -using System.Numerics; -using System.Text; -using UnityEngine; -using Random = UnityEngine.Random; -using Vector2 = UnityEngine.Vector2; -using Vector3 = UnityEngine.Vector3; - -namespace CodeStage.AntiCheat.Examples -{ - internal partial class ObscuredTypesExamples : MonoBehaviour - { - [Header("Regular variables")] - public string regularString = "I'm regular string"; - - public int regularInt = 1987; - public float regularFloat = 2013.0524f; - public Vector3 regularVector3 = new Vector3(10.5f, 11.5f, 12.5f); - - // you can declare obscured variables like this and they will - // appear in the inspector - // - // you can change values in inspector and they will be - // automatically encrypted under the hood - [Header("Obscured (secure) variables")] - public ObscuredString obscuredString = "I'm obscured string"; - public ObscuredInt obscuredInt = 1987; - public ObscuredFloat obscuredFloat = 2013.0524f; - public ObscuredVector3 obscuredVector3 = new Vector3(10.5f, 11.5f, 12.5f); - public ObscuredBool obscuredBool = true; - public ObscuredLong obscuredLong = 945678987654123345L; - public ObscuredDouble obscuredDouble = 9.45678987654d; - public ObscuredVector2 obscuredVector2 = new Vector2(8.5f, 9.5f); - public ObscuredDecimal obscuredDecimal = 503.4521m; - public ObscuredVector2Int obscuredVector2Int = new Vector2Int(8, 9); - public ObscuredVector3Int obscuredVector3Int = new Vector3Int(15, 16, 17); - public ObscuredBigInteger obscuredBigInteger = BigInteger.Multiply(293847239847, 12312313); - public ObscuredDateTime obscuredDateTime = new DateTime(2023, 05, 19, 13, 57, 00, DateTimeKind.Utc); - - private readonly StringBuilder logBuilder = new StringBuilder(); - - private void Awake() - { - ObscuredStringExample(); - ObscuredIntExample(); - } - - private void Start() - { - // values set in inspector can be used as usual - - logBuilder.Length = 0; - logBuilder.AppendLine("obscuredString value from inspector: " + obscuredString); - logBuilder.AppendLine("ObscuredDecimal value from inspector: " + obscuredDecimal); - logBuilder.AppendLine("ObscuredBool value from inspector: " + obscuredBool); - logBuilder.AppendLine("ObscuredLong value from inspector: " + obscuredLong); - logBuilder.AppendLine("ObscuredDouble value from inspector: " + obscuredDouble); - logBuilder.AppendLine("ObscuredVector2 value from inspector: " + obscuredVector2); - logBuilder.AppendLine("ObscuredVector2Int value from inspector: " + obscuredVector2Int); - logBuilder.AppendLine("ObscuredVector3Int value from inspector: " + obscuredVector3Int); - logBuilder.AppendLine("ObscuredBigInteger value from inspector: " + obscuredBigInteger); - logBuilder.AppendLine("ObscuredDateTime value from inspector: " + obscuredDateTime); - - Debug.Log(logBuilder); - - // to make it harder to find encrypted value with unknown value search, - // you can change encrypted value at the unexpected moments so cheater - // can't guess if it was changed or not - // - // check RandomizeCryptoKey() API docs for more details - Invoke(nameof(RandomizeObscuredVars), Random.Range(1f, 1f)); - } - - private void RandomizeObscuredVars() - { - obscuredInt.RandomizeCryptoKey(); - obscuredFloat.RandomizeCryptoKey(); - obscuredString.RandomizeCryptoKey(); - obscuredVector3.RandomizeCryptoKey(); - - // change interval each time to make it inconsistent - Invoke(nameof(RandomizeObscuredVars), Random.Range(1f, 10f)); - } - - private void ObscuredStringExample() - { - /* -------------- usage example -------------- */ - - // hey, Daniele! ;D - var regular = "the Goscurry is not a lie ;)"; - - // obscured <-> regular conversion is implicit - ObscuredString obscured = regular; - - // you can get raw encrypted value at any time - // and save it somewhere for example along with encryptionKey - char[] encryptionKey; - var encryptedValueRaw = obscured.GetEncrypted(out encryptionKey); - - // to construct new obscured instance from it after loading it back - var newObscured = ObscuredString.FromEncrypted(encryptedValueRaw, encryptionKey); - - // all other obscured types have similar usage pipeline and APIs - - /* -------------- logs-------------- */ - - logBuilder.Length = 0; - logBuilder.AppendLine("[ ObscuredString example ]"); - logBuilder.AppendLine("Original value:\n" + regular); - logBuilder.AppendLine("Obscured value in memory:\n" + new string(newObscured.GetEncrypted(out encryptionKey))); - Debug.Log(logBuilder); - } - - private void ObscuredIntExample() - { - /* -------------- usage example -------------- */ - - var regular = 5; - - // obscured <-> regular conversion is implicit - var obscured = (ObscuredInt)regular; - - // all usual operations are supported - regular = obscured; - obscured = regular; - obscured -= 2; - obscured = obscured + regular + 10; - obscured = obscured / 2; - obscured++; - obscured--; - - // all other obscured types have similar usage pipeline and APIs - - /* -------------- logs-------------- */ - - logBuilder.Length = 0; - logBuilder.AppendLine("[ ObscuredInt example ]"); - logBuilder.AppendLine("Original lives count: " + regular); - int key; - logBuilder.AppendLine("Obscured lives count in memory: " + ((ObscuredInt)regular).GetEncrypted(out key)); - logBuilder.AppendLine("Lives count after few operations with obscured value: " + obscured + " (" + obscured.ToString("X") + "h)"); - - Debug.Log(logBuilder); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.cs.meta deleted file mode 100644 index d51085b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/API Examples/Scripts/Runtime/UsageExamples/ObscuredTypesExamples.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8528554a675bd23498b237325c380884 -timeCreated: 1540481638 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation.meta deleted file mode 100644 index 449fa5a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9275a7b02ff45784fabb1c89351dbfc3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/GenuineValidator.unity b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/GenuineValidator.unity deleted file mode 100644 index 2392b0b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/GenuineValidator.unity +++ /dev/null @@ -1,230 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 10 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 2 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &1603706224 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1603706225} - - component: {fileID: 1603706226} - m_Layer: 0 - m_Name: GenuineValidatorExample - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1603706225 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1603706224} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1603706226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1603706224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 21ed2f1676e9ff74aa1fdab58b70b555, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1997590293 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1997590297} - - component: {fileID: 1997590296} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!20 &1997590296 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1997590293} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1997590297 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1997590293} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/GenuineValidator.unity.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/GenuineValidator.unity.meta deleted file mode 100644 index 7a598be..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/GenuineValidator.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5d8cd15768d39b141a1a5365bb23b201 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts.meta deleted file mode 100644 index 3ab839f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e5119e5457a101647a9da1aedbec9967 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor.meta deleted file mode 100644 index 7de391e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3409a1020ce23894599ab521dc37df43 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/ACTk.Examples.Genuine.Editor.asmdef b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/ACTk.Examples.Genuine.Editor.asmdef deleted file mode 100644 index 14eec6e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/ACTk.Examples.Genuine.Editor.asmdef +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "ACTk.Examples.Genuine.Editor", - "references": [ - "ACTk.Editor", - "ACTk.Runtime", - "ACTk.Examples.Genuine.Runtime" - ], - "optionalUnityReferences": [], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/ACTk.Examples.Genuine.Editor.asmdef.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/ACTk.Examples.Genuine.Editor.asmdef.meta deleted file mode 100644 index a1b29dc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/ACTk.Examples.Genuine.Editor.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 3d30640b987b94d4985e17688c96ee4b -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/CodeHashGeneratorListener.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/CodeHashGeneratorListener.cs deleted file mode 100644 index 68b4d37..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/CodeHashGeneratorListener.cs +++ /dev/null @@ -1,121 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -// comment next line and build GenuineValidator scene for Windows PC platform to see CodeHashGeneratorListener example in action -#define ACTK_MUTE_EXAMPLES - -#if !ACTK_MUTE_EXAMPLES -using System.IO; -using System.Collections.Generic; -using CodeStage.AntiCheat.Common; -using CodeStage.AntiCheat.EditorCode; -using CodeStage.AntiCheat.EditorCode.PostProcessors; -using CodeStage.AntiCheat.Genuine.CodeHash; -using CodeStage.AntiCheat.ObscuredTypes; -using UnityEditor; -using UnityEditor.Build; -using UnityEditor.Build.Reporting; -using UnityEngine; - -namespace CodeStage.AntiCheat.Examples.Genuine -{ - // please check GenuineValidatorExample.cs to see runtime hash validation example - // note: this is an example for the Windows Standalone platform only! - public class CodeHashGeneratorListener : IPostprocessBuildWithReport - { - // using CodeHashGeneratorPostprocessor's 'order - 1' to subscribe before it finishes its job - public int callbackOrder => CodeHashGeneratorPostprocessor.CallbackOrder - 1; - - public void OnPostprocessBuild(BuildReport report) - { - // make sure example scene is built as a first scene, feel free to remove this in your real production code - var exampleBuilt = true; - foreach (var editorBuildSettingsScene in EditorBuildSettings.scenes) - { - if (!editorBuildSettingsScene.enabled) - continue; - - if (!editorBuildSettingsScene.path.EndsWith("Code Genuine Validation/GenuineValidator.unity")) - { - exampleBuilt = false; - break; - } - } - - if (!exampleBuilt) - return; - - // make sure current platform is Windows Standalone - if (report.summary.platform != BuildTarget.StandaloneWindows && - report.summary.platform != BuildTarget.StandaloneWindows64) - { - Debug.LogError("Please switch to Standalone Windows platform in order to use full GenuineValidator example."); - return; - } - - // make sure hash generation enabled in settings - if (!ACTkSettings.Instance.PreGenerateBuildHash) - { - Debug.LogError("Please enable code hash generation on build in the ACTk Settings in order to use full GenuineValidator example."); - return; - } - - // just subscribing to the hash generation event - CodeHashGeneratorPostprocessor.HashesGenerated += OnHashesGenerated; - } - - private static void OnHashesGenerated(BuildReport report, IReadOnlyList hashedBuilds) - { - Debug.Log("CodeHashGeneratorListener example listener saying hello."); - - var whitelistedHashes = string.Empty; - - // Upload hashes to the server or do anything you would like to. - // - // Note, you may have multiple builds each with own hashes in some cases after build, - // e.g. when using "Split APKs by target architecture" option. - foreach (var hashedBuild in hashedBuilds) - { - hashedBuild.PrintToConsole(); - - whitelistedHashes += hashedBuild.SummaryHash + GenuineValidatorExample.Separator; - - var fileHashes = hashedBuild.FileHashes; - var fileHashesLength = fileHashes.Count; - for (var i = 0; i < fileHashesLength; i++) - { - var fileHash = fileHashes[i]; - whitelistedHashes += fileHash.Hash; - - if (i != fileHashesLength - 1) - { - whitelistedHashes += GenuineValidatorExample.Separator; - } - } - } - - // for example, you may put hashes next to the standalone build to compare them offline - // just as a proof of concept, but please consider uploading your hashes to the server - // and make comparison on the server-side instead when possible to add cheaters some more pain - var outputFolder = Path.GetDirectoryName(report.summary.outputPath); - if (string.IsNullOrEmpty(outputFolder) || !Directory.Exists(outputFolder)) - { - Debug.LogError(ACTk.LogPrefix + "Couldn't find build folder!"); - return; - } - - var filePath = Path.Combine(outputFolder, GenuineValidatorExample.FileName); - - // encrypt to hide hashes from the eye - var encryptedValue = ObscuredString.Encrypt(whitelistedHashes, GenuineValidatorExample.StringKey); - - // now just get raw bytes and write them to the file to compare hashes in runtime - var bytes = GenuineValidatorExample.UnicodeCharsToBytes(encryptedValue); - File.WriteAllBytes(filePath, bytes); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/CodeHashGeneratorListener.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/CodeHashGeneratorListener.cs.meta deleted file mode 100644 index 94724d0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Editor/CodeHashGeneratorListener.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d55ac4b1b5164ff4cadce6b3d95d2ea0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime.meta deleted file mode 100644 index 2dbabf4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 19586c683e648dc418c5f15735f2b151 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/ACTk.Examples.Genuine.Runtime.asmdef b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/ACTk.Examples.Genuine.Runtime.asmdef deleted file mode 100644 index 8a57838..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/ACTk.Examples.Genuine.Runtime.asmdef +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ACTk.Examples.Genuine.Runtime", - "references": [ - "ACTk.Runtime" - ], - "optionalUnityReferences": [], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/ACTk.Examples.Genuine.Runtime.asmdef.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/ACTk.Examples.Genuine.Runtime.asmdef.meta deleted file mode 100644 index 17d640e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/ACTk.Examples.Genuine.Runtime.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: aafa4e30070a7144198fb13b3d39c456 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/GenuineValidatorExample.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/GenuineValidatorExample.cs deleted file mode 100644 index 4e3421c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/GenuineValidatorExample.cs +++ /dev/null @@ -1,132 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Examples.Genuine -{ - using Utils; - using UnityEngine; - using CodeStage.AntiCheat.Genuine.CodeHash; - using System; - using System.IO; - using ObscuredTypes; - - // use this to check hash generated with CodeHashGeneratorListener.cs example file - // note: this is an example for the Windows Standalone platform only! - public class GenuineValidatorExample : MonoBehaviour - { - // 💖 looks like a really lovely separator =) - // used at CodeHashGeneratorListener - public const string Separator = "💖"; - - // let's choose some non-obvious file name which will not be hashed (not .dll or .exe) - // used at CodeHashGeneratorListener - public const string FileName = "Textures.asset"; - - // used at CodeHashGeneratorListener - public static readonly char[] StringKey = {'\x674', '\x345', '\x856', '\x968', '\x322'}; - - private string status = "Press Check"; - - // just an unoptimized example of SHA1 hashing - public static string GetHash(string firstBuildHash) - { - var stringBytes = StringUtils.StringToBytes(firstBuildHash); - using (var sha1 = new SHA1Wrapper()) - { - var hash = sha1.ComputeHash(stringBytes); - return StringUtils.HashBytesToHexString(hash); - } - } - - private void OnGUI() - { - if (!CodeHashGenerator.Instance.IsBusy) - { - if (GUILayout.Button("Check")) - OnCheckHashClick(); - } - - GUILayout.Label(status); - } - - private async void OnCheckHashClick() - { - status = "Checking..."; - try - { - var result = await CodeHashGenerator.GenerateAsync(); - OnGotHash(result); - } - catch (Exception e) - { - Console.WriteLine(e); - throw; - } - } - - private void OnGotHash(HashGeneratorResult result) - { - if (!result.Success) - { - status = "Error: " + result.ErrorMessage; - return; - } - - var filePath = Path.Combine(Path.GetFullPath(Application.dataPath + @"\..\"), FileName); - if (!File.Exists(filePath)) - { - status = "No super secret file found, you're cheater!\n" + filePath + "\nSummaryHash: " + result.SummaryHash; - return; - } - - var allBytes = File.ReadAllBytes(filePath); - var allChars = BytesToUnicodeChars(allBytes); - var decrypted = ObscuredString.Decrypt(allChars, StringKey); - - var separatorIndex = decrypted.IndexOf(Separator, StringComparison.InvariantCulture); - if (separatorIndex == -1) - { - status = "Super secret file is corrupted, you're cheater!\nSummaryHash: " + result.SummaryHash; - return; - } - - var whitelistedHashes = decrypted.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries); - var originalSummaryHash = whitelistedHashes[0]; - - // compare summary hashes first - if (originalSummaryHash != result.SummaryHash) - { - // check all files against whitelisted hashes if summary differs - // (it can differ if some files are absent due to build separation) - for (var i = 1; i < whitelistedHashes.Length; i++) - { - var hash = whitelistedHashes[i]; - if (!result.HasFileHash(hash)) - { - status = "Code hash differs, you're cheater!\nSummary hashes:\n" + originalSummaryHash + "\n" + result.SummaryHash + "\nWhitelisted hashes count: " + whitelistedHashes.Length; - return; - } - } - } - - status = "All fine!\nSummaryHash: " + result.SummaryHash; - } - - public static char[] BytesToUnicodeChars(byte[] input) - { - var chars = new char[input.Length / sizeof(char)]; - Buffer.BlockCopy(input, 0, chars, 0, input.Length); - return chars; - } - - public static byte[] UnicodeCharsToBytes(char[] input) - { - var bytes = new byte[input.Length * sizeof(char)]; - Buffer.BlockCopy(input, 0, bytes, 0, bytes.Length); - return bytes; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/GenuineValidatorExample.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/GenuineValidatorExample.cs.meta deleted file mode 100644 index 7ce9165..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Examples/Code Genuine Validation/Scripts/Runtime/GenuineValidatorExample.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 21ed2f1676e9ff74aa1fdab58b70b555 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration.meta deleted file mode 100644 index 7adffbd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9f41dd8f84cbeb34cb39d3cddb7b69c3 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/BehaviorDesigner.unitypackage b/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/BehaviorDesigner.unitypackage deleted file mode 100644 index b3da4e3..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/BehaviorDesigner.unitypackage and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/BehaviorDesigner.unitypackage.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/BehaviorDesigner.unitypackage.meta deleted file mode 100644 index 5387560..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/BehaviorDesigner.unitypackage.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: a0519361c30a63a4f94b0b6dc2fc8dad -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/PlayMaker.unitypackage b/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/PlayMaker.unitypackage deleted file mode 100644 index 1b787fa..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/PlayMaker.unitypackage and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/PlayMaker.unitypackage.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/PlayMaker.unitypackage.meta deleted file mode 100644 index 2185c71..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/PlayMaker.unitypackage.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: f84c746903b1ad946823e434229422ea -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/readme.txt b/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/readme.txt deleted file mode 100644 index 1a8b9ac..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/readme.txt +++ /dev/null @@ -1 +0,0 @@ -This folder contains packages with ACTk scripts for different third-party plugins. \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/readme.txt.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/readme.txt.meta deleted file mode 100644 index 1e3968a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Integration/readme.txt.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: ba80bafc30976424784d71fb92e3f994 -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Readme.pdf b/Assets/Plugins/CodeStage/AntiCheatToolkit/Readme.pdf deleted file mode 100644 index eae3e62..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Readme.pdf and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Readme.pdf.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Readme.pdf.meta deleted file mode 100644 index 8ddda7b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Readme.pdf.meta +++ /dev/null @@ -1,30 +0,0 @@ -fileFormatVersion: 2 -guid: 4d2d6fd090757104e8198ec673f419ac -labels: -- cheat -- hack -- CheatEngine -- hacker -- cheater -- cheating -- PlayerPrefs -- memory -- injection -- speedhack -- security -- anti-cheat -- toolkit -- hacking -- protection -- protect -- detect -- detection -- secure -- GameCIH -- ArtMoney -- SecurePrefs -- PlayMaker -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime.meta deleted file mode 100644 index c55e6b2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d7cca0bad55a675408eadd7dfa383d43 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/ACTk.Runtime.asmdef b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/ACTk.Runtime.asmdef deleted file mode 100644 index c396b33..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/ACTk.Runtime.asmdef +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "ACTk.Runtime", - "references": [], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": true, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [ - { - "name": "com.unity.modules.audio", - "expression": "", - "define": "UNITY_AUDIO_MODULE" - }, - { - "name": "com.unity.nuget.newtonsoft-json", - "expression": "2.0.0", - "define": "ACTK_NEWTONSOFT_JSON" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/ACTk.Runtime.asmdef.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/ACTk.Runtime.asmdef.meta deleted file mode 100644 index 8fbd595..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/ACTk.Runtime.asmdef.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: db2875c6bc6e11c4fb8730f4afcd8265 -timeCreated: 1554196056 -licenseType: Store -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins.meta deleted file mode 100644 index c7499b0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 9b66923e82dedcd458e649439a9a8821 -folderAsset: yes -timeCreated: 1529194413 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android.meta deleted file mode 100644 index dc30897..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 593ae315404df664bb50772b005744b3 -folderAsset: yes -timeCreated: 1529194419 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android/AndroidNative.aar b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android/AndroidNative.aar deleted file mode 100644 index 5b50158..0000000 Binary files a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android/AndroidNative.aar and /dev/null differ diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android/AndroidNative.aar.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android/AndroidNative.aar.meta deleted file mode 100644 index 87922bf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/Android/AndroidNative.aar.meta +++ /dev/null @@ -1,32 +0,0 @@ -fileFormatVersion: 2 -guid: a6f24aa125cab864dbbad6a8e142e96f -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : data - second: - enabled: 0 - settings: {} - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL.meta deleted file mode 100644 index 580a03d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d352dbbe3384463eb0709fd977eda86c -timeCreated: 1657112981 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL/WebGLNative.jslib b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL/WebGLNative.jslib deleted file mode 100644 index 3316a9f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL/WebGLNative.jslib +++ /dev/null @@ -1,15 +0,0 @@ -mergeInto(LibraryManager.library, { - -GetUTCTicks: function () { - return 621355968000000000 + new Date().getTime() * 10000; -}, - -FlushFileSystem: function() { - FS.syncfs(false, function (err) { - if (err) { - console.log('[ACTk]: error flushing file system ' + err); - } - }); -}, - -}); \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL/WebGLNative.jslib.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL/WebGLNative.jslib.meta deleted file mode 100644 index 2a641ea..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Plugins/WebGL/WebGLNative.jslib.meta +++ /dev/null @@ -1,32 +0,0 @@ -fileFormatVersion: 2 -guid: 6cb512008d124241ba236034c229d146 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - WebGL: WebGL - second: - enabled: 1 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts.meta deleted file mode 100644 index 88632b3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ca357de66eddf1240987b54a7440db14 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/AssemblyInfo.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/AssemblyInfo.cs deleted file mode 100644 index 15c7124..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/AssemblyInfo.cs +++ /dev/null @@ -1,12 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("ACTk.Editor")] -[assembly: InternalsVisibleTo("CodeStage.ACTk.Tests")] -[assembly: InternalsVisibleTo("CodeStage.ACTk.Tests.Editor")] -[assembly: InternalsVisibleTo("CodeStage.ACTk.ManualTests")] \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/AssemblyInfo.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/AssemblyInfo.cs.meta deleted file mode 100644 index 3e5773d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/AssemblyInfo.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8902b6ccc7af4045ad3b40c92d52cc12 -timeCreated: 1588809569 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common.meta deleted file mode 100644 index 3d9808c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 30d520c9ee427e34191bb784761ebe11 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTk.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTk.cs deleted file mode 100644 index fd71ffb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTk.cs +++ /dev/null @@ -1,93 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Common -{ - using System; - using UnityEngine; - - /// - /// Contains ACTk version in case you need to know it in your scripts. - /// - public static class ACTk - { - /// - /// Current version in X.Y.Z format (using Semantic Versioning 2.0 scheme). - /// - public const string Version = "2023.2.6"; - -#if UNITY_EDITOR - public const string LogPrefix = "[ACTk] "; -#else - public const string LogPrefix = "[ACTk] "; -#endif - - // used at external integrations, thus it's public - public const string DocsRootUrl = "https://codestage.net/uas_files/actk/api/"; - internal const string SupportContact = "https://codestage.net/contacts"; - internal static readonly char[] StringKey = {'\x69', '\x108', '\x105', '\x110', '\x97'}; - - private static string unityVersion; - private static string applicationPlatform; - -#if UNITY_EDITOR - private static string buildTarget; -#endif - - // getting this information here because Unity APIs - // can't be accessed from background threads but this info used at ConstructErrorForSupport - // which potentially can be called from the background thread - [RuntimeInitializeOnLoadMethod] - private static void GetUnityInfo() - { - unityVersion = Application.unityVersion; - applicationPlatform = Application.platform.ToString(); -#if UNITY_EDITOR - buildTarget = UnityEditor.EditorUserBuildSettings.activeBuildTarget.ToString(); -#endif - } - - internal static void PrintExceptionForSupport(string errorText, Exception exception = null) - { - PrintExceptionForSupport(errorText, null, exception); - } - - internal static void PrintExceptionForSupport(string errorText, string prefix, Exception exception) - { - Debug.LogError(ConstructErrorForSupport(errorText, prefix, exception)); - if (exception != null) - Debug.LogException(exception); - } - - private static string ConstructErrorForSupport(string text, string prefix = null, Exception exception = null) - { - var prefixLog = string.IsNullOrEmpty(prefix) ? LogPrefix : prefix; - var logText = $"{prefixLog}{text}\n" + - $"Please report at: {SupportContact}\n"+ - $"Also please include this information:\n{GenerateBugReport(exception)}"; - - return logText; - } - - internal static string GenerateBugReport(Exception exception = null) - { - if (string.IsNullOrEmpty(unityVersion)) - GetUnityInfo(); - - var result = $"Unity version: {unityVersion}\n" + - $"Asset version: {Version}\n" + - $"Current platform: {applicationPlatform}"; -#if UNITY_EDITOR - result += $"\nTarget platform: {buildTarget}"; -#endif - - if (exception != null) - result += $"\n{exception}"; - - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTk.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTk.cs.meta deleted file mode 100644 index 77293a7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTk.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4a84f340806547148432dd93c28cb7ea -timeCreated: 1623170452 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte16.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte16.cs deleted file mode 100644 index 8fdecbd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte16.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Common -{ - using System; - - [Serializable] - internal struct ACTkByte16 : IEquatable - { - public byte b1; - public byte b2; - public byte b3; - public byte b4; - public byte b5; - public byte b6; - public byte b7; - public byte b8; - public byte b9; - public byte b10; - public byte b11; - public byte b12; - public byte b13; - public byte b14; - public byte b15; - public byte b16; - - public bool Equals(ACTkByte16 other) - { - return b1 == other.b1 && b2 == other.b2 && b3 == other.b3 && b4 == other.b4 && b5 == other.b5 && b6 == other.b6 && b7 == other.b7 && b8 == other.b8 && b9 == other.b9 && b10 == other.b10 && b11 == other.b11 && b12 == other.b12 && b13 == other.b13 && b14 == other.b14 && b15 == other.b15 && b16 == other.b16; - } - - public override bool Equals(object obj) - { - return obj is ACTkByte16 other && Equals(other); - } - - public override int GetHashCode() - { - unchecked - { - var hashCode = b1.GetHashCode(); - hashCode = (hashCode * 397) ^ b2.GetHashCode(); - hashCode = (hashCode * 397) ^ b3.GetHashCode(); - hashCode = (hashCode * 397) ^ b4.GetHashCode(); - hashCode = (hashCode * 397) ^ b5.GetHashCode(); - hashCode = (hashCode * 397) ^ b6.GetHashCode(); - hashCode = (hashCode * 397) ^ b7.GetHashCode(); - hashCode = (hashCode * 397) ^ b8.GetHashCode(); - hashCode = (hashCode * 397) ^ b9.GetHashCode(); - hashCode = (hashCode * 397) ^ b10.GetHashCode(); - hashCode = (hashCode * 397) ^ b11.GetHashCode(); - hashCode = (hashCode * 397) ^ b12.GetHashCode(); - hashCode = (hashCode * 397) ^ b13.GetHashCode(); - hashCode = (hashCode * 397) ^ b14.GetHashCode(); - hashCode = (hashCode * 397) ^ b15.GetHashCode(); - hashCode = (hashCode * 397) ^ b16.GetHashCode(); - return hashCode; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte16.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte16.cs.meta deleted file mode 100644 index 229b4c3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte16.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8114eabec2d57e647a78a9263ef8cb77 -timeCreated: 1466433451 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte4.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte4.cs deleted file mode 100644 index cf1a955..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte4.cs +++ /dev/null @@ -1,33 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Common -{ - using System; - - [Serializable] - internal struct ACTkByte4 - { - public byte b1; - public byte b2; - public byte b3; - public byte b4; - - public void Shuffle() - { - var buffer = b2; - b2 = b3; - b3 = buffer; - } - - public void UnShuffle() - { - var buffer = b3; - b3 = b2; - b2 = buffer; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte4.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte4.cs.meta deleted file mode 100644 index fb2f471..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte4.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a9780c29cd9992542b6506217d67ce76 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte8.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte8.cs deleted file mode 100644 index 9118580..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte8.cs +++ /dev/null @@ -1,47 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Common -{ - using System; - - [Serializable] - internal struct ACTkByte8 - { - public byte b1; - public byte b2; - public byte b3; - public byte b4; - public byte b5; - public byte b6; - public byte b7; - public byte b8; - - public void Shuffle() - { - var buffer = b1; - b1 = b2; - b2 = buffer; - buffer = b5; - b5 = b6; - var buffer2 = b8; - b8 = buffer; - b6 = buffer2; - } - - public void UnShuffle() - { - var buffer = b1; - b1 = b2; - b2 = buffer; - buffer = b5; - b5 = b8; - var buffer2 = b6; - b6 = buffer; - b8 = buffer2; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte8.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte8.cs.meta deleted file mode 100644 index 9c245be..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ACTkByte8.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6089ec68ab2197d408c7a6bfc628a4a9 -timeCreated: 1466433892 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/BackgroundThreadAccessException.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/BackgroundThreadAccessException.cs deleted file mode 100644 index 346ede0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/BackgroundThreadAccessException.cs +++ /dev/null @@ -1,21 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Common -{ - using System; - - internal class BackgroundThreadAccessException : Exception - { - public string AccessedApi { get; } - - public BackgroundThreadAccessException(string apiName):base($"Attempt {apiName} access from non-main thread! " + - "This API can't be accessed from child threads.") - { - AccessedApi = apiName; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/BackgroundThreadAccessException.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/BackgroundThreadAccessException.cs.meta deleted file mode 100644 index 69dcede..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/BackgroundThreadAccessException.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 31cfeb8a503e479e8dc80c95cc055959 -timeCreated: 1623151207 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ContainerHolder.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ContainerHolder.cs deleted file mode 100644 index 6a88607..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ContainerHolder.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using UnityEngine; - -namespace CodeStage.AntiCheat.Common -{ - internal static class ContainerHolder - { - public const string ContainerName = "Anti-Cheat Toolkit"; - private static GameObject container; - private static bool containerSet; - -#if UNITY_EDITOR - // making sure it will reset the container even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - containerSet = false; - container = null; - } -#endif - - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] - private static void AfterAssembliesLoaded() => AssertNoContainerExists(nameof(RuntimeInitializeLoadType.AfterAssembliesLoaded)); - - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)] - private static void BeforeSplashScreen() => AssertNoContainerExists(nameof(RuntimeInitializeLoadType.BeforeSplashScreen)); - - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] - private static void BeforeSceneLoad() => AssertNoContainerExists(nameof(RuntimeInitializeLoadType.BeforeSceneLoad)); - - private static void AssertNoContainerExists(string phaseName) - { - if (!containerSet) - return; - - Debug.LogError($"[ACTk] {nameof(ContainerHolder)}: container created too early ({phaseName})!\n" + - $"It should be created only after {nameof(RuntimeInitializeLoadType)}.{nameof(RuntimeInitializeLoadType.AfterSceneLoad)} / Awake phase to avoid state corruption!\n" + - $"Make sure to avoid accessing ACTk APIs before {nameof(RuntimeInitializeLoadType)}.{nameof(RuntimeInitializeLoadType.AfterSceneLoad)} / Awake"); - } - - public static T AddContainerComponent() where T : KeepAliveBehaviour - { - if (container == null) - container = new GameObject(ContainerName); - - containerSet = true; - - return container.AddComponent(); - } - - public static void TrySetContainer(GameObject gameObject) - { - if (container == null && gameObject.name == ContainerName) - { - container = gameObject; - containerSet = true; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ContainerHolder.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ContainerHolder.cs.meta deleted file mode 100644 index 430a7e1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/ContainerHolder.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cf0b42e703ec4f19811989be4515def4 -timeCreated: 1683220715 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/KeepAliveBehaviour.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/KeepAliveBehaviour.cs deleted file mode 100644 index 5622127..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/KeepAliveBehaviour.cs +++ /dev/null @@ -1,148 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Common -{ - using UnityEngine; - using UnityEngine.SceneManagement; - - /// - /// Base class for ACTk in-scene objects which able to survive scene switch. - /// - /// \htmlonlyWARNING:\endhtmlonly Will behave incorrectly if created within any non-default [RuntimeInitializeOnLoadMethod] except RuntimeInitializeLoadType.AfterSceneLoad (which is default). - public abstract class KeepAliveBehaviour : MonoBehaviour where T: KeepAliveBehaviour - { - /// - /// Will survive new level (scene) load if checked. Otherwise it will be destroyed. - /// - /// On dispose Behaviour follows 2 rules: - /// - if Game Object's name is "Anti-Cheat Toolkit": it will be automatically - /// destroyed if no other Behaviours left attached regardless of any other components or children;
- /// - if Game Object's name is NOT "Anti-Cheat Toolkit": it will be automatically destroyed only - /// if it has neither other components nor children attached; - [Tooltip("Detector will survive new level (scene) load if checked.")] - public bool keepAlive = true; - - protected int instancesInScene; - protected bool selfDestroying; - private Scene originalScene; - - #region static instance - /// - /// Allows reaching public properties from code. - /// Can be null if behaviour does not exist in scene or if accessed at or before Awake phase. - /// - public static T Instance { get; protected set; } - - protected static T GetOrCreateInstance - { - get - { - if (Instance != null) - return Instance; - - Instance = ContainerHolder.AddContainerComponent(); - return Instance; - } - } - #endregion - - #region unity messages - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - protected virtual void Awake() - { - selfDestroying = false; - - instancesInScene++; - if (Init(Instance)) - { - Instance = (T)this; - } - } - - protected virtual void Start() - { - ContainerHolder.TrySetContainer(gameObject); - - SceneManager.sceneLoaded += OnSceneLoaded; - SceneManager.sceneUnloaded += OnSceneUnloaded; - } - - protected virtual void OnDestroy() - { - var componentsCount = GetComponentsInChildren().Length; - if (transform.childCount == 0 && componentsCount <= 2) - { - Destroy(gameObject); - } - else if (name == ContainerHolder.ContainerName && componentsCount <= 2) - { - Destroy(gameObject); - } - - instancesInScene--; - - SceneManager.sceneLoaded -= OnSceneLoaded; - SceneManager.sceneUnloaded -= OnSceneUnloaded; - - if (Instance == this) - { - Instance = null; - } - } - - #endregion - - protected virtual void OnSceneLoaded(Scene scene, LoadSceneMode mode) - { - if (instancesInScene < 2) - { - if (!keepAlive && mode != LoadSceneMode.Additive) - DisposeInternal(); - } - else - { - if (!keepAlive && Instance != this) - DisposeInternal(); - } - } - - protected virtual void OnSceneUnloaded(Scene scene) - { - if (originalScene == scene) - { - if (!keepAlive) - DisposeInternal(); - } - } - - protected virtual bool Init(T instance) - { - if (instance != null && instance != this && instance.keepAlive) - { - DisposeInternal(); - return false; - } - - originalScene = gameObject.scene; - DontDestroyOnLoad(transform.parent != null ? transform.root.gameObject : gameObject); - - return true; - } - - protected virtual void DisposeInternal() - { - if (selfDestroying) - return; - - selfDestroying = true; - Destroy(this); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/KeepAliveBehaviour.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/KeepAliveBehaviour.cs.meta deleted file mode 100644 index bf14870..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/KeepAliveBehaviour.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cce5e7aa50344452aa5288a5ac0852b5 -timeCreated: 1556838390 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/UnityApiResultsHolder.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/UnityApiResultsHolder.cs deleted file mode 100644 index 8d31fb0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/UnityApiResultsHolder.cs +++ /dev/null @@ -1,126 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -#if !UNITY_WEBGL -#define ACTK_ASYNC -#endif - -namespace CodeStage.AntiCheat.Common -{ - using Storage; - using UnityEngine; - using Utils; - - /// - /// User-friendly wrapper around few internally used Unity APIs which can't be accessed from background threads. - /// - /// You only need to touch this if you are going to use ObscuredFile / ObscuredFilePrefs from the background threads. - public static class UnityApiResultsHolder - { -#if UNITY_IPHONE - private static string deviceVendorIdentifier; -#endif - - private static string deviceUniqueIdentifier; - private static string persistentDataPath; - - private static bool? isMobilePlatform; - - /// - /// Call this from the main thread before using ObscuredFile / ObscuredFilePrefs from the background threads. - /// - /// Calling this method avoids getting exceptions while working with ObscuredFile / ObscuredFilePrefs from the - /// background threads. - /// Pass true to init API needed for the Lock To Device feature - /// (SystemInfo.deviceUniqueIdentifier). - /// You need this to be true only when using ObscuredFile / ObscuredFilePrefs from the background threads - /// with DeviceLock enabled and without custom DeviceID set. - /// Passing true is similar to the DeviceIdHolder.ForceLockToDeviceInit() call, please read that API docs for - /// more information about possible side effects. - public static void InitForAsyncUsage(bool warmUpDeviceIdentifier) - { -#if ACTK_ASYNC - if (System.Threading.SynchronizationContext.Current == null) - { - Debug.LogError($"Please call {nameof(InitForAsyncUsage)} from main thread!"); - return; - } -#endif - - GetPersistentDataPath(); - - if (warmUpDeviceIdentifier) - GetDeviceUniqueIdentifier(); - - _ = AppEventsDispatcher.Instance; - IsMobilePlatform(); - } - - internal static string GetDeviceUniqueIdentifier() - { - if (string.IsNullOrEmpty(deviceUniqueIdentifier)) - { -#if ACTK_ASYNC - if (System.Threading.SynchronizationContext.Current != null) - deviceUniqueIdentifier = GetDeviceID(); - else - throw new DeviceUniqueIdentifierException(); -#else - deviceUniqueIdentifier = GetDeviceID(); -#endif - } - - return deviceUniqueIdentifier; - - string GetDeviceID() - { - var result = string.Empty; -#if UNITY_IPHONE - result = UnityEngine.iOS.Device.vendorIdentifier; -#endif -#if !ACTK_PREVENT_READ_PHONE_STATE - if (string.IsNullOrEmpty(result)) - result = SystemInfo.deviceUniqueIdentifier; -#endif - - return result; - } - } - - internal static string GetPersistentDataPath() - { - if (string.IsNullOrEmpty(persistentDataPath)) - { -#if ACTK_ASYNC - if (System.Threading.SynchronizationContext.Current != null) - persistentDataPath = Application.persistentDataPath; - else - throw new PersistentDataPathException(); -#else - persistentDataPath = Application.persistentDataPath; -#endif - } - - return persistentDataPath; - } - -#if !ACTK_DISABLE_FILEPREFS_AUTOSAVE - internal static bool IsMobilePlatform() - { - if (isMobilePlatform == null) - { -#if UNITY_EDITOR - isMobilePlatform = UnityEditorInternal.InternalEditorUtility.IsMobilePlatform(UnityEditor.EditorUserBuildSettings.activeBuildTarget); -#else - isMobilePlatform = Application.isMobilePlatform; -#endif - } - - return isMobilePlatform.Value; - } -#endif - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/UnityApiResultsHolder.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/UnityApiResultsHolder.cs.meta deleted file mode 100644 index 8953a88..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Common/UnityApiResultsHolder.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3f01147a33cc454f8b196c9c1334ac86 -timeCreated: 1630166740 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors.meta deleted file mode 100644 index dfef81c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: fbf6c61c50aaf094e8d04d7554893641 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract.meta deleted file mode 100644 index e996ae2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6ac72640b50efad458b747dd66c98f6b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract/ACTkDetectorBase.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract/ACTkDetectorBase.cs deleted file mode 100644 index e1a5757..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract/ACTkDetectorBase.cs +++ /dev/null @@ -1,173 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Detectors -{ - using Common; - - using System; - using UnityEngine; - using UnityEngine.Events; - - /// - /// Base class for all detectors. - /// - [AddComponentMenu("")] - public abstract class ACTkDetectorBase : KeepAliveBehaviour where T: ACTkDetectorBase - { - protected const string MenuPath = "Code Stage/Anti-Cheat Toolkit/"; - - /// - /// Allows to start detector automatically. - /// Otherwise, you'll need to call StartDetection() method to start it. - /// - /// Useful in conjunction with proper Detection Event configuration in the inspector. - /// Allows to use detector without writing any code except the actual reaction on cheating. - [Tooltip("Automatically start detector. Detection Event will be called on detection.")] - public bool autoStart = true; - - /// - /// Detector component will be automatically disposed after firing callback if enabled. - /// Otherwise, it will just stop internal processes. - /// - /// On dispose Detector follows 2 rules: - /// - if Game Object's name is "Anti-Cheat Toolkit": it will be automatically - /// destroyed if no other %Detectors left attached regardless of any other components or children;
- /// - if Game Object's name is NOT "Anti-Cheat Toolkit": it will be automatically destroyed only - /// if it has neither other components nor children attached; - [Tooltip("Automatically dispose Detector after firing callback.")] - public bool autoDispose = true; - - /// - /// Subscribe to this event to get notified when cheat will be detected. - /// - public event Action CheatDetected; - - /// - /// Indicates if cheat was detected by this detector. - /// - public bool IsCheatDetected { get; protected set; } - - [SerializeField] - protected UnityEvent detectionEvent; - - [SerializeField] - protected bool detectionEventHasListener; - - /// - /// Allows to check if detector is started (stays true even when it's paused). - /// - public bool IsStarted { get; protected set; } - - /// - /// Allows to check if detection is currently running and not paused. - /// - public bool IsRunning { get; protected set; } - - #region unity messages -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - protected override void Start() - { - base.Start(); - - if (autoStart && !IsStarted) - { - StartDetectionAutomatically(); - } - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void OnEnable() - { - ResumeDetector(); - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void OnDisable() - { - PauseDetector(); - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void OnApplicationQuit() - { - DisposeInternal(); - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - protected override void OnDestroy() - { - StopDetectionInternal(); - base.OnDestroy(); - } - #endregion - - internal virtual void OnCheatingDetected() - { - IsCheatDetected = true; - InvokeCheatingDetectedEvent(); - - if (detectionEventHasListener) - detectionEvent.Invoke(); - - if (autoDispose) - DisposeInternal(); - else - StopDetectionInternal(); - } - - protected virtual void InvokeCheatingDetectedEvent() - { - CheatDetected?.Invoke(); - } - - protected virtual bool DetectorHasListeners() - { - return IsUserListeningToCheatDetectedEvent() || detectionEventHasListener; - } - - protected virtual void StopDetectionInternal() - { - CheatDetected = null; - IsStarted = false; - IsRunning = false; - } - - protected virtual void PauseDetector() - { - if (!IsStarted) - return; - - IsRunning = false; - } - - protected virtual bool ResumeDetector() - { - if (!IsStarted || !DetectorHasListeners()) - return false; - - IsRunning = true; - return true; - } - - protected virtual bool IsUserListeningToCheatDetectedEvent() - { - return CheatDetected != null; - } - - protected abstract void StartDetectionAutomatically(); - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract/ACTkDetectorBase.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract/ACTkDetectorBase.cs.meta deleted file mode 100644 index 9a3d462..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/Abstract/ACTkDetectorBase.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6e4e2aa87fa03d04bbe3979a971cc4f6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/InjectionDetector.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/InjectionDetector.cs deleted file mode 100644 index 3f312d2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/InjectionDetector.cs +++ /dev/null @@ -1,573 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if (UNITY_EDITOR || DEVELOPMENT_BUILD) -#if (ACTK_INJECTION_DEBUG || ACTK_INJECTION_DEBUG_VERBOSE || ACTK_INJECTION_DEBUG_PARANOID) -#define ACTK_DEBUG_NORMAL -#endif - -#if (ACTK_INJECTION_DEBUG_VERBOSE || ACTK_INJECTION_DEBUG_PARANOID) -#define ACTK_DEBUG_VERBOSE -#endif - -#if (ACTK_INJECTION_DEBUG_PARANOID) -#define ACTK_DEBUG_PARANOID -#endif -#endif - -#if (UNITY_STANDALONE || UNITY_ANDROID) && !ENABLE_IL2CPP -#define UNITY_SUPPORTED_PLATFORM -#endif - -namespace CodeStage.AntiCheat.Detectors -{ - using Common; - using ObscuredTypes; - - using System; - using System.IO; - using System.Reflection; - using System.Text; - using Debug = UnityEngine.Debug; - using UnityEngine; - -#if ACTK_DEBUG_NORMAL - using System.Diagnostics; -#endif - - /// - /// Allows to detect foreign managed assemblies in your application. - /// - /// Just add it to any GameObject as usual or through the "GameObject > Create Other > Code Stage > Anti-Cheat Toolkit" - /// menu to get started.
- /// You can use detector completely from inspector without writing any code except the actual reaction on cheating. - /// - /// Avoid using detectors from code at the Awake phase. - /// - /// \htmlonlyNOTE #1:\endhtmlonly Make sure you've checked the - /// "Enable Injection Detector" option at the "Window > Code Stage > Anti-Cheat Toolkit > Settings" window - /// before using detector at runtime.
- /// \htmlonlyNOTE #2:\endhtmlonly Always test detector on the - /// target platform before releasing your application to the public.
- /// It may detect some external assemblies as foreign, - /// thus make sure you've added all external assemblies your application uses to the Whitelist (see section - /// "How to fill user-defined Whitelist" of the read me for details).
- /// \htmlonlyNOTE #3:\endhtmlonly Disabled in Editor because of specific assemblies causing false positives. Use ACTK_INJECTION_DEBUG symbol to force it in Editor. - /// - /// \htmlonlyWARNING:\endhtmlonly Only Standalone and Android platforms are supported.
- [AddComponentMenu(MenuPath + ComponentName)] - [DisallowMultipleComponent] - [HelpURL(ACTk.DocsRootUrl + "class_code_stage_1_1_anti_cheat_1_1_detectors_1_1_injection_detector.html")] - public class InjectionDetector : ACTkDetectorBase - { - public delegate void InjectionDetectedEventHandler(string reason); - - public const string ComponentName = "Injection Detector"; - internal const string LogPrefix = ACTk.LogPrefix + ComponentName + ": "; - -#if UNITY_SUPPORTED_PLATFORM - /// - /// Subscribe to this event to get notified when cheat will be detected. - /// The detection cause will be passed as an argument if possible. - /// - public new event InjectionDetectedEventHandler CheatDetected; - - #region private variables - private bool signaturesAreMissing; - private bool signaturesAreNotGenuine; - private AllowedAssembly[] allowedAssemblies; - private string[] hexTable; - private string lastCheatDetectionReason; - #endregion - - #region public static methods - - /// - /// Creates new instance of the detector at scene if it doesn't exists. Make sure to call NOT from Awake phase. - /// - /// New or existing instance of the detector. - public static InjectionDetector AddToSceneOrGetExisting() - { - return GetOrCreateInstance; - } - - /// - /// Starts foreign assemblies injection detection for detector you have in scene. - /// - /// Make sure you have properly configured detector in scene with #autoStart disabled before using this method. - public static InjectionDetector StartDetection() - { - if (Instance != null) - { - return Instance.StartDetectionInternal(null); - } - - Debug.LogError(LogPrefix + "can't be started since it doesn't exists in scene or not yet initialized!"); - return null; - } - - /// - /// Starts foreign assemblies injection detection with specified callback containing string argument.
- /// Assembly name will be passed to the argument if possible. Otherwise another cause of the detection will be passed. - ///
- /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - public static InjectionDetector StartDetection(InjectionDetectedEventHandler callback) - { - return GetOrCreateInstance.StartDetectionInternal(callback); - } - - /// - /// Stops detector. Detector's component remains in the scene. Use Dispose() to completely remove detector. - /// - public static void StopDetection() - { - if (Instance != null) - Instance.StopDetectionInternal(); - } - - /// - /// Stops and completely disposes detector component. - /// - /// On dispose Detector follows 2 rules: - /// - if Game Object's name is "Anti-Cheat Toolkit Detectors": it will be automatically - /// destroyed if no other Detectors left attached regardless of any other components or children;
- /// - if Game Object's name is NOT "Anti-Cheat Toolkit Detectors": it will be automatically destroyed only - /// if it has neither other components nor children attached; - public static void Dispose() - { - if (Instance != null) - Instance.DisposeInternal(); - } - #endregion - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - Instance = null; - } -#endif - - /// - /// Manually triggers cheating detection and invokes assigned events. - /// - [ContextMenu("Trigger detection")] - public void TriggerDetection() - { - if (!IsRunning) - { - Debug.LogWarning(LogPrefix + "Detector is not running, can't trigger detection."); - return; - } - - TriggerCheatDetection("Triggered manually"); - } - - private InjectionDetector() { } // prevents direct instantiation - - private InjectionDetector StartDetectionInternal(InjectionDetectedEventHandler callback) - { - if (IsRunning) - { - Debug.LogWarning(LogPrefix + "already running!", this); - return this; - } - - if (!enabled) - { - Debug.LogWarning($"{LogPrefix}disabled but {nameof(StartDetection)} still called from somewhere (see stack trace for this message)!", this); - return this; - } - - if (callback != null && DetectorHasListeners()) - { - Debug.LogWarning(LogPrefix + $"has properly configured Detection Event in the inspector or {nameof(CheatDetected)} event subscriber, but still get started with Action callback." + - $"Action will be called at the same time with Detection Event or {nameof(CheatDetected)} on detection." + - "Are you sure you wish to do this?", this); - } - - if (callback == null && !DetectorHasListeners()) - { - Debug.LogError($"{LogPrefix}was started without Detection Event, Callback or {nameof(CheatDetected)} event subscription." + - "First cheat check is executed without listeners, possible cheat will be ignored!", this); - } - - if (callback != null) - CheatDetected += callback; - - IsStarted = true; - IsRunning = true; - - if (Application.isEditor) - { - Debug.Log(LogPrefix + "does not work in Unity Editor.", this); - return this; - } - - if (allowedAssemblies == null) - { - LoadAndParseAllowedAssemblies(); - } - - if (signaturesAreMissing) - { - TriggerCheatDetection("signatures are missing (did you enable " + ComponentName + "?)"); - } - else if (signaturesAreNotGenuine) - { - TriggerCheatDetection("signatures are not genuine or damaged"); - return this; - } - - if (!FindInjectionInCurrentAssemblies(out var cause)) - { - // listening for new assemblies - AppDomain.CurrentDomain.AssemblyLoad += OnNewAssemblyLoaded; - } - else - { - TriggerCheatDetection(cause); - } - - return this; - } - - protected override void StartDetectionAutomatically() - { - StartDetectionInternal(null); - } - - protected override void PauseDetector() - { - AppDomain.CurrentDomain.AssemblyLoad -= OnNewAssemblyLoaded; - base.PauseDetector(); - } - - protected override bool ResumeDetector() - { - if (!base.ResumeDetector()) return false; - - AppDomain.CurrentDomain.AssemblyLoad += OnNewAssemblyLoaded; - return true; - } - - protected override void StopDetectionInternal() - { - if (IsStarted) - { - AppDomain.CurrentDomain.AssemblyLoad -= OnNewAssemblyLoaded; - } - base.StopDetectionInternal(); - } - - protected override void DisposeInternal() - { - base.DisposeInternal(); - if (Instance == this) Instance = null; - } - - protected override bool IsUserListeningToCheatDetectedEvent() - { - return CheatDetected != null; - } - - protected override void InvokeCheatingDetectedEvent() - { - CheatDetected?.Invoke(lastCheatDetectionReason); - } - - private void TriggerCheatDetection(string reason) - { - lastCheatDetectionReason = reason; - OnCheatingDetected(); - } - - private void OnNewAssemblyLoaded(object sender, AssemblyLoadEventArgs args) - { -#if ACTK_DEBUG_NORMAL - Debug.Log(ACTk.LogPrefix + "New assembly loaded: " + args.LoadedAssembly.FullName, this); -#endif - if (!AssemblyAllowed(args.LoadedAssembly)) - { -#if ACTK_DEBUG_NORMAL - Debug.Log(ACTk.LogPrefix + "Injected Assembly found:\n" + args.LoadedAssembly.FullName, this); -#endif - TriggerCheatDetection(args.LoadedAssembly.FullName); - } - } - - private bool FindInjectionInCurrentAssemblies(out string cause) - { - cause = null; - var result = false; -#if ACTK_DEBUG_NORMAL - var stopwatch = Stopwatch.StartNew(); -#endif - var assembliesInCurrentDomain = AppDomain.CurrentDomain.GetAssemblies(); - if (assembliesInCurrentDomain.Length == 0) - { -#if ACTK_DEBUG_NORMAL - stopwatch.Stop(); - Debug.Log(ACTk.LogPrefix + "0 assemblies in current domain! Not genuine behavior.", this); - stopwatch.Start(); -#endif - cause = "no assemblies"; - result = true; - } - else - { - foreach (var ass in assembliesInCurrentDomain) - { -#if ACTK_DEBUG_VERBOSE - stopwatch.Stop(); - Debug.Log(ACTk.LogPrefix + "Currently loaded assembly:\n" + ass.FullName, this); - stopwatch.Start(); -#endif - if (!AssemblyAllowed(ass)) - { -#if ACTK_DEBUG_NORMAL - stopwatch.Stop(); - Debug.Log(ACTk.LogPrefix + "Injected Assembly found:\n" + ass.FullName + "\n" + GetAssemblyHash(ass), this); - stopwatch.Start(); -#endif - cause = ass.FullName; - result = true; - break; - } - } - } - -#if ACTK_DEBUG_NORMAL - stopwatch.Stop(); - Debug.Log(ACTk.LogPrefix + "Loaded assemblies scan duration: " + stopwatch.ElapsedMilliseconds + " ms.", this); -#endif - return result; - } - - private bool AssemblyAllowed(Assembly ass) - { - var assemblyName = ass.GetName().Name; - var hash = GetAssemblyHash(ass); - - var result = false; - for (var i = 0; i < allowedAssemblies.Length; i++) - { - var allowedAssembly = allowedAssemblies[i]; - - if (allowedAssembly.name == assemblyName) - { - if (Array.IndexOf(allowedAssembly.hashes, hash) != -1) - { - result = true; - break; - } - } - } - - return result; - } - - private void LoadAndParseAllowedAssemblies() - { -#if ACTK_DEBUG_NORMAL - Debug.Log(ACTk.LogPrefix + "Starting LoadAndParseAllowedAssemblies()", this); - var sw = Stopwatch.StartNew(); -#endif - var assembliesSignatures = Resources.Load("fndid"); - if (assembliesSignatures == null) - { - signaturesAreMissing = true; - signaturesAreNotGenuine = true; - return; - } - -#if ACTK_DEBUG_NORMAL - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Creating separator array and opening MemoryStream", this); - sw.Start(); -#endif - - string[] separator = {":"}; - - var ms = new MemoryStream(assembliesSignatures.bytes); - var br = new BinaryReader(ms, Encoding.Unicode); - - var count = br.ReadInt32(); - -#if ACTK_DEBUG_NORMAL - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Allowed assemblies count from MS: " + count, this); - sw.Start(); -#endif - - allowedAssemblies = new AllowedAssembly[count]; - - for (var i = 0; i < count; i++) - { - var lineLength = br.ReadInt32(); - var line = br.ReadChars(lineLength); -#if ACTK_DEBUG_PARANOID - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Line: " + new string(line) + ", length: " + lineLength, this); - sw.Start(); -#endif - var lineString = ObscuredString.Decrypt(line, ACTk.StringKey); -#if ACTK_DEBUG_PARANOID - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Line decrypted : " + lineString, this); - sw.Start(); -#endif - var strArr = lineString.Split(separator, StringSplitOptions.RemoveEmptyEntries); - var stringsCount = strArr.Length; -#if ACTK_DEBUG_PARANOID - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "stringsCount : " + stringsCount, this); - sw.Start(); -#endif - if (stringsCount > 1) - { - var assemblyName = strArr[0]; - - var hashes = new int[stringsCount - 1]; - for (var j = 1; j < stringsCount; j++) - { - var parseResult = 0; - var success = int.TryParse(strArr[j], out parseResult); - if (success) - { - hashes[j - 1] = parseResult; - } - else - { - Debug.LogError(LogPrefix + "Could not parse value: " + strArr[j] + ", line:\n" + lineString); - } - } - - allowedAssemblies[i] = new AllowedAssembly(assemblyName, hashes); - } - else - { - signaturesAreNotGenuine = true; - br.Close(); - ms.Close(); -#if ACTK_DEBUG_NORMAL - sw.Stop(); -#endif - return; - } - } - br.Close(); - ms.Close(); - Resources.UnloadAsset(assembliesSignatures); - -#if ACTK_DEBUG_NORMAL - sw.Stop(); - Debug.Log(ACTk.LogPrefix + "Allowed Assemblies parsing duration: " + sw.ElapsedMilliseconds + " ms.", this); -#endif - - hexTable = new string[256]; - for (var i = 0; i < 256; i++) - { - hexTable[i] = i.ToString("x2"); - } - } - - private int GetAssemblyHash(Assembly ass) - { - string hashInfo; - - var assName = ass.GetName(); - var bytes = assName.GetPublicKeyToken(); - if (bytes.Length >= 8) - { - hashInfo = assName.Name + PublicKeyTokenToString(bytes); - } - else - { - hashInfo = assName.Name; - } - - // based on Jenkins hash function (http://en.wikipedia.org/wiki/Jenkins_hash_function) - var result = 0; - var len = hashInfo.Length; - - for (var i = 0; i < len; ++i) - { - result += hashInfo[i]; - result += (result << 10); - result ^= (result >> 6); - } - result += (result << 3); - result ^= (result >> 11); - result += (result << 15); - - return result; - } - - private string PublicKeyTokenToString(byte[] bytes) - { - var result = ""; - - // AssemblyName.GetPublicKeyToken() returns 8 bytes - for (var i = 0; i < 8; i++) - { - result += hexTable[bytes[i]]; - } - - return result; - } - - private class AllowedAssembly - { - public readonly string name; - public readonly int[] hashes; - - public AllowedAssembly(string name, int[] hashes) - { - this.name = name; - this.hashes = hashes; - } - } -#else - //! @cond - public static InjectionDetector AddToSceneOrGetExisting() - { - Debug.Log(LogPrefix + "is not supported on current platform! This message is harmless."); - return null; - } - - public static void StartDetection() - { - Debug.Log(LogPrefix + "is not supported on current platform! This message is harmless."); - } - - public static void StartDetection(Action callback) - { - Debug.Log(LogPrefix + "is not supported on current platform! This message is harmless."); - } - - public static void StopDetection() - { - Debug.Log(LogPrefix + "is not supported on current platform! This message is harmless."); - } - - public static void Dispose() - { - Debug.Log(LogPrefix + "is not supported on current platform! This message is harmless."); - } - - protected override void StartDetectionAutomatically() - { - Debug.Log(LogPrefix + "is not supported on current platform! This message is harmless."); - } - - //! @endcond -#endif - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/InjectionDetector.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/InjectionDetector.cs.meta deleted file mode 100644 index 8d42fa2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/InjectionDetector.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2c0c2cd00b8d16c43b34c7f120c7df15 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/ObscuredCheatingDetector.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/ObscuredCheatingDetector.cs deleted file mode 100644 index dc453b3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/ObscuredCheatingDetector.cs +++ /dev/null @@ -1,253 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Detectors -{ - using Common; - - using System; - using ObscuredTypes; - using UnityEngine; - - /// - /// Contains detailed information about latest Obscured Types cheating detection. - /// - public class ObscuredCheatingDetectionInfo - { - /// - /// Type of the source. Holds type of the obscured type instance which triggered the detection. - /// - public Type SourceType { get; } - - /// - /// Actual obscured value (in clean decrypted form) at the detection moment. - /// - /// Please note, some types have both whole values and separate components checks, - /// for example, ObscuredVector3 has checks for whole Vector3 and its components like Vector3.x, - /// thus this value can hold either the whole struct or just one of its components. - public object ObscuredValue { get; } - - /// - /// Faked "honeypot" value at the detection moment. - /// - /// Please note, some types have both whole values and separate components checks, - /// for example, ObscuredVector3 has checks for whole Vector3 and its components like Vector3.x, - /// thus this value can hold either the whole struct or just one of its components. - public object FakeValue { get; } - - public ObscuredCheatingDetectionInfo(Type type, object decrypted, object fake) - { - SourceType = type; - ObscuredValue = decrypted; - FakeValue = fake; - } - - public override string ToString() - { - return $"SourceType: {SourceType}\n" + - $"Decrypted: {ObscuredValue}\n" + - $"Fake: {FakeValue}"; - } - } - - /// - /// Detects CodeStage.AntiCheat.ObscuredTypes cheating. - /// - /// It allows cheaters to find desired (fake) values in memory and change them, keeping original values secure.
- /// It's like a cheese in the mouse trap - cheater tries to change some obscured value and get caught on it. - /// - /// Just add it to any GameObject as usual or through the "GameObject > Create Other > Code Stage > Anti-Cheat Toolkit" - /// menu to get started.
- /// You can use detector completely from inspector without writing any code except the actual reaction on cheating. - /// - /// Avoid using detectors from code at the Awake phase. - [AddComponentMenu(MenuPath + ComponentName)] - [DisallowMultipleComponent] - [HelpURL(ACTk.DocsRootUrl + "class_code_stage_1_1_anti_cheat_1_1_detectors_1_1_obscured_cheating_detector.html")] - public class ObscuredCheatingDetector : ACTkDetectorBase - { - public const string ComponentName = "Obscured Cheating Detector"; - internal const string LogPrefix = ACTk.LogPrefix + ComponentName + ": "; - - /// - /// Holds detailed information about latest triggered detection. - /// - /// Can be null if there were no detections or if detection was triggered manually. - public ObscuredCheatingDetectionInfo LastDetectionInfo { get; private set; } - - #region public fields - - /// - /// Max allowed difference between encrypted and fake values in \link ObscuredTypes.ObscuredDouble ObscuredDouble\endlink. Increase in case of false positives. - /// - [Tooltip("Max allowed difference between encrypted and fake values in ObscuredDouble. Increase in case of false positives.")] - public double doubleEpsilon = 0.0001d; - - /// - /// Max allowed difference between encrypted and fake values in \link ObscuredTypes.ObscuredFloat ObscuredFloat\endlink. Increase in case of false positives. - /// - [Tooltip("Max allowed difference between encrypted and fake values in ObscuredFloat. Increase in case of false positives.")] - public float floatEpsilon = 0.0001f; - - /// - /// Max allowed difference between encrypted and fake values in \link ObscuredTypes.ObscuredVector2 ObscuredVector2\endlink. Increase in case of false positives. - /// - [Tooltip("Max allowed difference between encrypted and fake values in ObscuredVector2. Increase in case of false positives.")] - public float vector2Epsilon = 0.1f; - - /// - /// Max allowed difference between encrypted and fake values in \link ObscuredTypes.ObscuredVector3 ObscuredVector3\endlink. Increase in case of false positives. - /// - [Tooltip("Max allowed difference between encrypted and fake values in ObscuredVector3. Increase in case of false positives.")] - public float vector3Epsilon = 0.1f; - - /// - /// Max allowed difference between encrypted and fake values in \link ObscuredTypes.ObscuredQuaternion ObscuredQuaternion\endlink. Increase in case of false positives. - /// - [Tooltip("Max allowed difference between encrypted and fake values in ObscuredQuaternion. Increase in case of false positives.")] - public float quaternionEpsilon = 0.1f; - #endregion - - #region public static methods - /// - /// Creates new instance of the detector at scene if it doesn't exists. Make sure to call NOT from Awake phase. - /// - /// New or existing instance of the detector. - public static ObscuredCheatingDetector AddToSceneOrGetExisting() - { - return GetOrCreateInstance; - } - - /// - /// Starts all Obscured types cheating detection for detector you have in scene. - /// - /// Make sure you have properly configured detector in scene with #autoStart disabled before using this method. - public static ObscuredCheatingDetector StartDetection() - { - if (Instance != null) - { - return Instance.StartDetectionInternal(null); - } - - Debug.LogError(LogPrefix + "can't be started since it doesn't exists in scene or not yet initialized!"); - return null; - } - - /// - /// Starts all Obscured types cheating detection with specified callback. - /// - /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - public static ObscuredCheatingDetector StartDetection(Action callback) - { - return GetOrCreateInstance.StartDetectionInternal(callback); - } - - /// - /// Stops detector. Detector's component remains in the scene. Use Dispose() to completely remove detector. - /// - public static void StopDetection() - { - if (Instance != null) Instance.StopDetectionInternal(); - } - - /// - /// Stops and completely disposes detector component. - /// - /// On dispose Detector follows 2 rules: - /// - if Game Object's name is "Anti-Cheat Toolkit Detectors": it will be automatically - /// destroyed if no other Detectors left attached regardless of any other components or children;
- /// - if Game Object's name is NOT "Anti-Cheat Toolkit Detectors": it will be automatically destroyed only - /// if it has neither other components nor children attached; - public static void Dispose() - { - if (Instance != null) Instance.DisposeInternal(); - } - #endregion - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - Instance = null; - } -#endif - - internal static bool ExistsAndIsRunning => (object)Instance != null && Instance.IsRunning; - - private ObscuredCheatingDetector() {} // prevents direct instantiation - - /// - /// Manually triggers cheating detection and invokes assigned events. - /// - [ContextMenu("Trigger detection")] - public void TriggerDetection() - { - if (!IsRunning) - { - Debug.LogWarning(LogPrefix + "Detector is not running, can't trigger detection."); - return; - } - - LastDetectionInfo = new ObscuredCheatingDetectionInfo(typeof(ObscuredString), - "This is an example of encrypted string.", "This is an example of modified string."); - OnCheatingDetected(); - } - - // boxing all around, eeek! =D - // but it's not in the hot path and get called only once per session if cheating was detected, so who cares? - internal void OnCheatingDetected(IObscuredType type, object decrypted, object fake) - { - LastDetectionInfo = new ObscuredCheatingDetectionInfo(type.GetType(), decrypted, fake); - OnCheatingDetected(); - } - - private ObscuredCheatingDetector StartDetectionInternal(Action callback) - { - if (IsRunning) - { - Debug.LogWarning(LogPrefix + "already running!", this); - return this; - } - - if (!enabled) - { - Debug.LogWarning($"{LogPrefix}disabled but {nameof(StartDetection)} still called from somewhere (see stack trace for this message)!", this); - return this; - } - - LastDetectionInfo = null; - - if (callback != null && DetectorHasListeners()) - { - Debug.LogWarning(LogPrefix + $"has properly configured Detection Event in the inspector or {nameof(CheatDetected)} event subscriber, but still get started with Action callback." + - $"Action will be called at the same time with Detection Event or {nameof(CheatDetected)} on detection." + - "Are you sure you wish to do this?", this); - } - - if (callback == null && !DetectorHasListeners()) - { - Debug.LogWarning($"{LogPrefix}was started without Detection Event, Callback or {nameof(CheatDetected)} event subscription." + - $"Cheat will not be detected until you subscribe to {nameof(CheatDetected)} event.", this); - } - - if (callback != null) - CheatDetected += callback; - - IsStarted = true; - IsRunning = true; - - return this; - } - - protected override void StartDetectionAutomatically() - { - StartDetectionInternal(null); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/ObscuredCheatingDetector.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/ObscuredCheatingDetector.cs.meta deleted file mode 100644 index ca11362..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/ObscuredCheatingDetector.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a30ad7dd9c3245a488e57ae755cf870e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/SpeedHackDetector.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/SpeedHackDetector.cs deleted file mode 100644 index 300c3cb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/SpeedHackDetector.cs +++ /dev/null @@ -1,396 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR || DEVELOPMENT_BUILD -#define ACTK_DEBUG_ENABLED -#endif - -namespace CodeStage.AntiCheat.Detectors -{ - using Common; - - using System; - using UnityEngine; - using Utils; - - /// - /// Allows to detect Cheat Engine's speed hack (and maybe some other speed hack tools) usage. - /// - /// Just add it to any GameObject as usual or through the "GameObject > Create Other > Code Stage > Anti-Cheat Toolkit" - /// menu to get started.
- /// You can use detector completely from inspector without writing any code except the actual reaction on cheating. - /// - /// Avoid using detectors from code at the Awake phase. - [AddComponentMenu(MenuPath + ComponentName)] - [DisallowMultipleComponent] - [HelpURL(ACTk.DocsRootUrl + "class_code_stage_1_1_anti_cheat_1_1_detectors_1_1_speed_hack_detector.html")] - public class SpeedHackDetector : ACTkDetectorBase - { - public const string ComponentName = "Speed Hack Detector"; - internal const string LogPrefix = ACTk.LogPrefix + ComponentName + ": "; - - #region public fields - /// - /// Time (in seconds) between detector checks. - /// - [Tooltip("Time (in seconds) between detector checks.")] - public float interval = 1f; - - /// - /// Allowed speed multiplier threshold. Do not set to too low values (e.g. 0 or 0.00*) since there are timer fluctuations on different hardware. - /// - [Tooltip("Allowed speed multiplier threshold. Do not set to too low values (e.g. 0 or 0.00*) since there are timer fluctuations on different hardware.")] - [Range(0.05f, 5f)] - public float threshold = 0.2f; - - /// - /// Maximum false positives count allowed before registering speed hack. - /// - [Tooltip("Maximum false positives count allowed before registering speed hack.")] - public byte maxFalsePositives = 3; - - /// - /// Amount of sequential successful checks before clearing internal false positives counter.
- /// Set 0 to disable Cool Down feature. - ///
- [Tooltip("Amount of sequential successful checks before clearing internal false positives counter.\nSet 0 to disable Cool Down feature.")] - public int coolDown = 30; - #endregion - - /// - /// Controls whether to use DSP Timer to catch speed hacks in sandboxed environments (like WebGL, VMs, etc.). - /// - /// Uses AudioSettings.dspTime under the hood, which can catch some extra speed hacks in sandboxed environments - /// but can potentially cause false positives on some hardware due to way too high sensitivity. - /// \htmlonlyWARNING:\endhtmlonly Use at your peril! - [field:SerializeField, Tooltip("Uses AudioSettings.dspTime under the hood, which can catch some extra speed hacks " + - "in sandboxed environments but can potentially cause false positives on some hardware. " + - "Use at your peril!")] - public bool UseDsp { get; set; } - - #region private fields - private byte currentFalsePositives; - private int currentCooldownShots; - private long previousReliableTicks; - - private long previousEnvironmentTicks; - private long previousRealtimeTicks; - private long previousDspTicks; - - private bool resetTicksOnNextInterval; - #endregion - - #region public static methods - /// - /// Creates new instance of the detector at scene if it doesn't exists. Make sure to call NOT from Awake phase. - /// - /// New or existing instance of the detector. - public static SpeedHackDetector AddToSceneOrGetExisting() - { - return GetOrCreateInstance; - } - - /// - /// Starts speed hack detection for detector you have in scene. - /// - /// Make sure you have properly configured detector in scene with #autoStart disabled before using this method. - public static SpeedHackDetector StartDetection() - { - if (Instance != null) - return Instance.StartDetectionInternal(null, Instance.interval, Instance.maxFalsePositives, Instance.coolDown); - - Debug.LogError(LogPrefix + "can't be started since it doesn't exists in scene or not yet initialized!"); - return null; - } - - /// - /// Starts speed hack detection with specified callback. - /// - /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - public static SpeedHackDetector StartDetection(Action callback) - { - return StartDetection(callback, GetOrCreateInstance.interval); - } - - /// - /// Starts speed hack detection with specified callback using passed interval.
- ///
- /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - /// Time in seconds between speed hack checks. Overrides #interval property. - public static SpeedHackDetector StartDetection(Action callback, float interval) - { - return StartDetection(callback, interval, GetOrCreateInstance.maxFalsePositives); - } - - /// - /// Starts speed hack detection with specified callback using passed interval and maxFalsePositives.
- ///
- /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - /// Time in seconds between speed hack checks. Overrides #interval property. - /// Amount of possible false positives. Overrides #maxFalsePositives property. - public static SpeedHackDetector StartDetection(Action callback, float interval, byte maxFalsePositives) - { - return StartDetection(callback, interval, maxFalsePositives, GetOrCreateInstance.coolDown); - } - - /// - /// Starts speed hack detection with specified callback using passed interval, maxFalsePositives and coolDown. - /// - /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - /// Time in seconds between speed hack checks. Overrides #interval property. - /// Amount of possible false positives. Overrides #maxFalsePositives property. - /// Amount of sequential successful checks before resetting false positives counter. Overrides #coolDown property. - public static SpeedHackDetector StartDetection(Action callback, float interval, byte maxFalsePositives, int coolDown) - { - return GetOrCreateInstance.StartDetectionInternal(callback, interval, maxFalsePositives, coolDown); - } - - /// - /// Stops detector. Detector's component remains in the scene. Use Dispose() to completely remove detector. - /// - public static void StopDetection() - { - if (Instance != null) - Instance.StopDetectionInternal(); - } - - /// - /// Stops and completely disposes detector component. - /// - /// On dispose Detector follows 2 rules: - /// - if Game Object's name is "Anti-Cheat Toolkit Detectors": it will be automatically - /// destroyed if no other Detectors left attached regardless of any other components or children;
- /// - if Game Object's name is NOT "Anti-Cheat Toolkit Detectors": it will be automatically destroyed only - /// if it has neither other components nor children attached; - public static void Dispose() - { - if (Instance != null) - Instance.DisposeInternal(); - } - #endregion - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - Instance = null; - } -#endif - - /// - /// Manually triggers cheating detection and invokes assigned events. - /// - [ContextMenu("Trigger detection")] - public void TriggerDetection() - { - if (!IsRunning) - { - Debug.LogWarning(LogPrefix + "Detector is not running, can't trigger detection."); - return; - } - - OnCheatingDetected(); - } - - private SpeedHackDetector() // prevents direct instantiation - { -#if UNITY_EDITOR - // prevents in-editor false positives due to PlayMode pause - UnityEditor.EditorApplication.pauseStateChanged += state => - { - OnApplicationPause(state == UnityEditor.PauseState.Paused); - }; -#endif - } - - #region unity messages - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void OnApplicationPause(bool pause) - { - if (!pause && IsStarted) - { - ResetLastTicks(); - resetTicksOnNextInterval = true; - } - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void Update() - { - if (!IsRunning) - return; - - var reliableTicks = TimeUtils.GetReliableTicks(); - var intervalTicks = (long)(interval * TimeUtils.TicksPerSecond); - - // return if configured interval is not passed yet - if (reliableTicks - previousReliableTicks < intervalTicks) - return; - - if (resetTicksOnNextInterval) - { - ResetLastTicks(); - resetTicksOnNextInterval = false; - previousReliableTicks = reliableTicks; - return; - } - - var reliableDelta = reliableTicks - previousReliableTicks; - - var cheatedEnvironment = IsTicksCheated(TimeUtils.GetEnvironmentTicks(), ref previousEnvironmentTicks, reliableDelta); - var cheatedRealtime = IsTicksCheated(TimeUtils.GetRealtimeTicks(), ref previousRealtimeTicks, reliableDelta); - var cheatedDsp = false; - -#if UNITY_AUDIO_MODULE - if (SystemInfo.supportsAudio && UseDsp) - { - var dspTicks = TimeUtils.GetDspTicks(); - if (dspTicks != 0 && !AudioListener.pause) - cheatedDsp = IsTicksCheated(dspTicks, ref previousDspTicks, reliableDelta); - else - previousDspTicks = 0; - } - else - { - previousDspTicks = 0; - } -#endif - - if (cheatedEnvironment || cheatedRealtime || cheatedDsp) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(LogPrefix + "Detection backlog:\n" + - $"reliableTicks: {reliableTicks}\n" + - $"cheatedEnvironment: {cheatedEnvironment}\n" + - $"cheatedRealtime: {cheatedRealtime}\n" + - $"cheatedDsp: {cheatedDsp}"); -#endif - currentFalsePositives++; - if (currentFalsePositives > maxFalsePositives) - { -#if ACTK_DEBUG_ENABLED - Debug.LogWarning(LogPrefix + "final detection!", this); -#endif - OnCheatingDetected(); - } - else - { -#if ACTK_DEBUG_ENABLED - Debug.LogWarning(LogPrefix + "detection! Allowed false positives left: " + (maxFalsePositives - currentFalsePositives), this); -#endif - currentCooldownShots = 0; - ResetLastTicks(); - } - } - else if (currentFalsePositives > 0 && coolDown > 0) - { -#if ACTK_DEBUG_ENABLED - Debug.Log(LogPrefix + "success shot! Shots till cool down: " + (coolDown - currentCooldownShots), this); -#endif - currentCooldownShots++; - if (currentCooldownShots >= coolDown) - { -#if ACTK_DEBUG_ENABLED - Debug.Log(LogPrefix + "cool down!", this); -#endif - currentFalsePositives = 0; - } - } - - previousReliableTicks = reliableTicks; - } - - #endregion - - private SpeedHackDetector StartDetectionInternal(Action callback, float checkInterval, byte falsePositives, int shotsTillCooldown) - { - if (IsRunning) - { - Debug.LogWarning(LogPrefix + "already running!", this); - return this; - } - - if (!enabled) - { - Debug.LogWarning($"{LogPrefix}disabled but {nameof(StartDetection)} still called from somewhere (see stack trace for this message)!", this); - return this; - } - - if (callback != null && DetectorHasListeners()) - Debug.LogWarning($"{LogPrefix}has properly configured Detection Event in the inspector or {nameof(CheatDetected)} event subscriber, but still get started with Action callback." + - $"Action will be called at the same time with Detection Event or {nameof(CheatDetected)} on detection." + - "Are you sure you wish to do this?", this); - - if (callback == null && !DetectorHasListeners()) - Debug.LogWarning($"{LogPrefix}was started without Detection Event, Callback or {nameof(CheatDetected)} event subscription." + - $"Cheat will not be detected until you subscribe to {nameof(CheatDetected)} event.", this); - - if (callback != null) - CheatDetected += callback; - - interval = checkInterval; - maxFalsePositives = falsePositives; - coolDown = shotsTillCooldown; - - ResetLastTicks(); - currentFalsePositives = 0; - currentCooldownShots = 0; - - IsStarted = true; - IsRunning = true; - - return this; - } - - protected override void StartDetectionAutomatically() - { - StartDetectionInternal(null, interval, maxFalsePositives, coolDown); - } - - private bool IsTicksCheated(long ticks, ref long previousTicks, long reliableDelta) - { - var delta = ticks - previousTicks; - var multiplier = Math.Abs(1 - (double)delta / reliableDelta); - - var cheated = multiplier > threshold; - if (cheated) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(LogPrefix + "Detection backlog:\n" + - $"reliableDelta: {reliableDelta}\n" + - $"delta: {delta}\n" + - $"multiplier > threshold: {multiplier} > {threshold}\n" + - $"ticks: {ticks}"); -#endif - } - - previousTicks = ticks; - return cheated; - } - - private void ResetLastTicks() - { - previousReliableTicks = TimeUtils.GetReliableTicks(); - previousEnvironmentTicks = TimeUtils.GetEnvironmentTicks(); - previousRealtimeTicks = TimeUtils.GetRealtimeTicks(); - previousDspTicks = TimeUtils.GetDspTicks(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/SpeedHackDetector.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/SpeedHackDetector.cs.meta deleted file mode 100644 index e33ffe4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/SpeedHackDetector.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d0d04994c2cd96140a8cf16a1ede4fb1 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/TimeCheatingDetector.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/TimeCheatingDetector.cs deleted file mode 100644 index 3706062..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/TimeCheatingDetector.cs +++ /dev/null @@ -1,1233 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#pragma warning disable 618 - -#if (UNITY_EDITOR || DEVELOPMENT_BUILD) -#define ACTK_DEBUG_ENABLED -#endif - -#define ACTK_DETECTOR_ENABLED -#if ACTK_PREVENT_INTERNET_PERMISSION -#undef ACTK_DETECTOR_ENABLED -#endif - -#if !UNITY_WEBGL -#define ACTK_ASYNC -#endif - -#if UNITY_WEBGL && !UNITY_EDITOR -#define ACTK_WEBGL_BUILD -#endif - -namespace CodeStage.AntiCheat.Detectors -{ - using Common; - - using System; - using System.Collections; - using ObscuredTypes; -#if ACTK_ASYNC - using System.Threading.Tasks; -#endif - -#if ACTK_DETECTOR_ENABLED - using UnityEngine.Networking; - using Utils; -#endif - - using UnityEngine; - using UnityEngine.Serialization; - - /// - /// Allows to detect time cheating using time from any properly configured server (almost all servers around the web). - /// - /// Requires Internet connection and appropriate 'android.permission.INTERNET' permission when used on Android platform.
- /// Automatically switches to the current domain on WebGL (if #RequestUrl leads to any external resource) to avoid CORS limitation.
- /// Make sure your server returns correct Date response header value in case of problems. - /// - /// Doesn't detects cheating if there is no Internet connection, should work even with weak connection though.
- /// Just add it to any GameObject as usual or through the "GameObject > Create Other > Code Stage > Anti-Cheat Toolkit" - /// menu to get started.
- /// You can use detector completely from inspector without writing any code except the actual reaction on cheating. - /// - /// Avoid using detectors from code at the Awake phase. - [AddComponentMenu(MenuPath + ComponentName)] - [DisallowMultipleComponent] - [HelpURL(ACTk.DocsRootUrl + "class_code_stage_1_1_anti_cheat_1_1_detectors_1_1_wall_hack_detector.html")] - public class TimeCheatingDetector : ACTkDetectorBase - { - /// - /// Delegate with result of online time receive attempt. - /// - /// OnlineTimeResult instance with details about operation result. - public delegate void OnlineTimeCallback(OnlineTimeResult result); - - /// - /// Delegate with cheat check result. - /// - /// Result of the cheat check. - /// Kind of occured error, if any. - public delegate void TimeCheatingDetectorEventHandler(CheckResult result, ErrorKind error); - - /// - /// Result of the online time receive attempt. - /// - public struct OnlineTimeResult - { - // TODO: make fields private in later versions - - [Obsolete("Please use Success property instead")] - public bool success; - - [Obsolete("Please use Error property instead")] - public string error; - - [Obsolete("Please use ErrorResponseCode property instead")] - public long errorResponseCode; - - [Obsolete("Please use OnlineSecondsUtc property instead")] - public double onlineSecondsUtc; - - [Obsolete("Please use OnlineDateTimeUtc property instead")] - public DateTime onlineDateTimeUtc; - - /// - /// Indicates success of the operation. - /// - public bool Success => success; - - /// - /// Error text (check if success == false). - /// - public string Error => error; - - /// - /// HTTP Response Code for the error. - /// - public long ErrorResponseCode => errorResponseCode; - - /// - /// UTC seconds value retrieved from the online server. - /// - public double OnlineSecondsUtc => onlineSecondsUtc; - - /// - /// UTC DateTime retrieved from the online server. - /// - public DateTime OnlineDateTimeUtc => onlineDateTimeUtc; - - internal OnlineTimeResult SetTime(double secondsUtc, DateTime dateTimeUtc) - { - success = true; - error = null; - errorResponseCode = -1; - onlineSecondsUtc = secondsUtc; - onlineDateTimeUtc = dateTimeUtc; - - return this; - } - - internal OnlineTimeResult SetError(string errorText, long responseCode = -1) - { - success = false; - error = errorText; - errorResponseCode = responseCode; - onlineSecondsUtc = -1; - - return this; - } - - public override string ToString() - { - if (success) - return $"{nameof(onlineSecondsUtc)}: {onlineSecondsUtc}"; - - return "Error response code: " + errorResponseCode + "\nError: " + error; - } - } - - /// - /// Describes possible detector check results. - /// - public enum CheckResult - { - /// - /// Cheat detection was not started yet or is in progress. - /// - Unknown = 0, - - /// - /// Cheat check successfully passed and nor cheating nor wrong time was detected. - /// - CheckPassed = 5, - - /// - /// Direct time cheating was not detected but difference between local and online UTC clocks exceeds the #wrongTimeThreshold. - /// - WrongTimeDetected = 10, - - /// - /// Subsequent measurements difference of local and online time difference exceeded the #realCheatThreshold. - /// - CheatDetected = 15, - - /// - /// There was error while making cheat check, please check #LastError for details. - /// - Error = 100 - } - - /// - /// Describes possible detector errors. - /// - public enum ErrorKind - { - /// - /// Indicates there were no any error registered. - /// - NoError = 0, - - /// - /// Url set for the online time receiving is not a correct URI. - /// - IncorrectUri = 3, - - /// - /// Error while receiving online time (check logs for error details). - /// - OnlineTimeError = 5, - - /// - /// Detector was not started yet. It should be started before performing any cheat checks. - /// - NotStarted = 10, - - /// - /// Detector already checks for the cheat. - /// Please make sure #IsCheckingForCheat == false before trying to force another cheat check. - /// - AlreadyCheckingForCheat = 15, - - /// - /// Something strange happened, please check logs for details. - /// - Unknown = 100 - } - - /// - /// Method of the request to the server. Please consider Head by default and fall back to Get in case of problems. - /// - /// Some servers do not like HEAD requests and sometimes treat it as a malicious bot activity and may temporary block the caller.
- /// For such servers use GET method as a more compatible yet slower and loading all page data. - public enum RequestMethod - { - /// - /// Preferable method as it requests only headers thus it runs faster and has minimal possible traffic. - /// - Head, - - /// - /// More compatible method which loads whole content at the given URL. - /// - Get - } - - public const string ComponentName = "Time Cheating Detector"; - private const string LogPrefix = ACTk.LogPrefix + ComponentName + ": "; - private const int DefaultTimeoutSeconds = 10; - -#if ACTK_DETECTOR_ENABLED - private static readonly WaitForEndOfFrame CachedEndOfFrame = new WaitForEndOfFrame(); - private static Lazy CachedCertificateHandler { get; } = - new Lazy(InstantiateCertificateHandler); - - private static bool gettingOnlineTime; - -#if UNITY_ANDROID - private static int sdkLevel; -#endif - - #region public fields and properties - - /// - /// Gets called after each cheat check and provides results of the check. - /// - public event TimeCheatingDetectorEventHandler CheatChecked; - - [Header("Request settings")] - - [Tooltip("Absolute URL which will return correct datetime in response headers (you may use popular web servers like google.com, microsoft.com etc.).")] - [SerializeField] - private string requestUrl = "https://google.com"; - - /// - /// Absolute URL which will return correct Date in response header to the HEAD request (nearly any popular web server out there including google.com, microsoft.com etc.). - /// - public string RequestUrl - { - get => requestUrl; - set - { - if (requestUrl == value || !Application.isPlaying) return; - - requestUrl = value; - cachedUri = UrlToUri(requestUrl); - } - } - - /// - /// Method to use for url request. Use Head method if possible and fall back to get if server does not reply or block head requests. - /// - [Tooltip("Method to use for url request. Use Head method if possible and fall back to get if server does not " + - "reply or block head requests.")] - public RequestMethod requestMethod = RequestMethod.Head; - - /// - /// Online time request timeout in seconds. Request will be automatically aborted if server will not response in specified time. - /// - [Tooltip("Online time request timeout in seconds.")] - public int timeoutSeconds = 10; - - /// - /// Time (in minutes) between detector checks. Set to 0 to disable automatic time checks and use - /// ForceCheck(), ForceCheckEnumerator() or ForceCheckTask() to manually run a check. - /// - [Header("Settings in minutes")] - [Tooltip("Time (in minutes) between detector checks.")] - [Range(0f, 60)] - public float interval = 5; - - /// - /// Maximum allowed difference between subsequent measurements, in minutes. - /// - [Tooltip("Maximum allowed difference between subsequent measurements, in minutes.")] - [FormerlySerializedAs("threshold")] - [Range(10, 180)] - public int realCheatThreshold = 65; - - /// - /// Maximum allowed difference between local and online time, in minutes. - /// - /// If online and local time difference exceed this threshold, detector will raise an event with - [Tooltip("Maximum allowed difference between local and online time, in minutes.")] - [Range(1, 180)] - public int wrongTimeThreshold = 65; - - /// - /// Ignore case when time changes to be in sync with online correct time. - /// - /// Wrong time threshold is taken into account. - [Tooltip("Ignore case when time changes to be in sync with online correct time. " + - "Wrong time threshold is taken into account.")] - public bool ignoreSetCorrectTime = true; - - /// - /// Last detector error kind. Will be ErrorKind.NoError if there were no errors. - /// - public ErrorKind LastError { get; private set; } - - /// - /// Last check result. Check #LastError if this has value of CheckResult.Error. - /// - public CheckResult LastResult { get; private set; } - - /// - /// Complete response data for the last time request. - /// - public OnlineTimeResult LastOnlineTimeResult { get; private set; } - - /// - /// Allows to check if cheating check is currently in process. - /// - public bool IsCheckingForCheat { get; private set; } - - #endregion - - #region private and protected fields - - private readonly string onlineOfflineDifferencePrefsKey = Base64Utils.ToBase64(ObscuredString.Encrypt("onlineOfflineSecondsDifference", "TeslaOnMars".ToCharArray())); - - private Uri cachedUri; - private TimeCheatingDetectorEventHandler cheatChecked; - private float timeElapsed; - private bool updateAfterPause; - private double lastOnlineSecondsUtc; - - #endregion - - #region Unity messages - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void OnApplicationPause(bool pauseStatus) - { - if (!IsStarted) return; - - if (pauseStatus) - PauseDetector(); - else - ResumeDetector(); - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void Update() - { - if (!IsStarted || !IsRunning) return; - - if (interval > 0) - { - if (updateAfterPause) - { - updateAfterPause = false; - return; - } - - timeElapsed += Time.unscaledDeltaTime; - if (timeElapsed >= interval * 60) - { - timeElapsed = 0; - StartCoroutine(CheckForCheat()); - } - } - } - - #endregion - - #region public static methods - /// - /// Creates new instance of the detector at scene if it doesn't exists. Make sure to call NOT from Awake phase. - /// - /// New or existing instance of the detector. - public static TimeCheatingDetector AddToSceneOrGetExisting() - { - return GetOrCreateInstance; - } - - /// - /// Starts detection with specified callback. - /// - /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after each cheat check. Pass null if you wish to use event, set in detector inspector. - public static TimeCheatingDetector StartDetection(TimeCheatingDetectorEventHandler cheatCheckedEventHandler = null) - { - if (cheatCheckedEventHandler == null) - { - if (Instance != null) - { - return Instance.StartDetectionInternal(Instance.interval); - } - - return StartDetection(GetOrCreateInstance.interval, null); - } - - return StartDetection(GetOrCreateInstance.interval, cheatCheckedEventHandler); - } - - /// - /// Starts detection with specified callback using passed interval.
- ///
- /// If you pass cheatCheckedCallback than make sure you have no filled Detection Event on detector instance in scene to avoid duplicate event calls.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Time in minutes between checks. Overrides #interval property. - /// Method to call after each cheat check. Pass null if you wish to use event, set in detector inspector. - public static TimeCheatingDetector StartDetection(float intervalMinutes, TimeCheatingDetectorEventHandler cheatCheckedEventHandler = null) - { - return GetOrCreateInstance.StartDetectionInternal(intervalMinutes, cheatCheckedEventHandler); - } - - /// - - /// Stops detector. Detector's component remains in the scene. Use Dispose() to completely remove detector. - /// - public static void StopDetection() - { - if (Instance != null) Instance.StopDetectionInternal(); - } - - /// - /// Stops and completely disposes detector component. - /// - /// On dispose Detector follows 2 rules: - /// - if Game Object's name is "Anti-Cheat Toolkit Detectors": it will be automatically - /// destroyed if no other Detectors left attached regardless of any other components or children;
- /// - if Game Object's name is NOT "Anti-Cheat Toolkit Detectors": it will be automatically destroyed only - /// if it has neither other components nor children attached; - public static void Dispose() - { - if (Instance != null) Instance.DisposeInternal(); - } - - /// - /// Receives UTC seconds from url. Runs asynchronously in coroutine. - /// - /// Automatically switches to the current domain when running in WebGL to avoid CORS limitation. - /// Absolute url to receive time from. - /// Make sure this server has proper Date values in the response headers - /// (almost all popular web sites are suitable). - /// Delegate to call and pass OnlineTimeResult to. - /// Method to use for url request. Use Head method if possible and fall back to get if server does not reply or block head requests. - public static IEnumerator GetOnlineTimeCoroutine(string url, OnlineTimeCallback callback, RequestMethod method = RequestMethod.Head) - { - var uri = UrlToUri(url); - yield return GetOnlineTimeCoroutine(uri, callback, method); - } - - /// - /// Receives UTC seconds from url. Runs asynchronously in coroutine. - /// - /// Automatically switches to the current domain when running in WebGL to avoid CORS limitation. - /// Absolute url to receive time from. - /// Make sure this server has proper Date values in the response headers - /// (almost all popular web sites are suitable). - /// Delegate to call and pass OnlineTimeResult to. - /// Method to use for url request. Use Head method if possible and fall back to get if server does not reply or block head requests. - public static IEnumerator GetOnlineTimeCoroutine(Uri uri, OnlineTimeCallback callback, RequestMethod method = RequestMethod.Head) - { -#if ACTK_WEBGL_BUILD - EnsureCurrentDomainUsed(ref uri); -#endif - - if (gettingOnlineTime) - yield return CachedEndOfFrame; - - gettingOnlineTime = true; - - var result = new OnlineTimeResult(); - - using (var wr = GetWebRequest(uri, method)) - { - yield return wr.SendWebRequest(); - FillRequestResult(wr, ref result); - } - - callback?.Invoke(result); - - gettingOnlineTime = false; - } - -#if ACTK_ASYNC - /// - /// Receives UTC seconds from url. Runs asynchronously. - /// - /// Automatically switches to the current domain when running in WebGL to avoid CORS limitation. - /// Absolute url to receive time from. - /// Make sure this server has proper Date values in the response headers - /// (almost all popular web sites are suitable). - /// Method to use for url request. Use Head method if possible and fall back to get if server does not reply or block head requests. - /// OnlineTimeResult with UTC seconds or error. - public static Task GetOnlineTimeTask(string url, RequestMethod method = RequestMethod.Head) - { - return GetOnlineTimeTask(url, System.Threading.CancellationToken.None, method); - } - - /// - /// Receives UTC seconds from url. Runs asynchronously. - /// - /// Automatically switches to the current domain when running in WebGL to avoid CORS limitation. - /// Absolute url to receive time from. - /// Make sure this server has proper Date values in the response headers - /// (almost all popular web sites are suitable). - /// CancellationToken to cancel the operation. - /// Method to use for url request. Use Head method if possible and fall back to get if server does not reply or block head requests. - /// OnlineTimeResult with UTC seconds or error. - public static Task GetOnlineTimeTask(string url, System.Threading.CancellationToken cancellationToken, RequestMethod method = RequestMethod.Head) - { - var uri = UrlToUri(url); - return GetOnlineTimeTask(uri, cancellationToken, method); - } - - /// - /// Receives UTC seconds from url. Runs asynchronously. - /// - /// Automatically switches to the current domain when running in WebGL to avoid CORS limitation. - /// Absolute url to receive time from. - /// Make sure this server has proper Date values in the response headers - /// (almost all popular web sites are suitable). - /// Method to use for url request. Use Head method if possible and fall back to get if server does not reply or block head requests. - /// OnlineTimeResult with UTC seconds or error. - public static Task GetOnlineTimeTask(Uri uri, RequestMethod method = RequestMethod.Head) - { - return GetOnlineTimeTask(uri, System.Threading.CancellationToken.None, method); - } - - /// - /// Receives UTC seconds from url. Runs asynchronously. - /// - /// Automatically switches to the current domain when running in WebGL to avoid CORS limitation. - /// Absolute url to receive time from. - /// Make sure this server has proper Date values in the response headers - /// (almost all popular web sites are suitable). - /// CancellationToken to cancel the operation. - /// Method to use for url request. Use Head method if possible and fall back to get if server does not reply or block head requests. - /// OnlineTimeResult with UTC seconds or error. - public static async Task GetOnlineTimeTask(Uri uri, System.Threading.CancellationToken cancellationToken, RequestMethod method = RequestMethod.Head) - { -#if ACTK_WEBGL_BUILD - EnsureCurrentDomainUsed(ref uri); -#endif - while (gettingOnlineTime) - { - try - { - cancellationToken.ThrowIfCancellationRequested(); - await Task.Delay(100, cancellationToken); - } - catch (OperationCanceledException) - { - return new OnlineTimeResult().SetError("Operation cancelled while waiting for previous attempt."); - } - } - - gettingOnlineTime = true; - - var result = new OnlineTimeResult(); - - try - { - using (var wr = GetWebRequest(uri, method)) - { - var asyncOperation = wr.SendWebRequest(); - - while (!asyncOperation.isDone) - { - cancellationToken.ThrowIfCancellationRequested(); - await Task.Delay(100, cancellationToken); - } - - FillRequestResult(wr, ref result); - } - } - catch (OperationCanceledException) - { - result = new OnlineTimeResult().SetError("Operation cancelled."); - } - catch (Exception e) - { - Debug.LogError($"{LogPrefix} Couldn't retrieve online time"); - result = new OnlineTimeResult().SetError(e.Message); - } - finally - { - gettingOnlineTime = false; - } - - return result; - } -#endif - #endregion - -#if ACTK_WEBGL_BUILD - private static string currentDomain; - private static Uri currentUri; - - private static void EnsureCurrentDomainUsed(ref string url) - { - FillCurrentDomainAndUriIfNecessary(); - - if (!url.Contains(currentDomain)) - url = currentDomain; - } - - private static void EnsureCurrentDomainUsed(ref Uri uri) - { - FillCurrentDomainAndUriIfNecessary(); - - if (currentUri.GetLeftPart(UriPartial.Authority) != uri.GetLeftPart(UriPartial.Authority)) - { - uri = currentUri; - } - } - - private static void FillCurrentDomainAndUriIfNecessary() - { - if (!string.IsNullOrEmpty(currentDomain)) - return; - - var ownUrl = Application.absoluteURL; - if (string.IsNullOrEmpty(ownUrl)) - { - Debug.LogWarning($"{LogPrefix} Couldn't get valid string from Application.absoluteURL"); - return; - } - - currentUri = new Uri(ownUrl); - currentDomain = currentUri.GetLeftPart(UriPartial.Authority); - } -#endif - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - Instance = null; - } -#endif - - private static NonValidatingCertificateHandler InstantiateCertificateHandler() - { - return new NonValidatingCertificateHandler(); - } - - private static UnityWebRequest GetWebRequest(Uri uri, RequestMethod method) - { - var request = new UnityWebRequest(uri, method == RequestMethod.Head ? UnityWebRequest.kHttpVerbHEAD : UnityWebRequest.kHttpVerbGET) - { - useHttpContinue = false, - timeout = Instance ? Instance.timeoutSeconds : DefaultTimeoutSeconds, - certificateHandler = CachedCertificateHandler.Value, - disposeCertificateHandlerOnDispose = false - }; - -#if UNITY_ANDROID - if (method == RequestMethod.Head && Application.platform == RuntimePlatform.Android) - { - try - { - if (sdkLevel == 0) - sdkLevel = GetAndroidSDKLevel(); - - if (sdkLevel <= 17) - request.SetRequestHeader("Accept-Encoding", ""); - - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Couldn't get SDK version or set Accept-Encoding header.", LogPrefix, e); - } - } -#endif - return request; - } - - private static void FillRequestResult(UnityWebRequest request, ref OnlineTimeResult result) - { - if (!string.IsNullOrEmpty(request.error)) - { - result.SetError("UnityWebRequest Error: " + request.error, request.responseCode); - } - else - { - var dateHeader = request.GetResponseHeader("Date"); - if (!string.IsNullOrEmpty(dateHeader)) - { - var success = TryGetDate(dateHeader, out var serverTime); - if (success) - { - var onlineTimeUtc = serverTime.ToUniversalTime(); - var onlineSecondsUtc = onlineTimeUtc.Ticks / (double)TimeSpan.TicksPerSecond; - result.SetTime(onlineSecondsUtc, onlineTimeUtc); - } - else - { - result.SetError("Couldn't parse 'Date' response header value\n " + dateHeader, request.responseCode); - } - } - else - { - result.SetError("Couldn't find 'Date' response header value!", request.responseCode); - } - } - - if (!result.success) - Debug.Log(LogPrefix + "Online Time Retrieve error:\n" + result); - } - - private static Uri UrlToUri(string url) - { -#if ACTK_WEBGL_BUILD - EnsureCurrentDomainUsed(ref url); -#endif - var success = Uri.TryCreate(url, UriKind.Absolute, out var result); - if (!success) - Debug.LogError(LogPrefix + "Could not create URI from URL: " + url); - - return result; - } - - // naive but blazingly fast standard HTTP GMT Date parsing - // ex. 'Tue, 18 Sep 2018 16:28:26 GMT' (ddd, dd MMM yyyy HH:mm:ss 'GMT') - // (C) Dmitriy Yukhanov | codestage.net - private static bool TryGetDate(string source, out DateTime date) - { - try - { - var chars = source.ToCharArray(5, 20); - - var d1 = chars[0] & 0x0f; - var d2 = chars[1] & 0x0f; - var day = d1 * 10 + d2; - - var mo1 = (int)chars[4]; - var mo2 = (int)chars[5]; - var sum = mo1 + mo2; - int month; - - switch (sum) - { - case 207: - month = 1; - break; - case 199: - month = 2; - break; - case 211: - month = 3; - break; - case 226: - month = 4; - break; - case 218: - month = 5; - break; - case 227: - month = 6; - break; - case 225: - month = 7; - break; - case 220: - month = 8; - break; - case 213: - month = 9; - break; - case 215: - month = 10; - break; - case 229: - month = 11; - break; - case 200: - month = 12; - break; - default: - month = 1; - break; - } - - var y1 = chars[7] & 0x0f; - var y2 = chars[8] & 0x0f; - var y3 = chars[9] & 0x0f; - var y4 = chars[10] & 0x0f; - var year = y1 * 1000 + y2 * 100 + y3 * 10 + y4; - - var h1 = chars[12] & 0x0f; - var h2 = chars[13] & 0x0f; - var hour = h1 * 10 + h2; - - var m1 = chars[15] & 0x0f; - var m2 = chars[16] & 0x0f; - var minute = m1 * 10 + m2; - - var s1 = chars[18] & 0x0f; - var s2 = chars[19] & 0x0f; - var second = s1 * 10 + s2; - - date = new DateTime(year, month, day, hour, minute, second, DateTimeKind.Utc); - - return true; - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Error while parsing date!", LogPrefix, e); - date = default; - return false; - } - } - - #region public instance methods - - /// - /// Manually triggers cheating detection and invokes assigned events. - /// - [ContextMenu("Trigger detection")] - public void TriggerDetection() - { - if (!IsRunning) - { - Debug.LogWarning(LogPrefix + "Detector is not running, can't trigger detection."); - return; - } - - LastResult = CheckResult.CheatDetected; - LastError = ErrorKind.NoError; - - ReportCheckResult(); - } - - /// - /// Allows to manually execute cheating check. Restarts #interval. - /// - /// Listen for detector events to know about check result. - /// True if check was started. - public bool ForceCheck() - { - if (!IsReadyForForceCheck()) - return false; - - StartCoroutine(CheckForCheat()); - - return true; - } - - /// - /// Allows to manually execute cheating check and wait for the completion within coroutine. Restarts #interval. - /// - /// Use inside of the coroutine and check #LastResult property after yielding this method. - /// Detector events will be invoked too. - /// Example: - /// \code - /// StartCoroutine(MakeForcedCheck()); - /// private IEnumerator MakeForcedCheck() - /// { - /// yield return TimeCheatingDetector.Instance.ForceCheckEnumerator(); - /// // check TimeCheatingDetector.Instance.LastResult - /// // ... - /// } - /// \endcode - public IEnumerator ForceCheckEnumerator() - { - if (!IsReadyForForceCheck()) - yield break; - - yield return CheckForCheat(); - - while (IsCheckingForCheat) - { - yield return CachedEndOfFrame; - } - } - -#if ACTK_ASYNC - /// - /// Allows to manually execute cheating check and wait for the completion within async method. Restarts #interval. - /// - /// Await this method in async method to wait for the check completion and to get the check result. - /// Detector events will be invoked too. - /// Disabled for WebGL platform. - /// \code - /// MakeForcedCheckAsync(); - /// private async void MakeForcedCheckAsync() - /// { - /// var result = await TimeCheatingDetector.Instance.ForceCheckTask(); - /// // check result - /// // ... - /// } - /// \endcode - public async Task ForceCheckTask() - { - if (!IsReadyForForceCheck()) - return LastResult; - - StartCoroutine(CheckForCheat()); - - await Task.Delay(50); - - if (IsCheckingForCheat) - { - while (IsCheckingForCheat) - { - await Task.Delay(50); - } - } - - return LastResult; - } -#endif - - /// - /// Call this to make sure detector is ready for the ForceCheck() call. - /// - /// True if you can call the ForceCheck and False otherwise. - public bool IsReadyForForceCheck() - { - if (!IsStarted || !IsRunning) - { - Debug.LogWarning(LogPrefix + "Detector should be started to use forced check."); - LastError = ErrorKind.NotStarted; - LastResult = CheckResult.Error; - return false; - } - - if (IsCheckingForCheat) - { - Debug.LogWarning(LogPrefix + "Can't force cheating check since another check is already in progress."); - LastError = ErrorKind.AlreadyCheckingForCheat; - LastResult = CheckResult.Error; - return false; - } - - timeElapsed = 0; - - return true; - } - - #endregion - - private TimeCheatingDetector StartDetectionInternal(float checkInterval, TimeCheatingDetectorEventHandler cheatCheckedEventHandler = null) - { - if (IsRunning) - { - Debug.LogWarning(LogPrefix + "already running!", this); - return this; - } - - if (!enabled) - { - Debug.LogWarning($"{LogPrefix}disabled but {nameof(StartDetection)} still called from somewhere (see stack trace for this message)!", this); - return this; - } - - timeElapsed = 0; - cheatChecked = cheatCheckedEventHandler; - interval = checkInterval; - - IsStarted = true; - IsRunning = true; - - return this; - } - - protected override bool Init(TimeCheatingDetector instance) - { - if (cachedUri == null) - cachedUri = UrlToUri(requestUrl); - - return base.Init(instance); - } - - protected override void StartDetectionAutomatically() - { - StartDetectionInternal(interval); - } - - protected override bool DetectorHasListeners() - { - return base.DetectorHasListeners() || CheatChecked != null || cheatChecked != null; - } - - protected override void PauseDetector() - { - base.PauseDetector(); - updateAfterPause = true; - } - - protected override void StopDetectionInternal() - { - base.StopDetectionInternal(); - - cheatChecked = null; - CheatChecked = null; - } - - private IEnumerator CheckForCheat() - { - if (!IsRunning || IsCheckingForCheat) - yield break; - - IsCheckingForCheat = true; - - LastError = ErrorKind.NoError; - LastResult = CheckResult.Unknown; - - if (cachedUri == null) - { - LastError = ErrorKind.IncorrectUri; - LastResult = CheckResult.Error; - } - else - { - yield return GetOnlineTimeCoroutine(cachedUri, OnOnlineTimeReceived, requestMethod); - } - - if (!IsStarted || !IsRunning) - { - LastError = ErrorKind.Unknown; - } - - if (lastOnlineSecondsUtc <= 0 && LastError == ErrorKind.NoError) - { - LastError = ErrorKind.Unknown; - } - - if (LastError != ErrorKind.NoError && LastError != ErrorKind.AlreadyCheckingForCheat) - { - LastResult = CheckResult.Error; - ReportCheckResult(); - IsCheckingForCheat = false; - yield break; - } - - LastError = ErrorKind.NoError; - - var offlineSecondsUtc = DateTime.UtcNow.Ticks / (double)TimeSpan.TicksPerSecond; // local utc secs - var offlineOnlineDifference = (int)Math.Abs(lastOnlineSecondsUtc - offlineSecondsUtc); - - LastResult = CheckResult.CheckPassed; - - if (offlineOnlineDifference > wrongTimeThreshold * 60) - { - LastResult = CheckResult.WrongTimeDetected; - } - - var lastOfflineOnlineDifference = PlayerPrefs.GetInt(onlineOfflineDifferencePrefsKey, 0); - if (lastOfflineOnlineDifference != 0) - { - lastOfflineOnlineDifference ^= int.MaxValue; - var differenceOfDifferences = Math.Abs(offlineOnlineDifference - lastOfflineOnlineDifference); - - if (realCheatThreshold < 10) - Debug.LogWarning(LogPrefix + "Please consider increasing realCheatThreshold to reduce false positives chance!"); - - if (differenceOfDifferences > realCheatThreshold * 60) - { - if (LastResult == CheckResult.WrongTimeDetected || !ignoreSetCorrectTime) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(LogPrefix + "Detection backlog:\n" + - "wrongTimeThreshold: " + wrongTimeThreshold + "\n" + - "realCheatThreshold: " + realCheatThreshold + "\n" + - "offlineSecondsUtc: " + offlineSecondsUtc + "\n" + - "lastOnlineSecondsUtc: " + lastOnlineSecondsUtc + "\n" + - "offlineOnlineDifference: " + offlineOnlineDifference + "\n" + - "lastOfflineOnlineDifference: " + lastOfflineOnlineDifference + "\n" + - "differenceOfDifferences: " + differenceOfDifferences); -#endif - LastResult = CheckResult.CheatDetected; - } - } - } - - PlayerPrefs.SetInt(onlineOfflineDifferencePrefsKey, offlineOnlineDifference ^ int.MaxValue); - IsCheckingForCheat = false; - ReportCheckResult(); - } - - private void ReportCheckResult() - { - cheatChecked?.Invoke(LastResult, LastError); - CheatChecked?.Invoke(LastResult, LastError); - - switch (LastResult) - { - case CheckResult.Unknown: - break; - case CheckResult.CheckPassed: - break; - case CheckResult.WrongTimeDetected: - break; - case CheckResult.CheatDetected: - OnCheatingDetected(); - break; - case CheckResult.Error: - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - private void OnOnlineTimeReceived(OnlineTimeResult result) - { - LastOnlineTimeResult = result; - if (result.success) - { - lastOnlineSecondsUtc = result.onlineSecondsUtc; - } - else - { - lastOnlineSecondsUtc = -1; - LastError = ErrorKind.OnlineTimeError; - } - } - -#if UNITY_ANDROID - private static int GetAndroidSDKLevel() - { - var osString = SystemInfo.operatingSystem; - if (string.IsNullOrEmpty(osString)) - return -1; - - var dashIndex = osString.IndexOf("-", StringComparison.Ordinal); - if (dashIndex <= 0) - return -1; - - if (osString.Length < dashIndex + 3) - return -1; - - var apiPart = osString.Substring(dashIndex + 1, 2); - if (string.IsNullOrEmpty(apiPart)) - return -1; - - if (!int.TryParse(apiPart, out var result)) - return -1; - - return result; - } -#endif - - #region obsolete members - - [Obsolete("Please use CheatChecked event instead", true)] -#pragma warning disable 67 - public event Action Error; - - [Obsolete("Please use CheatChecked event instead", true)] - public event Action CheckPassed; -#pragma warning restore 67 - - [Obsolete("Use wrongTimeThreshold instead.", true)] - [NonSerialized] - public int threshold = 65; - - [Obsolete("Use requestUrl instead", true)] - [NonSerialized] - public string timeServer = "google.com"; - - [Obsolete("Please use GetOnlineTimeCoroutine or GetOnlineTimeTask instead", true)] - public static double GetOnlineTime(string server) - { - return -1; - } - - [Obsolete("Please use Instance.Error event instead.", true)] - public static void SetErrorCallback(Action errorCallback) - { - - } - - [Obsolete("Please use StartDetection(int, ...) instead.", true)] - public static void StartDetection(Action detectionCallback, int interval) - { - - } - - [Obsolete("Please use StartDetection(int, ...) instead.", true)] - public static void StartDetection(Action detectionCallback, Action errorCallback, int interval) - { - - } - - [Obsolete("Please use other overloads of this method instead", true)] - public static void StartDetection(float interval, Action detectionCallback, Action errorCallback, Action checkPassedCallback) - { - - } - - #endregion -#else - private const string ErrorMessage = LogPrefix + " is disabled with ACTK_PREVENT_INTERNET_PERMISSION conditional or is not supported on current platform!"; - protected override void StartDetectionAutomatically() - { - Debug.LogError(ErrorMessage); - } -#endif - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/TimeCheatingDetector.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/TimeCheatingDetector.cs.meta deleted file mode 100644 index d108ad2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/TimeCheatingDetector.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1cb994d96ecfe4d4697d649e0e7d5100 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/WallHackDetector.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/WallHackDetector.cs deleted file mode 100644 index 9efb6fa..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/WallHackDetector.cs +++ /dev/null @@ -1,1171 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if (UNITY_EDITOR || DEVELOPMENT_BUILD) -#define ACTK_DEBUG_ENABLED -#if ACTK_WALLHACK_DEBUG -#define WALLHACK_DEBUG -#endif -#endif - -namespace CodeStage.AntiCheat.Detectors -{ - using Common; - - using System; - using System.Collections; - using UnityEngine; - using UnityEngine.Rendering; - - /// - /// Detects common types of wall hack cheating: walking through the walls (Rigidbody and CharacterController modules), - /// shooting through the walls (Raycast module), looking through the walls (Wireframe module). - /// - /// In order to work properly, this detector creates and uses some service objects right in the scene.
- /// It places all such objects within 3x3x3 sandbox area which is placed at the #spawnPosition and drawn as a red wire cube in - /// the scene when you select Game Object with this detector.
- /// Please, place this sandbox area at the empty unreachable space of your game to avoid any collisions and false positives.
- /// - /// To get started:
- /// - add detector to any GameObject as usual or through the "GameObject > Create Other > Code Stage > Anti-Cheat Toolkit" menu;
- /// - make sure 3x3x3 area at the #spawnPosition is unreachable for any objects of your game; - /// - /// You can use detector completely from inspector without writing any code except the actual reaction on cheating. - /// - /// Avoid using detectors from code at the Awake phase. - /// - /// \htmlonlyNote #1:\endhtmlonly Adds new objects to the scene and places them into the - /// "[WH Detector Service]" container at the #spawnPosition.
- /// \htmlonlyNote #2:\endhtmlonly May use physics and shaders. It may lead to the build size - /// increase and additional resources usage.
- [AddComponentMenu(MenuPath + ComponentName)] - [DisallowMultipleComponent] - [HelpURL(ACTk.DocsRootUrl + "class_code_stage_1_1_anti_cheat_1_1_detectors_1_1_wall_hack_detector.html")] - public class WallHackDetector : ACTkDetectorBase - { - public const string ComponentName = "WallHack Detector"; - internal const string LogPrefix = ACTk.LogPrefix + ComponentName + ": "; - internal const string WireframeShaderName = "Hidden/ACTk/WallHackTexture"; - private const string ServiceContainerName = "[WH Detector Service]"; - private const int ShaderTextureSize = 4; - private const int RenderTextureSize = 4; - private const int ColorsDifferenceThreshold = 5; - - private readonly Vector3 rigidPlayerVelocity = new Vector3(0, 0, 1f); - - private readonly WaitForEndOfFrame waitForEndOfFrame = new WaitForEndOfFrame(); - - #region public properties - [SerializeField] - [Tooltip("Check for the \"walk through the walls\" kind of cheats made via Rigidbody hacks?")] - private bool checkRigidbody = true; - - /// - /// Check for the "walk through the walls" kind of cheats made via Rigidbody hacks? - /// - /// Disable to save some resources if you're not using Rigidbody for characters. - public bool CheckRigidbody - { - get => checkRigidbody; - set - { - if (checkRigidbody == value || !Application.isPlaying || !enabled || !gameObject.activeSelf) return; - checkRigidbody = value; - - if (!IsStarted) return; - - UpdateServiceContainer(); - if (checkRigidbody) - { - StartRigidModule(); - } - else - { - StopRigidModule(); - } - } - } - - [SerializeField] - [Tooltip("Check for the \"walk through the walls\" kind of cheats made via Character Controller hacks?")] - private bool checkController = true; - - /// - /// Check for the "walk through the walls" kind of cheats made via Character Controller hacks? - /// - /// Disable to save some resources if you're not using Character Controllers. - public bool CheckController - { - get => checkController; - set - { - if (checkController == value || !Application.isPlaying || !enabled || !gameObject.activeSelf) return; - checkController = value; - - if (!IsStarted) return; - - UpdateServiceContainer(); - if (checkController) - { - StartControllerModule(); - } - else - { - StopControllerModule(); - } - } - } - - [SerializeField] - [Tooltip("Check for the \"see through the walls\" kind of cheats made via shader or driver hacks (wireframe, color alpha, etc.)?")] - private bool checkWireframe = true; - - /// - /// Check for the "see through the walls" kind of cheats made via shader or driver hacks (wireframe, color alpha, etc.)? - /// - /// Disable to save some resources in case you don't care about such cheats. - /// - /// \htmlonlyNOTE:\endhtmlonly Uses specific shader under the hood. - /// Thus such shader should be included into the build to exist at runtime.
- /// You may easily add or remove shader at the ACTk Settings window (Window > Code Stage > Anti-Cheat Toolkit > Settings).
- /// You'll see error in logs at runtime if you'll have no needed shader included.
- public bool CheckWireframe - { - get => checkWireframe; - set - { - if (checkWireframe == value || !Application.isPlaying || !enabled || !gameObject.activeSelf) return; - checkWireframe = value; - - if (!IsStarted) return; - - UpdateServiceContainer(); - if (checkWireframe) - { - StartWireframeModule(); - } - else - { - StopWireframeModule(); - } - } - } - - [SerializeField] - [Tooltip("Check for the \"shoot through the walls\" kind of cheats made via Raycast hacks?")] - private bool checkRaycast = true; - - /// - /// Check for the "shoot through the walls" kind of cheats made via Raycast hacks? - /// - /// Disable to save some resources in case you don't care about such cheats. - public bool CheckRaycast - { - get => checkRaycast; - set - { - if (checkRaycast == value || !Application.isPlaying || !enabled || !gameObject.activeSelf) return; - checkRaycast = value; - - if (!IsStarted) return; - - UpdateServiceContainer(); - if (checkRaycast) - { - StartRaycastModule(); - } - else - { - StopRaycastModule(); - } - } - } - #endregion - - #region public fields - /// - /// Delay between Wireframe module checks, from 1 up to 60 secs. - /// - [Tooltip("Delay between Wireframe module checks, from 1 up to 60 secs.")] - [Range(1f, 60f)] - public int wireframeDelay = 10; - - /// - /// Delay between Raycast module checks, from 1 up to 60 secs. - /// - [Tooltip("Delay between Raycast module checks, from 1 up to 60 secs.")] - [Range(1f, 60f)] - public int raycastDelay = 10; - - /// - /// World coordinates of the service container. - /// Please keep in mind it will have different active objects within 3x3x3 cube during gameplay. - /// It should be unreachable for your game objects to avoid collisions and false positives. - /// - [Tooltip("World position of the container for service objects within 3x3x3 cube (drawn as red wire cube in scene).")] - public Vector3 spawnPosition; - - /// - /// Maximum false positives in a row for each detection module before registering a wall hack. - /// - [Tooltip("Maximum false positives in a row for each detection module before registering a wall hack.")] - public byte maxFalsePositives = 3; - #endregion - - #region private variables - private GameObject serviceContainer; - private GameObject solidWall; - private GameObject thinWall; - - private Camera wfCamera; - private MeshRenderer foregroundRenderer; - private MeshRenderer backgroundRenderer; - private Color wfColor1 = Color.black; - private Color wfColor2 = Color.black; - private Shader wfShader; - private Material wfMaterial; - private Texture2D shaderTexture; - private Texture2D targetTexture; - private RenderTexture renderTexture; - - private int whLayer = -1; - private int raycastMask = -1; - - private Rigidbody rigidPlayer; - private CharacterController charControllerPlayer; - private float charControllerVelocity; - - private byte rigidbodyDetections; - private byte controllerDetections; - private byte wireframeDetections; - private byte raycastDetections; - - private bool wireframeDetected; - - private readonly RaycastHit[] rayHits = new RaycastHit[10]; - - #endregion - - #region public static methods - /// - /// Creates new instance of the detector at scene if it doesn't exists. Make sure to call NOT from Awake phase. - /// - /// New or existing instance of the detector. - public static WallHackDetector AddToSceneOrGetExisting() - { - return GetOrCreateInstance; - } - - /// - /// Starts detection for detector you have in scene. - /// - /// Make sure you have properly configured detector in scene with #autoStart disabled before using this method. - public static WallHackDetector StartDetection() - { - if (Instance != null) - { - return Instance.StartDetectionInternal(null, Instance.spawnPosition, Instance.maxFalsePositives); - } - - Debug.LogError(LogPrefix + "can't be started since it doesn't exists in scene or not yet initialized!"); - return null; - } - - /// - /// Starts detection with specified callback. - /// - /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - public static WallHackDetector StartDetection(Action callback) - { - return StartDetection(callback, GetOrCreateInstance.spawnPosition); - } - - /// - /// Starts detection with specified callback using passed spawnPosition. - /// - /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - /// World position of the service 3x3x3 container. Overrides #spawnPosition property. - public static WallHackDetector StartDetection(Action callback, Vector3 spawnPosition) - { - return StartDetection(callback, spawnPosition, GetOrCreateInstance.maxFalsePositives); - } - - /// - /// Starts detection with specified callback using passed spawnPosition and maxFalsePositives. - /// - /// If you have detector in scene make sure it has empty Detection Event.
- /// Creates a new detector instance if it doesn't exists in scene. - /// Method to call after detection. - /// World position of the service 3x3x3 container. Overrides #spawnPosition property. - /// Amount of possible false positives in a row before registering detection. Overrides #maxFalsePositives property. - public static WallHackDetector StartDetection(Action callback, Vector3 spawnPosition, byte maxFalsePositives) - { - return GetOrCreateInstance.StartDetectionInternal(callback, spawnPosition, maxFalsePositives); - } - - /// - /// Stops detector. Detector's component remains in the scene. Use Dispose() to completely remove detector. - /// - public static void StopDetection() - { - if (Instance != null) Instance.StopDetectionInternal(); - } - - /// - /// Stops and completely disposes detector component and destroys Service Container as well. - /// - /// On dispose Detector follows 2 rules: - /// - if Game Object's name is "Anti-Cheat Toolkit Detectors": it will be automatically - /// destroyed if no other Detectors left attached regardless of any other components or children;
- /// - if Game Object's name is NOT "Anti-Cheat Toolkit Detectors": it will be automatically destroyed only - /// if it has neither other components nor children attached; - public static void Dispose() - { - if (Instance != null) - { - Instance.DisposeInternal(); - } - } - #endregion - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - Instance = null; - } -#endif - - /// - /// Manually triggers cheating detection and invokes assigned events. - /// - [ContextMenu("Trigger detection")] - public void TriggerDetection() - { - if (!IsRunning) - { - Debug.LogWarning(LogPrefix + "Detector is not running, can't trigger detection."); - return; - } - - OnCheatingDetected(); - } - - private WallHackDetector() { } // prevents direct instantiation - - #region unity messages - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - protected override void OnDestroy() - { - base.OnDestroy(); - - StopAllCoroutines(); - if (serviceContainer != null) Destroy(serviceContainer); - - if (wfMaterial != null) - { - wfMaterial.mainTexture = null; - wfMaterial.shader = null; - wfMaterial = null; - - wfShader = null; - - shaderTexture = null; - targetTexture = null; - - renderTexture.DiscardContents(); - renderTexture.Release(); - renderTexture = null; - } - - instancesInScene--; - } - -#if UNITY_EDITOR -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void OnDrawGizmosSelected() - { - Gizmos.color = Color.red; - Gizmos.DrawWireCube(spawnPosition, new Vector3(3, 3, 3)); - } -#endif - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void FixedUpdate() - { - if (!IsRunning || !checkRigidbody || rigidPlayer == null) - return; - - if (rigidPlayer.transform.localPosition.z > 1f) - { - rigidbodyDetections++; - if (!Detect()) - { - StopRigidModule(); - StartRigidModule(); - } - } - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void Update() - { - if (!IsRunning || !checkController || charControllerPlayer == null) - return; - - if (charControllerVelocity > 0) - { - charControllerPlayer.Move(new Vector3(UnityEngine.Random.Range(-0.002f, 0.002f), 0, charControllerVelocity)); - - if (charControllerPlayer.transform.localPosition.z > 1f) - { - controllerDetections++; - if (!Detect()) - { - StopControllerModule(); - StartControllerModule(); - } - } - } - } - -#if WALLHACK_DEBUG -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void OnGUI() - { - float x = 10; - float y = 10; - - if (targetTexture != null) - { - GUI.DrawTexture(new Rect(x, y, 50, 50), targetTexture, ScaleMode.StretchToFill, false); - } - - if (renderTexture != null) - { - GUI.DrawTexture(new Rect(x + 50, y, 50, 50), renderTexture, ScaleMode.StretchToFill, false); - } - - Color32 color1 = wfColor1; - Color32 color2 = wfColor2; - - GUILayout.BeginArea(new Rect(x, y + 50, 200, 70), GUI.skin.box); - GUI.color = wfColor1; - GUILayout.Label("Color1: " + color1.r + ", " + color1.g + ", " + color1.b + ", " + color1.a); - GUI.color = wfColor2; - GUILayout.Label("Color2: " + color2.r + ", " + color2.g + ", " + color2.b + ", " + color2.a); - GUILayout.EndArea(); - } -#endif - #endregion - - private WallHackDetector StartDetectionInternal(Action callback, Vector3 servicePosition, byte falsePositivesInRow) - { - if (IsRunning) - { - Debug.LogWarning(LogPrefix + "already running!", this); - return this; - } - - if (!enabled) - { - Debug.LogWarning($"{LogPrefix}disabled but {nameof(StartDetection)} still called from somewhere (see stack trace for this message)!", this); - return this; - } - - if (callback != null && DetectorHasListeners()) - { - Debug.LogWarning(LogPrefix + $"has properly configured Detection Event in the inspector or {nameof(CheatDetected)} event subscriber, but still get started with Action callback." + - $"Action will be called at the same time with Detection Event or {nameof(CheatDetected)} on detection." + - "Are you sure you wish to do this?", this); - } - - if (callback == null && !DetectorHasListeners()) - { - Debug.LogWarning($"{LogPrefix}was started without Detection Event, Callback or {nameof(CheatDetected)} event subscription." + - $"Cheat will not be detected until you subscribe to {nameof(CheatDetected)} event.", this); - } - -#if UNITY_EDITOR - if (checkRaycast || checkController || checkRigidbody) - { - var layerId = LayerMask.NameToLayer("Ignore Raycast"); - if (Physics.GetIgnoreLayerCollision(layerId, layerId)) - { - Debug.LogError(LogPrefix + "IgnoreRaycast physics layer should collide with itself to avoid false positives! See readme's troubleshooting section for details."); - } - } -#endif - - if (callback != null) - CheatDetected += callback; - - spawnPosition = servicePosition; - maxFalsePositives = falsePositivesInRow; - - rigidbodyDetections = 0; - controllerDetections = 0; - wireframeDetections = 0; - raycastDetections = 0; - - StartCoroutine(InitDetector()); - - IsStarted = true; - IsRunning = true; - - return this; - } - - protected override void StartDetectionAutomatically() - { - StartDetectionInternal(null, spawnPosition, maxFalsePositives); - } - - protected override void PauseDetector() - { - if (!IsRunning) return; - - base.PauseDetector(); - StopRigidModule(); - StopControllerModule(); - StopWireframeModule(); - StopRaycastModule(); - } - - protected override bool ResumeDetector() - { - if (!base.ResumeDetector()) return false; - - if (checkRigidbody) - { - StartRigidModule(); - } - - if (checkController) - { - StartControllerModule(); - } - - if (checkWireframe) - { - StartWireframeModule(); - } - - if (checkRaycast) - { - StartRaycastModule(); - } - - return true; - } - - protected override void StopDetectionInternal() - { - if (IsStarted) PauseDetector(); - base.StopDetectionInternal(); - } - - private void UpdateServiceContainer() - { - if (enabled && gameObject.activeSelf) - { - #region common - if (whLayer == -1) - whLayer = LayerMask.NameToLayer("Ignore Raycast"); - if (raycastMask == -1) - raycastMask = LayerMask.GetMask("Ignore Raycast"); - - if (serviceContainer == null) - { - serviceContainer = new GameObject(ServiceContainerName); - serviceContainer.layer = whLayer; - serviceContainer.transform.position = spawnPosition; - DontDestroyOnLoad(serviceContainer); - } - #endregion - - #region walk - if ((checkRigidbody || checkController) && solidWall == null) - { -#if WALLHACK_DEBUG - - solidWall = GameObject.CreatePrimitive(PrimitiveType.Cube); - solidWall.name = "SolidWall"; -#else - solidWall = new GameObject("SolidWall"); - solidWall.AddComponent(); -#endif - solidWall.layer = whLayer; - solidWall.transform.parent = serviceContainer.transform; - solidWall.transform.localScale = new Vector3(3, 3, 0.5f); - solidWall.transform.localPosition = Vector3.zero; - } - else if ((!checkRigidbody && !checkController) && solidWall != null) - { - Destroy(solidWall); - } - #endregion - - #region wireframe - if (checkWireframe && wfCamera == null) - { - if (wfShader == null) - wfShader = Shader.Find(WireframeShaderName); - - if (wfShader == null) - { - Debug.LogError(LogPrefix + "can't find '" + WireframeShaderName + "' shader!\nPlease make sure you have it included at the Anti-Cheat Toolkit Settings.", this); - checkWireframe = false; - } - else - { - if (!wfShader.isSupported) - { - Debug.LogWarning(LogPrefix + "can't detect wireframe cheats on this platform due to lack of needed shader support!", this); - checkWireframe = false; - } - else - { - if (wfColor1 == Color.black) - { - wfColor1 = GenerateColor(); - do - wfColor2 = GenerateColor(); - while (ColorsSimilar(wfColor1, wfColor2, 10)); - } - - if (shaderTexture == null) - { - shaderTexture = new Texture2D(ShaderTextureSize, ShaderTextureSize, TextureFormat.RGB24, false, false); - shaderTexture.filterMode = FilterMode.Point; - - const int pixelsCount = ShaderTextureSize * ShaderTextureSize; - const int halfPixelsCount = pixelsCount / 2; - var colors = new Color[pixelsCount]; - - for (var i = 0; i < pixelsCount; i++) - { - if (i < halfPixelsCount) - { - colors[i] = wfColor1; - } - else - { - colors[i] = wfColor2; - } - } - - shaderTexture.SetPixels(colors, 0); - shaderTexture.Apply(); - } - - if (renderTexture == null) - { - renderTexture = new RenderTexture(RenderTextureSize, RenderTextureSize, 24, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB); - renderTexture.autoGenerateMips = false; - renderTexture.filterMode = FilterMode.Point; - renderTexture.Create(); - } - - if (targetTexture == null) - { - targetTexture = new Texture2D(RenderTextureSize, RenderTextureSize, TextureFormat.RGB24, false, false); - targetTexture.filterMode = FilterMode.Point; - } - - if (wfMaterial == null) - { - wfMaterial = new Material(wfShader); - wfMaterial.mainTexture = shaderTexture; - } - - if (foregroundRenderer == null) - { - var foregroundObject = GameObject.CreatePrimitive(PrimitiveType.Cube); - Destroy(foregroundObject.GetComponent()); - foregroundObject.name = "WireframeFore"; - foregroundObject.layer = whLayer; - foregroundObject.transform.parent = serviceContainer.transform; - foregroundObject.transform.localPosition = new Vector3(0, 0, 0f); - - foregroundRenderer = foregroundObject.GetComponent(); - foregroundRenderer.sharedMaterial = wfMaterial; - foregroundRenderer.shadowCastingMode = ShadowCastingMode.Off; - foregroundRenderer.receiveShadows = false; - foregroundRenderer.enabled = false; - } - - if (backgroundRenderer == null) - { - var backgroundObject = GameObject.CreatePrimitive(PrimitiveType.Quad); - Destroy(backgroundObject.GetComponent()); - backgroundObject.name = "WireframeBack"; - backgroundObject.layer = whLayer; - backgroundObject.transform.parent = serviceContainer.transform; - backgroundObject.transform.localPosition = new Vector3(0, 0, 1f); - backgroundObject.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); - - backgroundRenderer = backgroundObject.GetComponent(); - backgroundRenderer.sharedMaterial = wfMaterial; - backgroundRenderer.shadowCastingMode = ShadowCastingMode.Off; - backgroundRenderer.receiveShadows = false; - backgroundRenderer.enabled = false; - } - - wfCamera = new GameObject("WireframeCamera").AddComponent(); - wfCamera.cameraType = CameraType.Preview; - wfCamera.gameObject.layer = whLayer; - wfCamera.transform.parent = serviceContainer.transform; - wfCamera.transform.localPosition = new Vector3(0, 0, -1f); - wfCamera.clearFlags = CameraClearFlags.SolidColor; - wfCamera.backgroundColor = Color.black; - wfCamera.orthographic = true; - wfCamera.orthographicSize = 0.5f; - wfCamera.nearClipPlane = 0.01f; - wfCamera.farClipPlane = 2.1f; - wfCamera.depth = 0; - wfCamera.renderingPath = RenderingPath.Forward; - wfCamera.useOcclusionCulling = false; - wfCamera.allowHDR = false; - wfCamera.allowMSAA = false; - wfCamera.targetTexture = renderTexture; - wfCamera.enabled = false; - } - } - } - else if (!checkWireframe && wfCamera != null) - { - Destroy(foregroundRenderer.gameObject); - Destroy(backgroundRenderer.gameObject); - - wfCamera.targetTexture = null; - Destroy(wfCamera.gameObject); - } -#endregion - - #region raycast - if (checkRaycast && thinWall == null) - { - thinWall = GameObject.CreatePrimitive(PrimitiveType.Plane); - thinWall.name = "ThinWall"; - thinWall.layer = whLayer; - thinWall.transform.parent = serviceContainer.transform; - - // if we scale x down to 0.1, some raycast cheats wont work - thinWall.transform.localScale = new Vector3(0.2f, 1f, 0.2f); - thinWall.transform.localRotation = Quaternion.Euler(270, 0, 0); - thinWall.transform.localPosition = new Vector3(0, 0, 1.4f); - //thinWall.GetComponent().isTrigger = true; - - #if !(WALLHACK_DEBUG) - Destroy(thinWall.GetComponent()); - Destroy(thinWall.GetComponent()); - #endif - } - else if (!checkRaycast && thinWall != null) - { - Destroy(thinWall); - } - #endregion - } - else if (serviceContainer != null) - { - Destroy(serviceContainer); - } - } - - private IEnumerator InitDetector() - { - // allows to properly kill existing service objects before creating new ones - yield return waitForEndOfFrame; - - UpdateServiceContainer(); - - if (checkRigidbody) - { - StartRigidModule(); - } - - if (checkController) - { - StartControllerModule(); - } - - if (checkWireframe) - { - StartWireframeModule(); - } - - if (checkRaycast) - { - StartRaycastModule(); - } - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void StartRigidModule() - { - if (!checkRigidbody) - { - StopRigidModule(); - UninitRigidModule(); - UpdateServiceContainer(); - return; - } - - if (!rigidPlayer) InitRigidModule(); - if (rigidPlayer.transform.localPosition.z <= 1f && rigidbodyDetections > 0) - { -#if ACTK_DEBUG_ENABLED - Debug.Log(LogPrefix + "rigidbody success shot! False positives counter reset.", this); -#endif - rigidbodyDetections = 0; - } - - rigidPlayer.rotation = Quaternion.identity; - rigidPlayer.angularVelocity = Vector3.zero; - rigidPlayer.transform.localPosition = new Vector3(0.75f, 0, -1f); - rigidPlayer.linearVelocity = rigidPlayerVelocity; - Invoke(nameof(StartRigidModule), 4); - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void StartControllerModule() - { - if (!checkController) - { - StopControllerModule(); - UninitControllerModule(); - UpdateServiceContainer(); - return; - } - - if (!charControllerPlayer) InitControllerModule(); - if (charControllerPlayer.transform.localPosition.z <= 1f && controllerDetections > 0) - { -#if ACTK_DEBUG_ENABLED - Debug.Log(LogPrefix + "controller success shot! False positives counter reset.", this); -#endif - controllerDetections = 0; - } - - charControllerPlayer.transform.localPosition = new Vector3(-0.75f, 0, -1f); - charControllerVelocity = 0.01f; - Invoke(nameof(StartControllerModule), 4); - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void StartWireframeModule() - { - if (!checkWireframe) - { - StopWireframeModule(); - UpdateServiceContainer(); - return; - } - - if (!wireframeDetected) - { - Invoke(nameof(ShootWireframeModule), wireframeDelay); - } - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void ShootWireframeModule() - { - StartCoroutine(CaptureFrame()); - Invoke(nameof(ShootWireframeModule), wireframeDelay); - } - - private IEnumerator CaptureFrame() - { -#if WALLHACK_DEBUG - if (thinWall != null) thinWall.GetComponent().enabled = false; - if (solidWall != null) solidWall.GetComponent().enabled = false; - if (charControllerPlayer != null) charControllerPlayer.GetComponent().enabled = false; - if (rigidPlayer != null) rigidPlayer.GetComponent().enabled = false; -#endif - wfCamera.enabled = true; - yield return waitForEndOfFrame; - - foregroundRenderer.enabled = true; - backgroundRenderer.enabled = true; - - var previousActive = RenderTexture.active; - RenderTexture.active = renderTexture; - - wfCamera.Render(); - - foregroundRenderer.enabled = false; - backgroundRenderer.enabled = false; - - while (!renderTexture.IsCreated()) - { - yield return waitForEndOfFrame; - } - targetTexture.ReadPixels(new Rect(0, 0, RenderTextureSize, RenderTextureSize), 0, 0, false); - targetTexture.Apply(); - - RenderTexture.active = previousActive; - -#if WALLHACK_DEBUG - if (thinWall != null) thinWall.GetComponent().enabled = true; - if (solidWall != null) solidWall.GetComponent().enabled = true; - if (charControllerPlayer != null) charControllerPlayer.GetComponent().enabled = true; - if (rigidPlayer != null) rigidPlayer.GetComponent().enabled = true; -#endif - - // in case we've deactivated detector while waiting for a frame - if (wfCamera == null) yield break; - - wfCamera.enabled = false; - - var pix1 = targetTexture.GetPixel(0, 3); - var pix2 = targetTexture.GetPixel(0, 1); - var pix3 = targetTexture.GetPixel(3, 3); - var pix4 = targetTexture.GetPixel(3, 1); - var pix5 = targetTexture.GetPixel(1, 3); - var pix6 = targetTexture.GetPixel(2, 3); - var pix7 = targetTexture.GetPixel(1, 1); - var pix8 = targetTexture.GetPixel(2, 1); - - var diff1 = ColorsDiffer(pix1, wfColor1); - var diff2 = ColorsDiffer(pix2, wfColor2); - var diff3 = ColorsDiffer(pix3, wfColor1); - var diff4 = ColorsDiffer(pix4, wfColor2); - var diff5 = ColorsDiffer(pix5, wfColor1); - var diff6 = ColorsDiffer(pix6, wfColor1); - var diff7 = ColorsDiffer(pix7, wfColor2); - var diff8 = ColorsDiffer(pix8, wfColor2); - - var detected = diff1 || - diff2 || - diff3 || - diff4 || - diff5 || - diff6 || - diff7 || - diff8; - - if (!detected) - { - if (wireframeDetections > 0) - { -#if ACTK_DEBUG_ENABLED - Debug.Log(LogPrefix + "wireframe success shot! False positives counter reset.", this); -#endif - wireframeDetections = 0; - } - } - else - { - wireframeDetections++; - wireframeDetected = Detect(); - -#if WALLHACK_DEBUG || ACTK_DETECTION_BACKLOGS - Debug.LogWarning(LogPrefix + "wireframe wallhack detected. Details below:\n" + - "wfColor1: " + (Color32)wfColor1 + ", wfColor2: " + (Color32)wfColor2 + "\n" + - (Color32)pix1 + " != wfColor1: " + diff1 + "\n" + - (Color32)pix2 + " != wfColor2: " + diff2 + "\n" + - (Color32)pix3 + " != wfColor1: " + diff3 + "\n" + - (Color32)pix4 + " != wfColor2: " + diff4 + "\n" + - (Color32)pix5 + " != wfColor1: " + diff5 + "\n" + - (Color32)pix6 + " != wfColor1: " + diff6 + "\n" + - (Color32)pix7 + " != wfColor2: " + diff7 + "\n" + - (Color32)pix8 + " != wfColor2: " + diff8, this); -#endif - } - yield return null; - } - - private bool ColorsDiffer(Color a, Color b) - { - return Math.Abs(a.r - b.r) > ColorsDifferenceThreshold || - Math.Abs(a.g - b.g) > ColorsDifferenceThreshold || - Math.Abs(a.b - b.b) > ColorsDifferenceThreshold; - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void StartRaycastModule() - { - if (!checkRaycast) - { - StopRaycastModule(); - UpdateServiceContainer(); - return; - } - - Invoke(nameof(ShootRaycastModule), raycastDelay); - } - -#if ACTK_EXCLUDE_OBFUSCATION - [System.Reflection.Obfuscation(Exclude = true)] -#endif - private void ShootRaycastModule() - { - if (Physics.RaycastNonAlloc(serviceContainer.transform.position, serviceContainer.transform.TransformDirection(Vector3.forward), rayHits, 1.5f, raycastMask) > 0) - { - if (raycastDetections > 0) - { -#if ACTK_DEBUG_ENABLED - Debug.Log(LogPrefix + "raycast success shot! False positives counter reset.", this); -#endif - raycastDetections = 0; - } - } - else - { - raycastDetections++; - if (Detect()) return; - } - - Invoke(nameof(ShootRaycastModule), raycastDelay); - } - - private void StopRigidModule() - { - if (rigidPlayer) rigidPlayer.linearVelocity = Vector3.zero; - CancelInvoke(nameof(StartRigidModule)); - } - - private void StopControllerModule() - { - if (charControllerPlayer) charControllerVelocity = 0; - CancelInvoke(nameof(StartControllerModule)); - } - - private void StopWireframeModule() - { - CancelInvoke(nameof(ShootWireframeModule)); - } - - private void StopRaycastModule() - { - CancelInvoke(nameof(ShootRaycastModule)); - } - - private void InitRigidModule() - { -#if WALLHACK_DEBUG - var player = GameObject.CreatePrimitive(PrimitiveType.Capsule); - player.name = "RigidPlayer"; - player.GetComponent().height = 2; -#else - var player = new GameObject("RigidPlayer"); - player.AddComponent().height = 2; -#endif - player.layer = whLayer; - player.transform.parent = serviceContainer.transform; - player.transform.localPosition = new Vector3(0.75f, 0, -1f); - rigidPlayer = player.AddComponent(); - rigidPlayer.useGravity = false; - } - - private void InitControllerModule() - { -#if WALLHACK_DEBUG - var player = GameObject.CreatePrimitive(PrimitiveType.Capsule); - player.name = "ControlledPlayer"; - player.GetComponent().height = 2; -#else - var player = new GameObject("ControlledPlayer"); - player.AddComponent().height = 2; -#endif - player.layer = whLayer; - player.transform.parent = serviceContainer.transform; - player.transform.localPosition = new Vector3(-0.75f, 0, -1f); - charControllerPlayer = player.AddComponent(); - } - - private void UninitRigidModule() - { - if (!rigidPlayer) return; - - Destroy(rigidPlayer.gameObject); - rigidPlayer = null; - } - - private void UninitControllerModule() - { - if (!charControllerPlayer) return; - - Destroy(charControllerPlayer.gameObject); - charControllerPlayer = null; - } - - private bool Detect() - { - var result = false; - - if (controllerDetections > maxFalsePositives || - rigidbodyDetections > maxFalsePositives || - wireframeDetections > maxFalsePositives || - raycastDetections > maxFalsePositives) - { -#if ACTK_DEBUG_ENABLED - Debug.LogWarning(LogPrefix + "final detection!", this); -#endif - -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(LogPrefix + - "controllerDetections: " + controllerDetections + "\n" + - "rigidbodyDetections: " + rigidbodyDetections + "\n" + - "wireframeDetections: " + wireframeDetections + "\n" + - "raycastDetections: " + raycastDetections, this); -#endif - - OnCheatingDetected(); - result = true; - } -#if ACTK_DEBUG_ENABLED - else - { - Debug.LogWarning(LogPrefix + "detection!", this); - } -#endif - - return result; - } - - private static Color32 GenerateColor() - { - return new Color32((byte)UnityEngine.Random.Range(0, 256), (byte)UnityEngine.Random.Range(0, 256), (byte)UnityEngine.Random.Range(0, 256), 255); - } - - private static bool ColorsSimilar(Color32 c1, Color32 c2, int tolerance) - { - return Math.Abs(c1.r - c2.r) < tolerance && - Math.Abs(c1.g - c2.g) < tolerance && - Math.Abs(c1.b - c2.b) < tolerance; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/WallHackDetector.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/WallHackDetector.cs.meta deleted file mode 100644 index 02346d7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Detectors/WallHackDetector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d123a0bf35a94004aa342821cfcc3ea8 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - thinWallPrefab: {fileID: 100000, guid: 3679c69bab7abbf408e8fcd6d63fd849, type: 2} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine.meta deleted file mode 100644 index 453a226..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8630c5d4888d6074296f1e9e7f3b4241 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android.meta deleted file mode 100644 index a775524..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e1d5fe30dc27425fb0c97b2325d927af -timeCreated: 1681995444 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AndroidAppSource.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AndroidAppSource.cs deleted file mode 100644 index 2500d29..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AndroidAppSource.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Genuine.Android -{ - /// - /// Guessed source of the app installation. - /// - public enum AndroidAppSource - { - /// - /// App was installed on-device from the apk with the package installer. - /// - PackageInstaller, - GooglePlayStore, - AmazonAppStore, - HuaweiAppGallery, - SamsungGalaxyStore, - /// - /// Source of the app installation is unknown. - /// - Other, - /// - /// There was a problem accessing the app installation source information. - /// - AccessError - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AndroidAppSource.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AndroidAppSource.cs.meta deleted file mode 100644 index 8532ccb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AndroidAppSource.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9f22da4768ea44e2b55af0ead88a0f36 -timeCreated: 1682126773 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSource.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSource.cs deleted file mode 100644 index 8fa0782..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSource.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Genuine.Android -{ - /// - /// Holds information about the app installation source. - /// - public class AppInstallationSource - { - /// - /// Package name of the installation source, for example "com.android.vending" for Google Play Store. - /// - public string PackageName { get; } - - /// - /// Detected source of the app installation to simplify further processing. - /// - public AndroidAppSource DetectedSource { get; } - - internal AppInstallationSource(string packageName) - { - PackageName = packageName; - DetectedSource = GetStoreName(packageName); - } - - private AndroidAppSource GetStoreName(string packageName) - { - if (packageName == null) - return AndroidAppSource.AccessError; - - switch (packageName) - { - case "com.android.vending": - return AndroidAppSource.GooglePlayStore; - case "com.amazon.venezia": - return AndroidAppSource.AmazonAppStore; - case "com.huawei.appmarket": - return AndroidAppSource.HuaweiAppGallery; - case "com.sec.android.app.samsungapps": - return AndroidAppSource.SamsungGalaxyStore; - case "com.google.android.packageinstaller": - case "com.android.packageinstaller": - return AndroidAppSource.PackageInstaller; - default: - return AndroidAppSource.Other; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSource.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSource.cs.meta deleted file mode 100644 index d328556..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSource.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 871f83f51e824dd79b63863a40954cc0 -timeCreated: 1682126786 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSourceValidator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSourceValidator.cs deleted file mode 100644 index bbb3a29..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSourceValidator.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using CodeStage.AntiCheat.Common; -using UnityEngine; - -namespace CodeStage.AntiCheat.Genuine.Android -{ - /// - /// Simple tool to quickly figure out installation source of the app. - /// - public static class AppInstallationSourceValidator - { -#if UNITY_ANDROID - private static AndroidJavaClass routinesClass; -#endif - - /// - /// Allows getting detailed information about installation source of the app. - /// - /// AppInstallationSource instance or null if run not on Android device or exception occured. - public static AppInstallationSource GetAppInstallationSource() - { -#if UNITY_ANDROID - try - { - var installerPackageName = Utils.AndroidRoutines.GetPackageInstallerName(); - return new AppInstallationSource(installerPackageName); - } - catch (System.Exception e) - { - ACTk.PrintExceptionForSupport($"{ACTk.LogPrefix} Error while getting app installation source! See more info below.", e); - } -#else - Debug.LogWarning($"{ACTk.LogPrefix} {nameof(AppInstallationSourceValidator)} is only available on Android device."); -#endif - return null; - } - - /// - /// Checks if app was installed from the Google Play Store. - /// - /// True if app was installed from the Google Play, false otherwise. Can return false if installations source couldn't be identified. - public static bool IsInstalledFromGooglePlay() - { - var source = GetAppInstallationSource(); - return source?.DetectedSource == AndroidAppSource.GooglePlayStore; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSourceValidator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSourceValidator.cs.meta deleted file mode 100644 index 1af866b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/Android/AppInstallationSourceValidator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d1b17f686bca423eaf2c29b3cf27f2e2 -timeCreated: 1681995474 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash.meta deleted file mode 100644 index e769bbd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6fbcc57ba3ea6b7458c36201af7e164d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/BuildHashes.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/BuildHashes.cs deleted file mode 100644 index 0940568..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/BuildHashes.cs +++ /dev/null @@ -1,151 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using CodeStage.AntiCheat.Common; -using Debug = UnityEngine.Debug; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - /// - /// Contains hashes for the application build. - /// - public class BuildHashes - { - /// - /// Path to the build file or folder. - /// - public string BuildPath { get; } - - /// - /// Contains all sensitive files hashes and relative paths. - /// - public IReadOnlyList FileHashes { get; } - - /// - /// Summary hash for all files in build. - /// - /// Use with caution: summary hash for runtime build may differ from the summary hash - /// you got in Editor, for example, for Android App Bundles. - /// Use #FileHashes for more accurate hashes comparison control. - public string SummaryHash { get; } - - /// - /// Hashing duration in seconds. Will be 0 if hashing was not succeed. - /// - public double DurationSeconds { get; set; } - - internal BuildHashes(string buildPath, FileHash[] fileHashes) - { - Array.Sort(fileHashes, (x, y) => string.Compare(x.Hash, y.Hash, StringComparison.Ordinal)); - - BuildPath = buildPath; - SummaryHash = CalculateSummaryCodeHash(fileHashes); - FileHashes = fileHashes; - } - - internal BuildHashes(string buildPath, FileHash[] fileHashes, string summaryHash) - { - BuildPath = buildPath; - SummaryHash = summaryHash; - FileHashes = fileHashes; - } - - /// - /// Checks is passes hash exists in file hashes of this instance. - /// - /// Target file hash. - /// True if such hash presents at #FileHashes and false otherwise. - public bool HasFileHash(string hash) - { - foreach (var fileHash in FileHashes) - { - if (fileHash.Hash == hash) - { - return true; - } - } - - return false; - } - - /// - /// Sends enclosing hashes to the console along with file names. - /// - public void PrintToConsole() - { - var log = ACTk.LogPrefix + $"Build hashed ({DurationSeconds:F2} sec, {FileHashes?.Count} files): " + BuildPath + "\n"; - - if (!Path.GetExtension(BuildPath).Equals(".aab", StringComparison.OrdinalIgnoreCase)) - { - log += "Summary Hash: " + SummaryHash + "\n"; - } - else - { -#if UNITY_EDITOR - var warningPrefix = "[Warning] "; -#else - var warningPrefix = "[Warning] "; -#endif - log += warningPrefix + "App Bundle Summary Hash will more likely " + - "differ from the Summary Hash you'll get at runtime on target devices.\n" + - "Please use individual File Hashes instead.\n"; - } - - if (FileHashes != null) - { - log += "Individual File Hashes:"; - - foreach (var fileHash in FileHashes) - { - log += "\n" + fileHash.Path + " : " + fileHash.Hash; - } - } - - Debug.Log(log); - } - - private string CalculateSummaryCodeHash(FileHash[] hashes) - { - var hashesString = string.Empty; - if (hashes == null) return hashesString; - var count = hashes.Length; - if (count == 0) return hashesString; - - var hashLength = hashes[0].Hash.Length; - - var hashBytes = new byte[count][]; - for (var i = 0; i < count; i++) - { - hashBytes[i] = Encoding.UTF8.GetBytes(hashes[i].Hash); - } - - var averageHashBytes = new byte[hashLength / 2]; - for (var i = 0; i < hashLength; i += 2) - { - byte result = 0; - for (var j = 0; j < count; j++) - { - var b1 = hashBytes[j][i]; - var b2 = hashBytes[j][i + 1]; - result ^= (byte)((b1 << 4) | b2); - } - averageHashBytes[i / 2] = result; - } - - var sb = new StringBuilder(); - foreach (var b in averageHashBytes) - { - sb.Append(b.ToString("x2")); - } - - return sb.ToString().ToUpperInvariant().Substring(0, hashLength); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/BuildHashes.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/BuildHashes.cs.meta deleted file mode 100644 index 754a8dd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/BuildHashes.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 738fc3d5fe874cc694342aa834cd729c -timeCreated: 1584031725 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/CodeHashGenerator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/CodeHashGenerator.cs deleted file mode 100644 index 4747b2d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/CodeHashGenerator.cs +++ /dev/null @@ -1,182 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections; -using System.Threading; -using System.Threading.Tasks; -using CodeStage.AntiCheat.Common; -using UnityEngine; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - /// - /// Generates current application runtime code hash to let you validate it against previously generated runtime code hash to detect external code manipulations. - /// - /// Calculation is done on the separate threads where possible to prevent noticeable CPU spikes and performance impact.
- /// Supported platforms: Windows PC, Android (more to come)
- /// Resulting hash in most cases should match value you get from the \ref CodeStage.AntiCheat.EditorCode.PostProcessors.CodeHashGeneratorPostprocessor "CodeHashGeneratorPostprocessor". - [AddComponentMenu("")] - [DisallowMultipleComponent] - public class CodeHashGenerator : KeepAliveBehaviour, ICodeHashGenerator - { - private const int CompletionCheckIntervalMilliseconds = 500; - - /// - /// Subscribe to get resulting hash right after it gets calculated. - /// - public static event HashGeneratorResultHandler HashGenerated; - - /// - /// Stores previously calculated result. - /// Can be null if Generate() wasn't called yet or if it was called but calculation is still in process. - /// - /// \sa #IsBusy - public HashGeneratorResult LastResult { get; private set; } - - private readonly WaitForSeconds cachedWaitForSeconds = new WaitForSeconds(CompletionCheckIntervalMilliseconds / 1000f); - private BaseWorker currentWorker; - - private SemaphoreSlim completionSource; - - /// - /// Call to make sure current platform is compatible before calling Generate(). - /// - /// True if current platform is supported by the CodeHashGenerator, otherwise returns false. - /// Can return true in Editor but Hash Generation in Editor is not possible (nothing to hash). - public static bool IsTargetPlatformCompatible() - { -#if UNITY_ANDROID || UNITY_STANDALONE_WIN - return true; -#else - return false; -#endif - } - - /// - /// Creates new instance of the CodeHashGenerator at scene if it doesn't exists. Make sure to call NOT from Awake phase. - /// - /// New or existing instance of the detector. - public static ICodeHashGenerator AddToSceneOrGetExisting() - { - return GetOrCreateInstance; - } - - /// - /// Call to start current runtime code hash generation. Automatically adds instance to the scene if necessary. - /// - /// Threads to use while hashing the files. - public static ICodeHashGenerator Generate(int maxThreads = 1) - { - return GetOrCreateInstance.GenerateInternal(maxThreads); - } - - /// - /// Awaitable version of Generate(). Allows awaiting for the generation result. - /// - /// Threads to use while hashing the files. - public static Task GenerateAsync(int maxThreads = 1) - { - return GetOrCreateInstance.GenerateInternalAsync(maxThreads); - } - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - HashGenerated = null; - Instance = null; - } -#endif - - /// - /// Indicates if hash generation is currently in process. - /// - public bool IsBusy => currentWorker != null && currentWorker.IsBusy; - - ICodeHashGenerator ICodeHashGenerator.Generate(int maxThreads) - { - return Generate(maxThreads); - } - - Task ICodeHashGenerator.GenerateAsync(int maxThreads) - { - return GenerateAsync(maxThreads); - } - - protected override void OnDestroy() - { - base.OnDestroy(); - HashGenerated = null; - } - - private async Task GenerateInternalAsync(int maxThreads) - { - completionSource = new SemaphoreSlim(0,1); - GenerateInternal(maxThreads); - await completionSource.WaitAsync(TimeSpan.FromHours(10)); - completionSource.Dispose(); - completionSource = null; - - return LastResult; - } - - private ICodeHashGenerator GenerateInternal(int maxThreads) - { - if (LastResult != null) - { - HashGenerated?.Invoke(LastResult); - completionSource?.Release(); - return this; - } - - if (IsBusy) - { - Debug.LogWarning($"{nameof(CodeHashGenerator)} generation was started while it's already busy."); - LastResult = HashGeneratorResult.FromError("Already running."); - completionSource?.Release(); - return this; - } - - currentWorker = null; - -#if UNITY_EDITOR || !(UNITY_ANDROID || UNITY_STANDALONE_WIN) - if (Application.isEditor) - Debug.LogError(ACTk.LogPrefix + - "CodeHashGenerator does not work in Editor. Please use it in Unity Player only.\n" + - "This message is harmless."); - else - Debug.LogError(ACTk.LogPrefix + "CodeHashGenerator works only in Android and Windows Standalone runtimes (both Mono and IL2CPP)."); - LastResult = HashGeneratorResult.FromError("Incorrect platform."); - completionSource?.Release(); - return this; -#else - maxThreads = 1 > maxThreads ? 1 : maxThreads; - #if UNITY_ANDROID - currentWorker = new AndroidWorker(maxThreads); - #elif UNITY_STANDALONE_WIN - currentWorker = new StandaloneWindowsWorker(maxThreads); - #endif - currentWorker.Execute(); - StartCoroutine(CalculationAwaiter()); - - return this; -#endif - } - - private IEnumerator CalculationAwaiter() - { - while (currentWorker.IsBusy) - yield return cachedWaitForSeconds; - - LastResult = currentWorker.Result; - HashGenerated?.Invoke(LastResult); - completionSource?.Release(); - currentWorker = null; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/CodeHashGenerator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/CodeHashGenerator.cs.meta deleted file mode 100644 index 4f56346..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/CodeHashGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1a671b141459bfc479bce8bb075fcc38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FileHash.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FileHash.cs deleted file mode 100644 index 4171740..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FileHash.cs +++ /dev/null @@ -1,47 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System.IO; -using CodeStage.AntiCheat.Utils; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - /// - /// Holds hash for the specific file. - /// - public class FileHash - { - /// - /// Path to the file which was hashed. - /// - public string Path { get; } - - /// - /// Hash of the file. Calculated using semi-custom hashing algorithm based on SHA1. - /// - public string Hash { get; } - - internal FileHash(string path, Stream stream, ThreadSafeDisposablesPool sha1Pool) - { - Path = path; - var sha1 = sha1Pool.Get(); - var hash = sha1.ComputeHash(stream); - sha1Pool.Release(sha1); - Hash = StringUtils.HashBytesToHexString(hash); - } - - internal FileHash(string path, string hash) - { - Path = path; - Hash = hash; - } - - public override string ToString() - { - return Path + ": " + Hash; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FileHash.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FileHash.cs.meta deleted file mode 100644 index 320dffb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FileHash.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4457315821b04863812824a153b98988 -timeCreated: 1583769078 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FilesProgress.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FilesProgress.cs deleted file mode 100644 index 4a42c82..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FilesProgress.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - internal struct FilesProgress - { - private float progress; - private string fileName; - - public static FilesProgress Step(float progress, string fileName) - { - return new FilesProgress - { - progress = progress, - fileName = fileName - }; - } - - public static FilesProgress None() - { - return new FilesProgress - { - progress = -1, - fileName = null - }; - } - - public static IProgress CreateNew(string header) - { - return new Progress(value => - { -#if UNITY_EDITOR - if (value.progress >= 0) - UnityEditor.EditorUtility.DisplayProgressBar($"{header} {value.progress}%", $"{value.fileName} done", - value.progress); - else - UnityEditor.EditorUtility.ClearProgressBar(); -#endif - - }); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FilesProgress.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FilesProgress.cs.meta deleted file mode 100644 index 0ccd5cf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/FilesProgress.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fc63887d3556418e9374f436582b7263 -timeCreated: 1682440183 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering.meta deleted file mode 100644 index 1c67b35..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 079b58e876ec476aa197244abb78f03e -timeCreated: 1659040771 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FileFilter.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FileFilter.cs deleted file mode 100644 index 0827054..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FileFilter.cs +++ /dev/null @@ -1,114 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - using System; - using System.IO; - - internal class FileFilter - { -#pragma warning disable 0649 - public bool caseSensitive; - public bool pathRecursive; - public bool exactFileNameMatch; - public bool exactPathMatch; - - public string filterPath; - public string filterExtension; - public string filterFileName; -#pragma warning restore 0649 - - public bool MatchesPath(string filePath) - { - if (!caseSensitive) - filePath = filePath.ToLowerInvariant(); - - if (!string.IsNullOrWhiteSpace(filterExtension)) - { - var extension = Path.GetExtension(filePath); - if (string.IsNullOrEmpty(extension) || extension == ".") - return false; - - extension = extension.Remove(0, 1); - if (!filterExtension.Equals(extension, - caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase)) - return false; - } - - if (!string.IsNullOrWhiteSpace(filterFileName)) - { - var fileName = Path.GetFileNameWithoutExtension(filePath); - if (string.IsNullOrEmpty(fileName)) - return false; - - if (exactFileNameMatch) - { - if (!filterFileName.Equals(fileName, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase)) - return false; - } - else - { - if (fileName.IndexOf(filterFileName, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase) == -1) - return false; - } - } - - if (!string.IsNullOrWhiteSpace(filterPath)) - { - if (string.IsNullOrWhiteSpace(filePath)) - return false; - - if (Path.DirectorySeparatorChar != Path.AltDirectorySeparatorChar && - filePath.IndexOf(Path.DirectorySeparatorChar) != -1) - filePath = filePath.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); - - if (exactPathMatch) - { - if (!filePath.Equals(filterPath, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase)) - return false; - } - else - { - if (!PathMatch(filePath, filterPath, pathRecursive, !caseSensitive)) - return false; - } - } - - return true; - } - - private static bool PathMatch(string filePath, string filter, bool includeNested, bool ignoreCase) - { - var index = filePath.IndexOf(filter, - ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal); - - if (index == -1) - return false; - - if (!includeNested) - { - var filterLength = filter.Length; - var pathDelimiterIndex = filePath.IndexOf(Path.AltDirectorySeparatorChar, index + filterLength); - if (pathDelimiterIndex != -1 && pathDelimiterIndex > index) - return false; - } - - return true; - } - - public override string ToString() - { - return caseSensitive + "|" + - pathRecursive + "|" + - exactFileNameMatch + "|" + - exactPathMatch + "|" + - filterPath + "|" + - filterExtension + "|" + - filterFileName; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FileFilter.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FileFilter.cs.meta deleted file mode 100644 index 791bba8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FileFilter.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: dd5b56a736e3406c803e3c0524f4b30f -timeCreated: 1557523858 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilterGroup.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilterGroup.cs deleted file mode 100644 index 2e6431c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilterGroup.cs +++ /dev/null @@ -1,15 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - internal enum FilterGroup - { - Code, - Content, - All - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilterGroup.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilterGroup.cs.meta deleted file mode 100644 index 50e3b0f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilterGroup.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fe171be09c2a4f5f9789aba2a34f5bc9 -timeCreated: 1679604861 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringData.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringData.cs deleted file mode 100644 index 4062a33..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringData.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - internal class FilteringData - { - public FileFilter[] Includes { get; } // used from Android-specific code - public FileFilter[] Ignores { get; } - - public FilteringData(FileFilter[] includes, FileFilter[] ignores = null) - { - Includes = includes; - Ignores = ignores; - } - - public bool IsIncluded(string path) - { - return IsPathMatchesFilters(path, Includes); - } - - public bool IsIgnored(string path) - { - if (Ignores == null || Ignores.Length == 0) - return false; - - return IsPathMatchesFilters(path, Ignores); - } - - public FilteringData Join(FilteringData contentFilters) - { - return new FilteringData( - JoinArrays(Includes, contentFilters.Includes), - JoinArrays(Ignores, contentFilters.Ignores)); - } - - private bool IsPathMatchesFilters(string path, FileFilter[] filters) - { - foreach (var filter in filters) - { - if (filter.MatchesPath(path)) - return true; - } - - return false; - } - - private T[] JoinArrays(T[] a1, T[] a2) - { - if (a1 == null && a2 == null) return Array.Empty(); - if (a1 == null) return a2; - if (a2 == null) return a1; - - var newArray = new T[a1.Length + a2.Length]; - Array.Copy(a1, 0, newArray, 0, a1.Length); - Array.Copy(a2, 0, newArray, a1.Length, a2.Length); - return newArray; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringData.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringData.cs.meta deleted file mode 100644 index 17251fc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8218d1a22b9148579530fe1594648790 -timeCreated: 1659040780 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringSettings.cs deleted file mode 100644 index b69d703..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringSettings.cs +++ /dev/null @@ -1,20 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using UnityEngine; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - // [CreateAssetMenu(menuName = "Code Stage/Anti-Cheat Toolkit/Code Hash/Filtering Settings")] - // Going to keep this in ProjectSettings and export to encrypted json on build + include it to the hashing checks - internal class FilteringSettings : ScriptableObject - { - [field:SerializeField] - public FilterGroup DefaultGroup { get; private set; } = FilterGroup.Code; - /*public FileFilter[] CustomIncludes { get; } - public FileFilter[] CustomIgnores { get; }*/ - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringSettings.cs.meta deleted file mode 100644 index c281131..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FilteringSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fc88ed054d2646fd973cb589a44b32d8 -timeCreated: 1680189382 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FiltersProducer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FiltersProducer.cs deleted file mode 100644 index 59c6613..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FiltersProducer.cs +++ /dev/null @@ -1,186 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - internal static class FiltersProducer - { - private static FilteringSettings LoadSettings() - { - return ScriptableObject.CreateInstance(); - /*return Resources.Load("net.codestage.actk/HashFilteringSettings");*/ - } - - public static FilteringData GetFileFiltersAndroid(bool il2Cpp) - { - var group = LoadSettings().DefaultGroup; - switch (group) - { - case FilterGroup.Code: - return GetCodeFiltersForAndroid(il2Cpp); - case FilterGroup.Content: - return GetContentFiltersForAndroid(il2Cpp); - case FilterGroup.All: - return GetAllFiltersForAndroid(il2Cpp); - default: - throw new ArgumentOutOfRangeException(nameof(group), group, null); - } - } - - public static FilteringData GetFileFiltersStandaloneWindows(bool il2Cpp) - { - var group = LoadSettings().DefaultGroup; - switch (group) - { - case FilterGroup.Code: - return GetCodeFiltersForWindows(il2Cpp); - case FilterGroup.Content: - return GetContentFiltersForWindows(il2Cpp); - case FilterGroup.All: - return GetAllFiltersForWindows(il2Cpp); - default: - throw new ArgumentOutOfRangeException(nameof(group), group, null); - } - } - - private static FilteringData GetCodeFiltersForAndroid(bool il2Cpp) - { - var includes = new List - { - new FileFilter - { - filterExtension = "dex" - }, - new FileFilter - { - filterExtension = "so" - } - }; - - if (!il2Cpp) - { - includes.Add(new FileFilter - { - filterExtension = "dll" - }); - } - else - { - includes.Add(new FileFilter - { - filterFileName = "global-metadata", - filterExtension = "dat" - }); - } - - return new FilteringData(includes.ToArray()); - } - - private static FilteringData GetContentFiltersForAndroid(bool il2Cpp) - { - var includes = new List - { - new FileFilter - { - filterPath = "Resources/unity_builtin_extra", - }, - new FileFilter - { - filterPath = "bin/Data/", - pathRecursive = false, - caseSensitive = true - } - }; - - return new FilteringData(includes.ToArray()); - } - - private static FilteringData GetAllFiltersForAndroid(bool il2Cpp) - { - var codeFilters = GetCodeFiltersForAndroid(il2Cpp); - var contentFilters = GetContentFiltersForAndroid(il2Cpp); - return codeFilters.Join(contentFilters); - } - - private static FilteringData GetCodeFiltersForWindows(bool il2Cpp) - { - var includes = new List - { - new FileFilter - { - filterExtension = "dll" - }, - new FileFilter - { - filterExtension = "exe" - } - }; - - FileFilter[] ignores; - - if (il2Cpp) - { - includes.Add(new FileFilter - { - filterFileName = "global-metadata", - filterExtension = "dat", - }); - - ignores = new[] - { - new FileFilter - { - filterPath = "_BackUpThisFolder_ButDontShipItWithYourGame", - caseSensitive = true, - exactPathMatch = false, - pathRecursive = true, - } - }; - } - else - { - ignores = null; - } - - return new FilteringData(includes.ToArray(), ignores); - } - - private static FilteringData GetContentFiltersForWindows(bool il2Cpp) - { - var includes = new List - { - new FileFilter - { - filterPath = "_Data/", - pathRecursive = false, - caseSensitive = true, - exactPathMatch = false, - }, - new FileFilter - { - filterPath = "Resources/unity default resources", - }, - new FileFilter - { - filterPath = "Resources/unity_builtin_extra", - }, - }; - - return new FilteringData(includes.ToArray()); - } - - private static FilteringData GetAllFiltersForWindows(bool il2Cpp) - { - var codeFilters = GetCodeFiltersForWindows(il2Cpp); - var contentFilters = GetContentFiltersForWindows(il2Cpp); - return codeFilters.Join(contentFilters); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FiltersProducer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FiltersProducer.cs.meta deleted file mode 100644 index 8981e2b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Filtering/FiltersProducer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cc6fa73d31024c40b3e61445c307ab3f -timeCreated: 1679605696 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/HashGeneratorResult.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/HashGeneratorResult.cs deleted file mode 100644 index a5bb47b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/HashGeneratorResult.cs +++ /dev/null @@ -1,95 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - /// - /// Result produced by CodeHashGenerator. Contains resulting code hash or errors information. - /// - public class HashGeneratorResult - { - [Obsolete("Please use SummaryHash property instead.", true)] - public string CodeHash => SummaryHash; - - /// - /// Summary hash for all files in currently running build. - /// May be null in case #Success is not true. - /// - /// Use with caution: summary hash for runtime build may differ from the summary hash - /// you got in Editor, for example, for Android App Bundles. - /// Use #FileHashes for more accurate hashes comparison control. - public string SummaryHash => buildHashes.SummaryHash; - - /// - /// Hashes for all files in currently running build. - /// Feel free to compare it against hashes array you got in Editor to find if - /// runtime version has new unknown hashes (this is an indication build was altered). - /// - public IReadOnlyList FileHashes => buildHashes.FileHashes; - - /// - /// Error message you could find useful in case #Success is not true. - /// - public string ErrorMessage { get; private set; } - - /// - /// True if generation was successful and resulting hashes are stored in #FileHashes, - /// otherwise check #ErrorMessage to find out error cause. - /// - public bool Success => ErrorMessage == null; - - /// - /// Hashing duration in seconds. Will be 0 if hashing was not succeed. - /// - public double DurationSeconds => buildHashes.DurationSeconds; - - private string summaryCodeHash; - private BuildHashes buildHashes; - - private HashGeneratorResult() { } - - internal static HashGeneratorResult FromError(string errorMessage) - { - return new HashGeneratorResult - { - ErrorMessage = errorMessage - }; - } - - internal static HashGeneratorResult FromBuildHashes(BuildHashes buildHashes) - { - return new HashGeneratorResult - { - buildHashes = buildHashes - }; - } - - /// - /// Checks is passes hash exists in file hashes of this instance. - /// - /// Target file hash. - /// True if such hash presents at #FileHashes and false otherwise. - public bool HasFileHash(string hash) - { - return buildHashes.HasFileHash(hash); - } - - /// - /// Prints found hashes to the console (if any). - /// - public void PrintToConsole() - { - if (Success) - buildHashes.PrintToConsole(); - else - Debug.LogError(ErrorMessage); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/HashGeneratorResult.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/HashGeneratorResult.cs.meta deleted file mode 100644 index 8cca091..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/HashGeneratorResult.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6b641e2e931fb654794a4c8e18097e5e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/ICodeHashGenerator.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/ICodeHashGenerator.cs deleted file mode 100644 index 70870ad..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/ICodeHashGenerator.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System.Threading.Tasks; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - public delegate void HashGeneratorResultHandler(HashGeneratorResult result); - - /// - /// CodeHashGenerator interface to make it easier to use it through the Instance. - /// - public interface ICodeHashGenerator - { - /// - /// Stores previously calculated result. - /// Can be null if Generate() wasn't called yet or if it was called but calculation is still in process. - /// - /// \sa #IsBusy - HashGeneratorResult LastResult { get; } - - /// - /// Indicates if hash generation is currently in process. - /// - bool IsBusy { get; } - - /// - /// Call to start current runtime code hash generation. Automatically adds instance to the scene if necessary. - /// - /// Threads to use while hashing files. Use Environment.ProcessorCount to use all cores. - ICodeHashGenerator Generate(int maxThreads = 1); - - /// - /// Awaitable version of Generate(). Allows awaiting for the generation result. - /// - /// Threads to use while hashing files. Use Environment.ProcessorCount to use all cores. - Task GenerateAsync(int maxThreads = 1); - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/ICodeHashGenerator.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/ICodeHashGenerator.cs.meta deleted file mode 100644 index 468de05..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/ICodeHashGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f06aa8a64f773404da00090f642383dd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/SHA1Wrapper.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/SHA1Wrapper.cs deleted file mode 100644 index 5a514ed..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/SHA1Wrapper.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - using System; - using System.IO; - using System.Security.Cryptography; - - /// - /// Just an Utility class to make it easier to work with SHA1. - /// - /// Not intended for usage from user code, - /// touch at your peril since API can change and break backwards compatibility! - public class SHA1Wrapper : IDisposable - { - private readonly SHA1Managed sha1; - - public SHA1Wrapper() - { - sha1 = new SHA1Managed(); - } - - public byte[] ComputeHash(Stream stream) - { - return sha1.ComputeHash(stream); - } - - public byte[] ComputeHash(byte[] bytes) - { - return sha1.ComputeHash(bytes); - } - - public void Dispose() - { - sha1?.Dispose(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/SHA1Wrapper.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/SHA1Wrapper.cs.meta deleted file mode 100644 index 75f2b79..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/SHA1Wrapper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 64afe032c42b00a45aa5627298cf5630 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers.meta deleted file mode 100644 index 172041a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5d753138687289347859825ac64935e2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/AndroidWorker.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/AndroidWorker.cs deleted file mode 100644 index 7d89004..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/AndroidWorker.cs +++ /dev/null @@ -1,121 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_ANDROID -#define ACTK_ANDROID_DEVICE -#endif - -#if ACTK_ANDROID_DEVICE - -using CodeStage.AntiCheat.Common; -using System; -using UnityEngine; -using System.Diagnostics; -using System.Collections.Generic; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - internal class AndroidWorker : BaseWorker - { - private Stopwatch sw; - - [System.Reflection.Obfuscation(Exclude = true, ApplyToMembers=false)] - private class CodeHashGeneratorCallback : AndroidJavaProxy - { - private readonly AndroidWorker parent; - - public CodeHashGeneratorCallback(AndroidWorker parent) : base("net.codestage.actk.androidnative.CodeHashCallback") - { - this.parent = parent; - } - - [System.Reflection.Obfuscation(Exclude = true)] - // called from native Android plugin, from separate thread - public void OnSuccess(string buildPath, string[] paths, string[] hashes, string summaryHash) - { - var fileHashes = new FileHash[hashes.Length]; - for (var i = 0; i < hashes.Length; i++) - { - var hash = hashes[i]; - var path = paths[i]; - - fileHashes[i] = new FileHash(path, hash); - } - - var buildHashes = new BuildHashes(buildPath, fileHashes, summaryHash); - parent.sw.Stop(); - buildHashes.DurationSeconds = parent.sw.Elapsed.TotalSeconds; - parent.Complete(HashGeneratorResult.FromBuildHashes(buildHashes)); - } - - [System.Reflection.Obfuscation(Exclude = true)] - // called from native Android plugin, from separate thread - public void OnError(string errorMessage) - { - parent.Complete(HashGeneratorResult.FromError(errorMessage)); - } - } - - public AndroidWorker(int threadsCount) : base(threadsCount) { } - - public override void Execute() - { - base.Execute(); - - const string classPath = "net.codestage.actk.androidnative.CodeHashGenerator"; - - try - { - sw = Stopwatch.StartNew(); - using (var nativeClass = new AndroidJavaClass(classPath)) - { -#if ENABLE_IL2CPP - var il2cpp = true; -#else - var il2cpp = false; -#endif - - var filters = FiltersProducer.GetFileFiltersAndroid(il2cpp); - nativeClass.CallStatic("GetCodeHash", GenerateStringArrayFromFilters(filters), new CodeHashGeneratorCallback(this), threadsCount); - } - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Can't initialize NativeRoutines!", e); - } - } - - private string[] GenerateStringArrayFromFilters(FilteringData allFilters) - { - var serializedFilters = new List(); - if (allFilters.Includes != null && allFilters.Includes.Length > 0) - serializedFilters.AddRange(SerializeArray(allFilters.Includes)); - if (allFilters.Ignores != null && allFilters.Ignores.Length > 0) - { - serializedFilters.Add("IGNORES"); - serializedFilters.AddRange(SerializeArray(allFilters.Ignores)); - } - return serializedFilters.ToArray(); - - IEnumerable SerializeArray(IList filters) - { - if (filters == null || filters.Count == 0) - return Array.Empty(); - - var itemsCount = filters.Count; - var result = new string[itemsCount]; - for (var i = 0; i < itemsCount; i++) - { - result[i] = filters[i].ToString(); - } - - return result; - } - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/AndroidWorker.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/AndroidWorker.cs.meta deleted file mode 100644 index a478e18..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/AndroidWorker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7e2effac38f14644699881c7c79150e1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/BaseWorker.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/BaseWorker.cs deleted file mode 100644 index 1e48ab0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/BaseWorker.cs +++ /dev/null @@ -1,32 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - internal abstract class BaseWorker - { - public HashGeneratorResult Result { get; private set; } - public bool IsBusy { get; private set; } - - protected readonly int threadsCount; - - public BaseWorker(int threadsCount) - { - this.threadsCount = threadsCount; - } - - public virtual void Execute() - { - IsBusy = true; - } - - protected virtual void Complete(HashGeneratorResult result) - { - Result = result; - IsBusy = false; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/BaseWorker.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/BaseWorker.cs.meta deleted file mode 100644 index 848763f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/BaseWorker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e0bee74c0f58db645aa3c72ec1eea123 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/StandaloneWindowsWorker.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/StandaloneWindowsWorker.cs deleted file mode 100644 index 36082ab..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/StandaloneWindowsWorker.cs +++ /dev/null @@ -1,135 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections.Concurrent; -using System.IO; -using System.Diagnostics; -using UnityEngine; -using System.Threading.Tasks; -using CodeStage.AntiCheat.Common; -using CodeStage.AntiCheat.Utils; - -namespace CodeStage.AntiCheat.Genuine.CodeHash -{ - internal class StandaloneWindowsWorker : BaseWorker - { - private static readonly object ProgressLock = new object(); - - public static BuildHashes GetBuildHashes(string buildPath, FilteringData filters, int numCores, - IProgress progress = null) - { - var sw = Stopwatch.StartNew(); - - var files = Directory.GetFiles(buildPath, "*", SearchOption.AllDirectories); - var count = files.Length; - if (count == 0) - return null; - - var fileHashes = new ConcurrentBag(); - var options = new ParallelOptions - { - MaxDegreeOfParallelism = numCores, - }; - - var latestPercent = 0; - var filesChecked = 0; - - var sha1Pool = new ThreadSafeDisposablesPool(() => new SHA1Wrapper()); - - Parallel.ForEach(files, options, (filePath, state) => - { - var skipped = true; - try - { - // skip folders since we can't hash them - if (Directory.Exists(filePath)) - return; - - if (filters.IsIgnored(filePath)) - return; - - if (!filters.IsIncluded(filePath)) - return; - - using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) - using (var bs = new BufferedStream(fs)) - { - //Debug.Log("Path: " + filePath + "\nHash: " + hashString); - fileHashes.Add(new FileHash(filePath, bs, sha1Pool)); - } - - skipped = false; - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport($"Something went wrong while calculating {filePath} hash in {buildPath}!", e); - } - finally - { - lock (ProgressLock) - { - filesChecked++; - if (!skipped) - progress?.ReportPercent(ref latestPercent, filesChecked, count, Path.GetFileName(filePath)); - } - } - }); - - sha1Pool.Dispose(); - progress?.Report(FilesProgress.None()); - sw.Stop(); - - if (fileHashes.Count == 0) - return null; - - var result = new BuildHashes(buildPath, fileHashes.ToArray()) - { - DurationSeconds = sw.Elapsed.TotalSeconds - }; - - return result; - } - - public StandaloneWindowsWorker(int threadsCount) : base(threadsCount) { } - - public override void Execute() - { - base.Execute(); - - try - { - var buildFolder = Path.GetFullPath(Application.dataPath + @"\..\"); -#if ENABLE_IL2CPP - var il2cpp = true; -#else - var il2cpp = false; -#endif - var filters = FiltersProducer.GetFileFiltersStandaloneWindows(il2cpp); - Task.Run(()=>GenerateHashThread(buildFolder, filters)); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Something went wrong while calculating hash!", e); - Complete(HashGeneratorResult.FromError(e.ToString())); - } - } - - private void GenerateHashThread(string folder, FilteringData filteringData) - { - try - { - var buildHashes = GetBuildHashes(folder, filteringData, threadsCount); - Complete(HashGeneratorResult.FromBuildHashes(buildHashes)); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Something went wrong in hashing thread!", e); - Complete(HashGeneratorResult.FromError(e.ToString())); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/StandaloneWindowsWorker.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/StandaloneWindowsWorker.cs.meta deleted file mode 100644 index 6ead1f3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Genuine/CodeHash/Workers/StandaloneWindowsWorker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 43857e841d4d9af48bd3c10efb7f9547 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes.meta deleted file mode 100644 index 88f57fc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 81cab858d70b02d4e8ee26e389360dd3 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters.meta deleted file mode 100644 index 93713bc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 866cfe8eb95465b4a9f8d67e0179b932 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft.meta deleted file mode 100644 index 4d4d9e9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b473e53885ec81142b84b62aaedd530f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft/ObscuredTypesNewtonsoftConverter.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft/ObscuredTypesNewtonsoftConverter.cs deleted file mode 100644 index c184f28..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft/ObscuredTypesNewtonsoftConverter.cs +++ /dev/null @@ -1,293 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -// ACTK_NEWTONSOFT_JSON is True if project has the com.unity.nuget.newtonsoft-json package v2.0.0 or newer installed -// you can add this package to your project via the Package Manager by package name and use it instead of regular Json.NET library -// or you can enable ACTK_NEWTONSOFT_JSON manually at ACTk Settings instead. - -#if ACTK_NEWTONSOFT_JSON - -using System; -using System.Linq; -using System.Numerics; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using UnityEngine; -using Quaternion = UnityEngine.Quaternion; -using Vector2 = UnityEngine.Vector2; -using Vector3 = UnityEngine.Vector3; -using System.Globalization; - -namespace CodeStage.AntiCheat.ObscuredTypes.Converters -{ - /// - /// Regular JsonConverter for Jscon.NET that allows to serialize and deserialize ObscuredTypes decrypted values. - /// - /// See more and usage examples at the 'Obscured Types JSON Serialization' User Manual chapter. - public class ObscuredTypesNewtonsoftConverter : JsonConverter - { - private readonly Type[] types = { - typeof(ObscuredBigInteger), - typeof(ObscuredBool), - typeof(ObscuredByte), - typeof(ObscuredChar), - typeof(ObscuredDateTime), - typeof(ObscuredDecimal), - typeof(ObscuredDouble), - typeof(ObscuredFloat), - typeof(ObscuredInt), - typeof(ObscuredLong), - typeof(ObscuredQuaternion), - typeof(ObscuredSByte), - typeof(ObscuredShort), - typeof(ObscuredString), - typeof(ObscuredUInt), - typeof(ObscuredULong), - typeof(ObscuredUShort), - typeof(ObscuredVector2), - typeof(ObscuredVector2Int), - typeof(ObscuredVector3), - typeof(ObscuredVector3Int), - }; - - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - switch (value) - { - case ObscuredBigInteger obscuredBigInteger: - writer.WriteValue(obscuredBigInteger.ToString(CultureInfo.InvariantCulture)); - break; - case ObscuredBool obscuredBool: - writer.WriteValue(obscuredBool); - break; - case ObscuredByte obscuredByte: - writer.WriteValue(obscuredByte); - break; - case ObscuredChar obscuredChar: - writer.WriteValue(obscuredChar); - break; - case ObscuredDateTime obscuredDateTime: - writer.WriteValue(obscuredDateTime); - break; - case ObscuredDecimal obscuredDecimal: - writer.WriteValue(obscuredDecimal); - break; - case ObscuredDouble obscuredDouble: - writer.WriteValue(obscuredDouble); - break; - case ObscuredFloat obscuredFloat: - writer.WriteValue(obscuredFloat); - break; - case ObscuredInt obscuredInt: - writer.WriteValue(obscuredInt); - break; - case ObscuredLong obscuredLong: - writer.WriteValue(obscuredLong); - break; - case ObscuredQuaternion obscuredQuaternion: - var quaternion = (Quaternion)obscuredQuaternion; - writer.WriteStartObject(); - writer.WritePropertyName("x"); - writer.WriteValue(quaternion.x); - writer.WritePropertyName("y"); - writer.WriteValue(quaternion.y); - writer.WritePropertyName("z"); - writer.WriteValue(quaternion.z); - writer.WritePropertyName("w"); - writer.WriteValue(quaternion.w); - writer.WriteEndObject(); - break; - case ObscuredSByte obscuredSByte: - writer.WriteValue(obscuredSByte); - break; - case ObscuredShort obscuredShort: - writer.WriteValue(obscuredShort); - break; - case ObscuredString obscuredString: - writer.WriteValue(obscuredString); - break; - case ObscuredUInt obscuredUInt: - writer.WriteValue(obscuredUInt); - break; - case ObscuredULong obscuredULong: - writer.WriteValue(obscuredULong); - break; - case ObscuredUShort obscuredUShort: - writer.WriteValue(obscuredUShort); - break; - case ObscuredVector2 obscuredVector2: - var vector2 = (Vector2)obscuredVector2; - writer.WriteStartObject(); - writer.WritePropertyName("x"); - writer.WriteValue(vector2.x); - writer.WritePropertyName("y"); - writer.WriteValue(vector2.y); - writer.WriteEndObject(); - break; - case ObscuredVector2Int obscuredVector2Int: - var vector2Int = (Vector2Int)obscuredVector2Int; - writer.WriteStartObject(); - writer.WritePropertyName("x"); - writer.WriteValue(vector2Int.x); - writer.WritePropertyName("y"); - writer.WriteValue(vector2Int.y); - writer.WriteEndObject(); - break; - case ObscuredVector3 obscuredVector3: - var vector3 = (Vector3)obscuredVector3; - writer.WriteStartObject(); - writer.WritePropertyName("x"); - writer.WriteValue(vector3.x); - writer.WritePropertyName("y"); - writer.WriteValue(vector3.y); - writer.WritePropertyName("z"); - writer.WriteValue(vector3.z); - writer.WriteEndObject(); - break; - case ObscuredVector3Int obscuredVector3Int: - var vector3Int = (Vector3Int)obscuredVector3Int; - writer.WriteStartObject(); - writer.WritePropertyName("x"); - writer.WriteValue(vector3Int.x); - writer.WritePropertyName("y"); - writer.WriteValue(vector3Int.y); - writer.WritePropertyName("z"); - writer.WriteValue(vector3Int.z); - writer.WriteEndObject(); - break; - default: - throw new Exception($"{nameof(ObscuredTypesNewtonsoftConverter)} type " + value.GetType() + - " is not implemented!"); - } - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - if (reader.TokenType == JsonToken.Null) - return null; - - if (objectType == typeof(ObscuredBigInteger)) - { - var input = reader.Value as string; - if (string.IsNullOrEmpty(input)) - return (ObscuredBigInteger)0; - - if (BigInteger.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out var output)) - return (ObscuredBigInteger)output; - - // Obsolete fallback to read bytearray - var bytes = Convert.FromBase64String(input); - return (ObscuredBigInteger)new BigInteger(bytes); - } - if (objectType == typeof(ObscuredBool)) - return (ObscuredBool)Convert.ToBoolean(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredByte)) - return (ObscuredByte)Convert.ToByte(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredChar)) - return (ObscuredChar)Convert.ToChar(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredDateTime)) - return (ObscuredDateTime)Convert.ToDateTime(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredDecimal)) - return (ObscuredDecimal)Convert.ToDecimal(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredDouble)) - return (ObscuredDouble)Convert.ToDouble(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredFloat)) - return (ObscuredFloat)Convert.ToSingle(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredInt)) - return (ObscuredInt)Convert.ToInt32(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredLong)) - return (ObscuredLong)Convert.ToInt64(reader.Value, reader.Culture); - - if (objectType == typeof(ObscuredQuaternion)) - { - if (reader.TokenType != JsonToken.StartObject) - throw new Exception($"Unexpected token type '{reader.TokenType}' for {nameof(ObscuredQuaternion)}."); - - var jsonObject = JObject.Load(reader); - if (jsonObject == null) - throw new Exception($"Couldn't load {nameof(JObject)} for {nameof(ObscuredQuaternion)}."); - - var x = (jsonObject["x"] ?? 0).Value(); - var y = (jsonObject["y"] ?? 0).Value(); - var z = (jsonObject["z"] ?? 0).Value(); - var w = (jsonObject["w"] ?? 0).Value(); - var quaternion = new Quaternion(x, y, z, w); - return (ObscuredQuaternion)quaternion; - } - - if (objectType == typeof(ObscuredSByte)) - return (ObscuredSByte)Convert.ToSByte(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredShort)) - return (ObscuredShort)Convert.ToInt16(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredString)) - return (ObscuredString)Convert.ToString(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredUInt)) - return (ObscuredUInt)Convert.ToUInt32(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredULong)) - return (ObscuredULong)Convert.ToUInt64(reader.Value, reader.Culture); - if (objectType == typeof(ObscuredUShort)) - return (ObscuredUShort)Convert.ToUInt16(reader.Value, reader.Culture); - - if (objectType == typeof(ObscuredVector2)) - { - if (reader.TokenType != JsonToken.StartObject) - throw new Exception($"Unexpected token type '{reader.TokenType}' for {nameof(ObscuredVector2)}."); - - var jsonObject = JObject.Load(reader); - var x = (jsonObject["x"] ?? 0).Value(); - var y = (jsonObject["y"] ?? 0).Value(); - var vector2 = new Vector2(x, y); - return (ObscuredVector2)vector2; - } - - if (objectType == typeof(ObscuredVector2Int)) - { - if (reader.TokenType != JsonToken.StartObject) - throw new Exception($"Unexpected token type '{reader.TokenType}' for {nameof(ObscuredVector2Int)}."); - - var jsonObject = JObject.Load(reader); - var x = (jsonObject["x"] ?? 0).Value(); - var y = (jsonObject["y"] ?? 0).Value(); - var vector2Int = new Vector2Int(x, y); - return (ObscuredVector2Int)vector2Int; - } - - if (objectType == typeof(ObscuredVector3)) - { - if (reader.TokenType != JsonToken.StartObject) - throw new Exception($"Unexpected token type '{reader.TokenType}' for {nameof(ObscuredVector3)}."); - - var jsonObject = JObject.Load(reader); - var x = (jsonObject["x"] ?? 0).Value(); - var y = (jsonObject["y"] ?? 0).Value(); - var z = (jsonObject["z"] ?? 0).Value(); - var vector3 = new Vector3(x, y, z); - return (ObscuredVector3)vector3; - } - - if (objectType == typeof(ObscuredVector3Int)) - { - if (reader.TokenType != JsonToken.StartObject) - throw new Exception($"Unexpected token type '{reader.TokenType}' for {nameof(ObscuredVector3)}."); - - var jsonObject = JObject.Load(reader); - var x = (jsonObject["x"] ?? 0).Value(); - var y = (jsonObject["y"] ?? 0).Value(); - var z = (jsonObject["z"] ?? 0).Value(); - var vector3Int = new Vector3Int(x, y, z); - return (ObscuredVector3Int)vector3Int; - } - - throw new Exception($"{nameof(ObscuredTypesNewtonsoftConverter)} type {objectType} is not implemented!"); - } - - public override bool CanConvert(Type objectType) { - return types.Any(t => t == objectType); - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft/ObscuredTypesNewtonsoftConverter.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft/ObscuredTypesNewtonsoftConverter.cs.meta deleted file mode 100644 index e29dcc7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Converters/Newtonsoft/ObscuredTypesNewtonsoftConverter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c71db1d59986c3b41af10f08c0c54787 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces.meta deleted file mode 100644 index b139a22..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cda1d9a236014fff8ccab83d51cd6485 -timeCreated: 1556987015 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces/IObscuredType.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces/IObscuredType.cs deleted file mode 100644 index a8fd0d0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces/IObscuredType.cs +++ /dev/null @@ -1,21 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - /// - /// Base interface for all obscured types. - /// - public interface IObscuredType - { - /// - /// Allows to change current crypto key to the new random value and re-encrypt variable using it. - /// Use it for extra protection against 'unknown value' search. - /// Just call it sometimes when your variable doesn't change to fool the cheater. - /// - void RandomizeCryptoKey(); - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces/IObscuredType.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces/IObscuredType.cs.meta deleted file mode 100644 index 648d8be..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/Interfaces/IObscuredType.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c633e678c4664854b052df4ae54d9cc8 -timeCreated: 1556987088 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.API.cs deleted file mode 100644 index 14624c9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.API.cs +++ /dev/null @@ -1,446 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using System.Numerics; - - public partial struct ObscuredBigInteger : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - //! @cond - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(BigInteger value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(byte value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(sbyte value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(short value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(ushort value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(int value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(uint value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(long value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(ulong value) - { - return new ObscuredBigInteger(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(float value) - { - return new ObscuredBigInteger((BigInteger)value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(double value) - { - return new ObscuredBigInteger((BigInteger)value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBigInteger(decimal value) - { - return new ObscuredBigInteger((BigInteger)value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator BigInteger(ObscuredBigInteger value) - { - return value.InternalDecrypt(); - } - - public static explicit operator byte(ObscuredBigInteger value) - { - return (byte)value.InternalDecrypt(); - } - - public static explicit operator sbyte(ObscuredBigInteger value) - { - return (sbyte)value.InternalDecrypt(); - } - - public static explicit operator short(ObscuredBigInteger value) - { - return (short)value.InternalDecrypt(); - } - - public static explicit operator ushort(ObscuredBigInteger value) - { - return (ushort)value.InternalDecrypt(); - } - - public static explicit operator int(ObscuredBigInteger value) - { - return (int)value.InternalDecrypt(); - } - - public static explicit operator uint(ObscuredBigInteger value) - { - return (uint)value.InternalDecrypt(); - } - - public static explicit operator long(ObscuredBigInteger value) - { - return (long)value.InternalDecrypt(); - } - - public static explicit operator ulong(ObscuredBigInteger value) - { - return (ulong)value.InternalDecrypt(); - } - - public static explicit operator float(ObscuredBigInteger value) - { - return (float)value.InternalDecrypt(); - } - - public static explicit operator double(ObscuredBigInteger value) - { - return (double)value.InternalDecrypt(); - } - - public static explicit operator decimal(ObscuredBigInteger value) - { - return (decimal)value.InternalDecrypt(); - } - - public static ObscuredBigInteger operator <<(ObscuredBigInteger value, int shift) - { - return (BigInteger)value << shift; - } - - public static ObscuredBigInteger operator >>(ObscuredBigInteger value, int shift) - { - return (BigInteger)value >> shift; - } - - public static ObscuredBigInteger operator ~(ObscuredBigInteger value) - { - return ~(BigInteger)value; - } - - public static ObscuredBigInteger operator +(ObscuredBigInteger value) - { - return +(BigInteger)value; - } - - public static ObscuredBigInteger operator -(ObscuredBigInteger value) - { - return -(BigInteger)value; - } - - public static ObscuredBigInteger operator +(ObscuredBigInteger left, long right) - { - return (long)left + right; - } - - public static ObscuredBigInteger operator -(ObscuredBigInteger left, long right) - { - return (long)left - right; - } - - public static ObscuredBigInteger operator ++(ObscuredBigInteger input) - { - return Increment(input, 1); - } - - public static ObscuredBigInteger operator --(ObscuredBigInteger input) - { - return Increment(input, -1); - } - - public static bool operator <(ObscuredBigInteger left, long right) - { - return left < (BigInteger)right; - } - - public static bool operator <=(ObscuredBigInteger left, long right) - { - return left <= (BigInteger)right; - } - - public static bool operator >(ObscuredBigInteger left, long right) - { - return (BigInteger)left > right; - } - - public static bool operator >=(ObscuredBigInteger left, long right) - { - return (BigInteger)left >= right; - } - - public static bool operator ==(ObscuredBigInteger left, long right) - { - return (BigInteger)left == right; - } - - public static bool operator !=(ObscuredBigInteger left, long right) - { - return (BigInteger)left != right; - } - - public static bool operator <(ObscuredBigInteger left, ulong right) - { - return left < (BigInteger)right; - } - - public static bool operator <=(ObscuredBigInteger left, ulong right) - { - return left <= (BigInteger)right; - } - - public static bool operator >(ObscuredBigInteger left, ulong right) - { - return (BigInteger)left > right; - } - - public static bool operator >=(ObscuredBigInteger left, ulong right) - { - return (BigInteger)left >= right; - } - - public static bool operator ==(ObscuredBigInteger left, ulong right) - { - return (BigInteger)left == right; - } - - public static bool operator !=(ObscuredBigInteger left, ulong right) - { - return (BigInteger)left != right; - } - - public static bool operator <(long left, ObscuredBigInteger right) - { - return left < (BigInteger)right; - } - - public static bool operator <=(long left, ObscuredBigInteger right) - { - return left <= (BigInteger)right; - } - - public static bool operator >(long left, ObscuredBigInteger right) - { - return left > (BigInteger)right; - } - - public static bool operator >=(long left, ObscuredBigInteger right) - { - return left >= (BigInteger)right; - } - - public static bool operator ==(long left, ObscuredBigInteger right) - { - return left == (BigInteger)right; - } - - public static bool operator !=(long left, ObscuredBigInteger right) - { - return left != (BigInteger)right; - } - - public static bool operator <(ulong left, ObscuredBigInteger right) - { - return left < (BigInteger)right; - } - - public static bool operator <=(ulong left, ObscuredBigInteger right) - { - return left <= (BigInteger)right; - } - - public static bool operator >(ulong left, ObscuredBigInteger right) - { - return left > (BigInteger)right; - } - - public static bool operator >=(ulong left, ObscuredBigInteger right) - { - return left >= (BigInteger)right; - } - - public static bool operator ==(ulong left, ObscuredBigInteger right) - { - return left == (BigInteger)right; - } - - public static bool operator !=(ulong left, ObscuredBigInteger right) - { - return left != (BigInteger)right; - } - - public static ObscuredBigInteger operator &(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left & (BigInteger)right; - } - - public static ObscuredBigInteger operator |(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left | (BigInteger)right; - } - - public static ObscuredBigInteger operator ^(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left ^ (BigInteger)right; - } - - public static ObscuredBigInteger operator +(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left + (BigInteger)right; - } - - public static ObscuredBigInteger operator -(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left - (BigInteger)right; - } - - public static ObscuredBigInteger operator *(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left * (BigInteger)right; - } - - public static ObscuredBigInteger operator /(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left / (BigInteger)right; - } - - public static ObscuredBigInteger operator %(ObscuredBigInteger left, ObscuredBigInteger right) - { - return (BigInteger)left % (BigInteger)right; - } - - private static ObscuredBigInteger Increment(ObscuredBigInteger input, int increment) - { - var decrypted = input.InternalDecrypt() + increment; - input.hiddenValue.value = new BigInteger(decrypted.ToByteArray()); - input.hiddenValue = input.hiddenValue.Encrypt(input.currentCryptoKey); - - if (Detectors.ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue.value = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider) ?? string.Empty; - } - - public override bool Equals(object other) - { - return other is ObscuredBigInteger o && Equals(o) || - other is BigInteger r && Equals(r); - } - - public bool Equals(BigInteger other) - { - return InternalDecrypt().Equals(other); - } - - public bool Equals(ObscuredBigInteger obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public int CompareTo(ObscuredBigInteger other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(BigInteger other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - - public int CompareTo(long other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(ulong other) - { - return InternalDecrypt().CompareTo(other); - } - - public byte[] ToByteArray() - { - return InternalDecrypt().ToByteArray(); - } - - //! @endcond - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.API.cs.meta deleted file mode 100644 index 70c271e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6d87e49d485644e9b0824650bd0bc85f -timeCreated: 1656253743 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Editor.cs deleted file mode 100644 index f4aeade..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredBigInteger - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Editor.cs.meta deleted file mode 100644 index b52c377..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4b71b315cb2a41f183596505f2a19126 -timeCreated: 1667508786 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Raw.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Raw.cs deleted file mode 100644 index 0a3704c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Raw.cs +++ /dev/null @@ -1,88 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Numerics; -using System.Runtime.InteropServices; -using UnityEngine; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - [Serializable] - [StructLayout(LayoutKind.Explicit)] - internal struct SerializableBigInteger : IEquatable - { - [FieldOffset(0)] - public BigInteger value; - - [FieldOffset(0), SerializeField] - public BigIntegerContents raw; - - [Serializable] - public struct BigIntegerContents - { - public int sign; - public uint[] bits; - } - - public SerializableBigInteger Encrypt(uint key) - { - return SymmetricShuffle(key); - } - - public BigInteger Decrypt(uint key) - { - BigInteger result; - SymmetricShuffle(key); - result = new BigInteger(value.ToByteArray()); - SymmetricShuffle(key); - return result; - } - - private SerializableBigInteger SymmetricShuffle(uint key) - { - raw.sign ^= (int)key; - if (raw.bits == null) return this; - var count = raw.bits.Length; - if (count == 0) - { - raw.bits = null; - return this; - } - - if (count == 1) - raw.bits[0] ^= key; - else - (raw.bits[0], raw.bits[count - 1]) = (raw.bits[count - 1] ^ key, raw.bits[0] ^ key); - - return this; - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator BigInteger(SerializableBigInteger value) - { - if (value.raw.bits != null && value.raw.bits.Length == 0) - value.raw.bits = null; - - return value.value; - } - - public bool Equals(SerializableBigInteger other) - { - return value.Equals(other.value); - } - - public override bool Equals(object obj) - { - return obj is SerializableBigInteger other && Equals(other); - } - - public override int GetHashCode() - { - return value.GetHashCode(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Raw.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Raw.cs.meta deleted file mode 100644 index 9344079..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.Raw.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 76d1d9576d934344b0dbaa48fd7f314e -timeCreated: 1679417356 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.cs deleted file mode 100644 index f057d19..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.cs +++ /dev/null @@ -1,192 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using System.Numerics; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular BigInteger for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredBigInteger : IObscuredType - { - [SerializeField] internal SerializableBigInteger hiddenValue; - [SerializeField] internal SerializableBigInteger fakeValue; - [SerializeField] internal uint currentCryptoKey; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredBigInteger(BigInteger value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = new SerializableBigInteger - { - value = new BigInteger(value.ToByteArray()) - }; - hiddenValue = hiddenValue.Encrypt(currentCryptoKey); - - fakeValue = new SerializableBigInteger(); - -#if UNITY_EDITOR - fakeValue.value = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue.value = detectorRunning ? value : 0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static BigInteger Encrypt(BigInteger value, uint key) - { - var input = new SerializableBigInteger { value = new BigInteger(value.ToByteArray()) }; - input = input.Encrypt(key); - return input; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static BigInteger Decrypt(BigInteger value, uint key) - { - var input = new SerializableBigInteger { value = new BigInteger(value.ToByteArray()) }; - return input.Decrypt(key); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredBigInteger FromEncrypted(BigInteger encrypted, uint key) - { - var instance = new ObscuredBigInteger(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static uint GenerateKey() - { - return RandomUtils.GenerateUIntKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public BigInteger GetEncrypted(out uint key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(BigInteger encrypted, uint key) - { - inited = true; - hiddenValue.value = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue.value = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public BigInteger GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue.value = decrypted; - hiddenValue = hiddenValue.Encrypt(currentCryptoKey); - } - - private BigInteger InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = hiddenValue.Decrypt(currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredBigInteger)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue.value = 0; - hiddenValue = hiddenValue.Encrypt(currentCryptoKey); - fakeValue.value = 0; - fakeValueActive = false; - inited = true; - } - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.cs.meta deleted file mode 100644 index b836e9a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBigInteger.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 26872f7c804f43978d827a298593df34 -timeCreated: 1653666933 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.API.cs deleted file mode 100644 index 26e66dc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.API.cs +++ /dev/null @@ -1,67 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredBool : IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredBool(bool value) - { - return new ObscuredBool(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator bool(ObscuredBool value) - { - return value.InternalDecrypt(); - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public override bool Equals(object other) - { - return other is ObscuredBool o && Equals(o) || - other is bool r && Equals(r); - } - - public bool Equals(ObscuredBool obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public bool Equals(bool other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredBool other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(bool other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.API.cs.meta deleted file mode 100644 index d6a1ba5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ddd4abd9e1e4456d8f6ba9a829d4939a -timeCreated: 1679402125 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.Editor.cs deleted file mode 100644 index c918dbe..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredBool - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.Editor.cs.meta deleted file mode 100644 index 06b4d9b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a509ae45ba98416f8b165dc136753468 -timeCreated: 1667671371 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.cs deleted file mode 100644 index 7498c3d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.cs +++ /dev/null @@ -1,212 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using UnityEngine.Serialization; - using Utils; - using Detectors; - - /// - /// Use it instead of regular bool for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredBool : IObscuredType - { - [SerializeField] internal byte currentCryptoKey; - [SerializeField] internal int hiddenValue; - [SerializeField] internal bool fakeValue; - [SerializeField] internal bool inited; - - [SerializeField] [FormerlySerializedAs("fakeValueChanged")] - internal bool fakeValueActive; - - private ObscuredBool(bool value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : false; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static int Encrypt(bool value, byte key) - { - return (value ? 213 : 181) ^ key; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static bool Decrypt(int value, byte key) - { - return (value ^ key) != 181; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredBool FromEncrypted(int encrypted, byte key) - { - var instance = new ObscuredBool(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static byte GenerateKey() - { - return RandomUtils.GenerateByteKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public int GetEncrypted(out byte key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted(), GetEncrypted() - public void SetEncrypted(int encrypted, byte key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public bool GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private bool InternalDecrypt() - { - if (!inited) - { - Init(); - return false; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredBool)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(false, currentCryptoKey); - fakeValue = false; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(byte newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static int Encrypt(bool value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static bool Decrypt(int value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredBool FromEncrypted(int encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public int GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(int encrypted) {} - - #endregion - - //! @endcond - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.cs.meta deleted file mode 100644 index be0defb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredBool.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 087379b55c673b6479929f47298ebe2f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.API.cs deleted file mode 100644 index ee81107..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.API.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredByte : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredByte(byte value) - { - return new ObscuredByte(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator byte(ObscuredByte value) - { - return value.InternalDecrypt(); - } - - public static ObscuredByte operator ++(ObscuredByte input) - { - return Increment(input, 1); - } - - public static ObscuredByte operator --(ObscuredByte input) - { - return Increment(input, -1); - } - - private static ObscuredByte Increment(ObscuredByte input, int increment) - { - var decrypted = (byte)(input.InternalDecrypt() + increment); - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredByte o && Equals(o) || - other is byte r && Equals(r); - } - - public bool Equals(ObscuredByte obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public bool Equals(byte other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredByte other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(byte other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.API.cs.meta deleted file mode 100644 index cf97613..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 01c4ec37f17242e987034c7cfba14fce -timeCreated: 1679403097 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.cs deleted file mode 100644 index c5da4c5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.cs +++ /dev/null @@ -1,253 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using Utils; - using Detectors; - - /// - /// Use it instead of regular byte for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredByte : IObscuredType - { - private byte currentCryptoKey; - private byte hiddenValue; - private byte fakeValue; - private bool fakeValueActive; - private bool inited; - - private ObscuredByte(byte value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : (byte)0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static byte Encrypt(byte value, byte key) - { - return (byte)(value ^ key); - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static void Encrypt(byte[] value, byte key) - { - var len = value.Length; - for (var i = 0; i < len; i++) - { - value[i] = Encrypt(value[i], key); - } - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static byte Decrypt(byte value, byte key) - { - return (byte)(value ^ key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static void Decrypt(byte[] value, byte key) - { - var len = value.Length; - for (var i = 0; i < len; i++) - { - value[i] = Decrypt(value[i], key); - } - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredByte FromEncrypted(byte encrypted, byte key) - { - var instance = new ObscuredByte(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static byte GenerateKey() - { - return RandomUtils.GenerateByteKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public byte GetEncrypted(out byte key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(byte encrypted, byte key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public byte GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private byte InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - UnityEngine.Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredByte)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(byte newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) API instead.", true)] - public static byte EncryptDecrypt(byte value) { throw new Exception(); } - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) API instead.", true)] - public static byte EncryptDecrypt(byte[] value) { throw new Exception(); } - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) APIs instead. " + - "This API will be removed in future updates.")] - public static byte EncryptDecrypt(byte value, byte key) - { - return (byte)(value ^ key); - } - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) APIs instead. " + - "This API will be removed in future updates.")] - public static void EncryptDecrypt(byte[] value, byte key) - { - var len = value.Length; - for (var i = 0; i < len; i++) - { - value[i] = EncryptDecrypt(value[i], key); - } - } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredByte FromEncrypted(byte encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public byte GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(byte encrypted) {} - - #endregion - - //! @endcond - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.cs.meta deleted file mode 100644 index 8c6e2e6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredByte.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ffd0f98b7bfcb1f418e2aa6c6d8438be -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.API.cs deleted file mode 100644 index 9dfbdf9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.API.cs +++ /dev/null @@ -1,101 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredChar : IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredChar(char value) - { - return new ObscuredChar(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator char(ObscuredChar value) - { - return value.InternalDecrypt(); - } - - public static ObscuredChar operator ++(ObscuredChar input) - { - return Increment(input, 1); - } - - public static ObscuredChar operator --(ObscuredChar input) - { - return Increment(input, -1); - } - - private static ObscuredChar Increment(ObscuredChar input, int increment) - { - var decrypted = (char)(input.InternalDecrypt() + increment); - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public override bool Equals(object other) - { - return other is ObscuredChar o && Equals(o) || - other is char r && Equals(r); - } - - public bool Equals(ObscuredChar other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(char other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredChar other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(char other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.API.cs.meta deleted file mode 100644 index 19f0bb5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5c0e0cd11aa84b7aa2f060f77c19a6fe -timeCreated: 1679403330 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.cs deleted file mode 100644 index 91a92bb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.cs +++ /dev/null @@ -1,212 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using Utils; - using Detectors; - - /// - /// Use it instead of regular char for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredChar : IObscuredType - { - private char currentCryptoKey; - private char hiddenValue; - private char fakeValue; - private bool inited; - private bool fakeValueActive; - - private ObscuredChar(char value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : '\0'; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static char Encrypt(char value, char key) - { - return (char)(value ^ key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static char Decrypt(char value, char key) - { - return (char)(value ^ key); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredChar FromEncrypted(char encrypted, char key) - { - var instance = new ObscuredChar(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static char GenerateKey() - { - return RandomUtils.GenerateCharKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public char GetEncrypted(out char key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(char encrypted, char key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public char GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private char InternalDecrypt() - { - if (!inited) - { - Init(); - return '\0'; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - UnityEngine.Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredChar)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt('\0', currentCryptoKey); - fakeValue = '\0'; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(char newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) API instead.", true)] - public static char EncryptDecrypt(char value) { throw new Exception(); } - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) APIs instead. " + - "This API will be removed in future updates.")] - public static char EncryptDecrypt(char value, char key) - { - return (char)(value ^ key); - } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredChar FromEncrypted(char encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public char GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(char encrypted) {} - - #endregion - - //! @endcond - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.cs.meta deleted file mode 100644 index e99eaba..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredChar.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: df2e4baa10859d4419dd288c8844c098 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.API.cs deleted file mode 100644 index 92dd5e1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.API.cs +++ /dev/null @@ -1,196 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredDateTime : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable, IConvertible - { - /// Gets the number of ticks that represent the date and time of this instance. - /// The number of ticks that represent the date and time of this instance. The value is between and . - public long Ticks => GetDecrypted().Ticks; - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredDateTime(DateTime value) - { - return new ObscuredDateTime(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator DateTime(ObscuredDateTime value) - { - return value.InternalDecryptAsDateTime(); - } - - public override int GetHashCode() - { - return InternalDecryptAsDateTime().GetHashCode(); - } - - public override string ToString() - { - return InternalDecryptAsDateTime().ToString(); - } - - public string ToString(string format) - { - return InternalDecryptAsDateTime().ToString(format); - } - - public TypeCode GetTypeCode() { - return TypeCode.DateTime; - } - - - bool IConvertible.ToBoolean(IFormatProvider provider) => throw new InvalidCastException(); - char IConvertible.ToChar(IFormatProvider provider) => throw new InvalidCastException(); - sbyte IConvertible.ToSByte(IFormatProvider provider) => throw new InvalidCastException(); - byte IConvertible.ToByte(IFormatProvider provider) => throw new InvalidCastException(); - short IConvertible.ToInt16(IFormatProvider provider) => throw new InvalidCastException(); - ushort IConvertible.ToUInt16(IFormatProvider provider) => throw new InvalidCastException(); - int IConvertible.ToInt32(IFormatProvider provider) => throw new InvalidCastException(); - uint IConvertible.ToUInt32(IFormatProvider provider) => throw new InvalidCastException(); - long IConvertible.ToInt64(IFormatProvider provider) => throw new InvalidCastException(); - ulong IConvertible.ToUInt64(IFormatProvider provider) => throw new InvalidCastException(); - float IConvertible.ToSingle(IFormatProvider provider) => throw new InvalidCastException(); - double IConvertible.ToDouble(IFormatProvider provider) => throw new InvalidCastException(); - decimal IConvertible.ToDecimal(IFormatProvider provider) => throw new InvalidCastException(); - DateTime IConvertible.ToDateTime(IFormatProvider provider) => this; - object IConvertible.ToType(Type type, IFormatProvider provider) - { - if (type == typeof(DateTime)) - return InternalDecryptAsDateTime(); - - if (type == typeof(ObscuredDateTime)) - return this; - - return Convert.ChangeType(InternalDecryptAsDateTime(), type, provider); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecryptAsDateTime().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecryptAsDateTime().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredDateTime o && Equals(o) || - other is DateTime r && Equals(r); - } - - public bool Equals(ObscuredDateTime other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(DateTime other) - { - return InternalDecryptAsDateTime().Equals(other); - } - - public int CompareTo(ObscuredDateTime other) - { - return InternalDecryptAsDateTime().CompareTo(other.InternalDecryptAsDateTime()); - } - - public int CompareTo(DateTime other) - { - return InternalDecryptAsDateTime().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecryptAsDateTime().CompareTo(obj); - } - - public static DateTime operator +(ObscuredDateTime d, TimeSpan t) - { - return (DateTime)d + t; - } - - public static DateTime operator -(ObscuredDateTime d, TimeSpan t) - { - return (DateTime)d - t; - } - - public static TimeSpan operator -(ObscuredDateTime d1, DateTime d2) - { - return (DateTime)d1 - d2; - } - - public static TimeSpan operator -(DateTime d1, ObscuredDateTime d2) - { - return d1 - (DateTime)d2; - } - - public static bool operator ==(ObscuredDateTime d1, DateTime d2) - { - return (DateTime)d1 == d2; - } - - public static bool operator ==(DateTime d1, ObscuredDateTime d2) - { - return d1 == (DateTime)d2; - } - - public static bool operator !=(ObscuredDateTime d1, DateTime d2) - { - return (DateTime)d1 != d2; - } - - public static bool operator !=(DateTime d1, ObscuredDateTime d2) - { - return d1 != (DateTime)d2; - } - - public static bool operator <(ObscuredDateTime t1, DateTime t2) - { - return (DateTime)t1 < t2; - } - - public static bool operator <(DateTime t1, ObscuredDateTime t2) - { - return t1 < (DateTime)t2; - } - - public static bool operator <=(ObscuredDateTime t1, DateTime t2) - { - return (DateTime)t1 <= t2; - } - - public static bool operator <=(DateTime t1, ObscuredDateTime t2) - { - return t1 <= (DateTime)t2; - } - - public static bool operator >(ObscuredDateTime t1, DateTime t2) - { - return (DateTime)t1 > t2; - } - - public static bool operator >(DateTime t1, ObscuredDateTime t2) - { - return t1 > (DateTime)t2; - } - - public static bool operator >=(ObscuredDateTime t1, DateTime t2) - { - return (DateTime)t1 >= t2; - } - - public static bool operator >=(DateTime t1, ObscuredDateTime t2) - { - return t1 >= (DateTime)t2; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.API.cs.meta deleted file mode 100644 index a865dc6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d89b0423d1ce47bba805cbb94fcfe315 -timeCreated: 1684488629 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.cs deleted file mode 100644 index fee06b4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.cs +++ /dev/null @@ -1,190 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; -using CodeStage.AntiCheat.Utils; -using UnityEngine; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - /// - /// Use it instead of regular DateTime for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredDateTime : IObscuredType - { - [SerializeField] internal long currentCryptoKey; - [SerializeField] internal long hiddenValue; - [SerializeField] internal long fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredDateTime(DateTime value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value.ToBinary(); - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value.ToBinary() : new DateTime(0).ToBinary(); - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static long Encrypt(DateTime value, long key) - { - return value.ToBinary() ^ key; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static DateTime Decrypt(long value, long key) - { - return DateTime.FromBinary(value ^ key); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredDateTime FromEncrypted(long encrypted, long key) - { - var instance = new ObscuredDateTime(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static long GenerateKey() - { - return RandomUtils.GenerateLongKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public long GetEncrypted(out long key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(long encrypted, long key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public DateTime GetDecrypted() - { - return DateTime.FromBinary(InternalDecrypt()); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = InternalEncrypt(decrypted, currentCryptoKey); - } - - private static long InternalEncrypt(long value, long key) - { - return value ^ key; - } - - private DateTime InternalDecryptAsDateTime() - { - return DateTime.FromBinary(InternalDecrypt()); - } - - private long InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = hiddenValue ^ currentCryptoKey; - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredDateTime)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(new DateTime(0), currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.cs.meta deleted file mode 100644 index 6f2aa35..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDateTime.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ff6e0af66f3240eb97476c4a4cbebec0 -timeCreated: 1684488530 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.API.cs deleted file mode 100644 index dbac9b6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.API.cs +++ /dev/null @@ -1,116 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredDecimal : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredDecimal(decimal value) - { - return new ObscuredDecimal(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator decimal(ObscuredDecimal value) - { - return value.InternalDecrypt(); - } - - public static explicit operator ObscuredDecimal(ObscuredFloat f) - { - return (decimal)(float)f; - } - - public static ObscuredDecimal operator ++(ObscuredDecimal input) - { - return Increment(input, 1); - } - - public static ObscuredDecimal operator --(ObscuredDecimal input) - { - return Increment(input, -1); - } - - private static ObscuredDecimal Increment(ObscuredDecimal input, decimal increment) - { - var decrypted = input.InternalDecrypt() + increment; - input.hiddenValue = InternalEncrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredDecimal o && Equals(o) || - other is decimal r && Equals(r); - } - - public bool Equals(ObscuredDecimal other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(decimal other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredDecimal other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(decimal other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.API.cs.meta deleted file mode 100644 index 01f27cc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: b19e591daa4149e5a58d44647b9c0c10 -timeCreated: 1679403605 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.Editor.cs deleted file mode 100644 index 535ea94..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.Editor.cs +++ /dev/null @@ -1,23 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredDecimal - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.Editor.cs.meta deleted file mode 100644 index 7d476c7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 825ba42c6957452aa173153134e38e08 -timeCreated: 1684488866 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.cs deleted file mode 100644 index 39538d8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.cs +++ /dev/null @@ -1,274 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using Common; - using Detectors; - using System; - using System.Runtime.InteropServices; - using UnityEngine; - using Utils; - - /// - /// Use it instead of regular decimal for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredDecimal : IObscuredType - { - [SerializeField] internal long currentCryptoKey; - [SerializeField] internal ACTkByte16 hiddenValue; - [SerializeField] internal bool inited; - private decimal fakeValue; - [SerializeField] internal bool fakeValueActive; - - private ObscuredDecimal(decimal value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = InternalEncrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : 0m; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static decimal Encrypt(decimal value, long key) - { - return DecimalLongBytesUnion.XorDecimalToDecimal(value, key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static decimal Decrypt(decimal value, long key) - { - return DecimalLongBytesUnion.XorDecimalToDecimal(value, key); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredDecimal FromEncrypted(decimal encrypted, long key) - { - var instance = new ObscuredDecimal(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static long GenerateKey() - { - return RandomUtils.GenerateLongKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public decimal GetEncrypted(out long key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return DecimalLongBytesUnion.ConvertB16ToDecimal(hiddenValue); - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(decimal encrypted, long key) - { - inited = true; - hiddenValue = DecimalLongBytesUnion.ConvertDecimalToB16(encrypted); - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public decimal GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = InternalEncrypt(decrypted, currentCryptoKey); - } - - private static ACTkByte16 InternalEncrypt(decimal value, long key) - { - return DecimalLongBytesUnion.XorDecimalToB16(value, key); - } - - private decimal InternalDecrypt() - { - if (!inited) - { - Init(); - return 0m; - } - - var decrypted = DecimalLongBytesUnion.XorB16ToDecimal(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredDecimal)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = InternalEncrypt(0m, currentCryptoKey); - fakeValue = 0m; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(long newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static decimal Encrypt(decimal value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static decimal Decrypt(decimal value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredDecimal FromEncrypted(decimal encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public decimal GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(decimal encrypted) {} - - #endregion - - //! @endcond - - [StructLayout(LayoutKind.Explicit)] - private struct DecimalLongBytesUnion - { - [FieldOffset(0)] - private decimal d; - - [FieldOffset(0)] - private long l1; - - [FieldOffset(8)] - private long l2; - - [FieldOffset(0)] - private ACTkByte16 b16; - - internal static decimal XorDecimalToDecimal(decimal value, long key) - { - return FromDecimal(value).XorLongs(key).d; - } - - internal static ACTkByte16 XorDecimalToB16(decimal value, long key) - { - return FromDecimal(value).XorLongs(key).b16; - } - - internal static decimal XorB16ToDecimal(ACTkByte16 value, long key) - { - return FromB16(value).XorLongs(key).d; - } - - internal static decimal ConvertB16ToDecimal(ACTkByte16 value) - { - return FromB16(value).d; - } - - internal static ACTkByte16 ConvertDecimalToB16(decimal value) - { - return FromDecimal(value).b16; - } - - private static DecimalLongBytesUnion FromDecimal(decimal value) - { - return new DecimalLongBytesUnion {d = value}; - } - - private static DecimalLongBytesUnion FromB16(ACTkByte16 value) - { - return new DecimalLongBytesUnion {b16 = value}; - } - - private DecimalLongBytesUnion XorLongs(long key) - { - l1 ^= key; - l2 ^= key; - return this; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.cs.meta deleted file mode 100644 index 21cddbe..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDecimal.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 4280032ce141abb46abd2b1a00b00737 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.API.cs deleted file mode 100644 index ad3d23a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.API.cs +++ /dev/null @@ -1,116 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredDouble : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredDouble(double value) - { - return new ObscuredDouble(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator double(ObscuredDouble value) - { - return value.InternalDecrypt(); - } - - public static explicit operator ObscuredDouble(ObscuredFloat f) - { - return (float)f; - } - - public static ObscuredDouble operator ++(ObscuredDouble input) - { - return Increment(input, 1); - } - - public static ObscuredDouble operator --(ObscuredDouble input) - { - return Increment(input, -1); - } - - private static ObscuredDouble Increment(ObscuredDouble input, double increment) - { - var decrypted = input.InternalDecrypt() + increment; - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredDouble o && Equals(o) || - other is double r && Equals(r); - } - - public bool Equals(ObscuredDouble other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(double other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredDouble other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(double other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.API.cs.meta deleted file mode 100644 index 9fee8bf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 352a6c04af12482086a0adc92034eb9c -timeCreated: 1679403668 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.Editor.cs deleted file mode 100644 index 49ffe47..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredDouble - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return IsEqual(fakeValue, InternalDecrypt()); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.Editor.cs.meta deleted file mode 100644 index e3bd258..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2602353bf39b46778d8977dd0a5b45fc -timeCreated: 1667756465 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.cs deleted file mode 100644 index fd72a12..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.cs +++ /dev/null @@ -1,337 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using Common; - using Detectors; - using System; - using UnityEngine; - using System.Runtime.InteropServices; - using UnityEngine.Serialization; - using Utils; - - /// - /// Use it instead of regular double for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredDouble : IObscuredType - { -#if UNITY_EDITOR - public string migratedVersion; -#endif - - [SerializeField] internal long currentCryptoKey; - [SerializeField] internal long hiddenValue; - [SerializeField] [FormerlySerializedAs("hiddenValue")] -#pragma warning disable 414 - private ACTkByte8 hiddenValueOldByte8; -#pragma warning restore 414 - - [SerializeField] internal double fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredDouble(double value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - hiddenValueOldByte8 = default; - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; - migratedVersion = null; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : 0L; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static long Encrypt(double value, long key) - { - return DoubleLongBytesUnion.XorDoubleToLong(value, key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static double Decrypt(long value, long key) - { - return DoubleLongBytesUnion.XorLongToDouble(value, key); - } - - /// - /// Allows to update the encrypted value to the newer encryption format. - /// - /// Use when you have some encrypted values saved somewhere with previous ACTk version - /// and you wish to set them using SetEncrypted() to the newer ACTk version obscured type. - /// Current migration variants: - /// from 0 or 1 to 2 - migrate obscured type from ACTk 1.5.2.0-1.5.8.0 to the 1.5.9.0+ format - /// Encrypted value you got from previous ACTk version obscured type with GetEncrypted(). - /// Source format version. - /// Target format version. - /// Migrated raw encrypted value which you may use for SetEncrypted() later. - public static long MigrateEncrypted(long encrypted, byte fromVersion = 0, byte toVersion = 2) - { - return DoubleLongBytesUnion.Migrate(encrypted, fromVersion, toVersion); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredDouble FromEncrypted(long encrypted, long key) - { - var instance = new ObscuredDouble(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static long GenerateKey() - { - return RandomUtils.GenerateLongKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public long GetEncrypted(out long key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(long encrypted, long key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public double GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private double InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - -#if ACTK_OBSCURED_AUTO_MIGRATION - if (hiddenValueOldByte8.b1 != 0 || - hiddenValueOldByte8.b2 != 0 || - hiddenValueOldByte8.b3 != 0 || - hiddenValueOldByte8.b4 != 0 || - hiddenValueOldByte8.b5 != 0 || - hiddenValueOldByte8.b6 != 0 || - hiddenValueOldByte8.b7 != 0 || - hiddenValueOldByte8.b8 != 0) - { - var union = new DoubleLongBytesUnion { b8 = hiddenValueOldByte8 }; - union.b8.Shuffle(); - hiddenValue = union.l; - - hiddenValueOldByte8.b1 = 0; - hiddenValueOldByte8.b2 = 0; - hiddenValueOldByte8.b3 = 0; - hiddenValueOldByte8.b4 = 0; - hiddenValueOldByte8.b5 = 0; - hiddenValueOldByte8.b6 = 0; - hiddenValueOldByte8.b7 = 0; - hiddenValueOldByte8.b8 = 0; - } -#endif - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && - !IsEqual(decrypted, fakeValue, ObscuredCheatingDetector.Instance.doubleEpsilon)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredDouble)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.doubleEpsilon}\n" + - $"equal: {IsEqual(decrypted, fakeValue, ObscuredCheatingDetector.Instance.doubleEpsilon)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - private bool IsEqual(double a, double b, double epsilon = double.Epsilon) - { - const double lowestMeaningful = 2.2250738585072014E-308d; - var absA = Math.Abs(a); - var absB = Math.Abs(b); - var diff = Math.Abs(a - b); - - if (a.Equals(b)) // for infinities and NaNs - return true; - - if (a == 0 || b == 0 || absA + absB < lowestMeaningful) // for very small numbers - return diff < epsilon * lowestMeaningful; - - return diff / (absA + absB) < epsilon; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(long newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static long Encrypt(double value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static double Decrypt(long value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredDouble FromEncrypted(long encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public long GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(long encrypted) {} - - #endregion - - //! @endcond - - [StructLayout(LayoutKind.Explicit)] - private struct DoubleLongBytesUnion - { - [FieldOffset(0)] private double d; - [FieldOffset(0)] internal long l; // need to be internal for ACTK_OBSCURED_AUTO_MIGRATION - [FieldOffset(0)] internal ACTkByte8 b8; // need to be internal for ACTK_OBSCURED_AUTO_MIGRATION - - internal static long Migrate(long value, byte fromVersion, byte toVersion) - { - var u = FromLong(value); - - if (fromVersion < 2 && toVersion == 2) - u.b8.Shuffle(); - - return u.l; - } - - internal static long XorDoubleToLong(double value, long key) - { - return FromDouble(value).Shuffle(key).l; - } - - internal static double XorLongToDouble(long value, long key) - { - return FromLong(value).UnShuffle(key).d; - } - - private static DoubleLongBytesUnion FromDouble(double value) - { - return new DoubleLongBytesUnion { d = value}; - } - - private static DoubleLongBytesUnion FromLong(long value) - { - return new DoubleLongBytesUnion { l = value}; - } - - private DoubleLongBytesUnion Shuffle(long key) - { - l ^= key; - b8.Shuffle(); - - return this; - } - - private DoubleLongBytesUnion UnShuffle(long key) - { - b8.UnShuffle(); - l ^= key; - - return this; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.cs.meta deleted file mode 100644 index 5f56104..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredDouble.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e000716291073174da137134a3bee2ba -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.API.cs deleted file mode 100644 index c8a20fd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.API.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredFloat : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredFloat(float value) - { - return new ObscuredFloat(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator float(ObscuredFloat value) - { - return value.InternalDecrypt(); - } - - public static ObscuredFloat operator ++(ObscuredFloat input) - { - return Increment(input, 1); - } - - public static ObscuredFloat operator --(ObscuredFloat input) - { - return Increment(input, -1); - } - - private static ObscuredFloat Increment(ObscuredFloat input, int increment) - { - var decrypted = input.InternalDecrypt() + increment; - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredFloat o && Equals(o) || - other is float r && Equals(r); - } - - public bool Equals(ObscuredFloat other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(float other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredFloat other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(float other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.API.cs.meta deleted file mode 100644 index 0e03e4a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ed318b58608d48869150cc247220c20c -timeCreated: 1679403799 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.Editor.cs deleted file mode 100644 index 07480d6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredFloat - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return Compare(fakeValue, InternalDecrypt()); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.Editor.cs.meta deleted file mode 100644 index 40f65f7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 352c3042e2c443bc9f873ec73e8a80e6 -timeCreated: 1667756772 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.cs deleted file mode 100644 index 68c67f7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.cs +++ /dev/null @@ -1,317 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using Common; - using Detectors; - using System; - using UnityEngine; - using System.Runtime.InteropServices; - using UnityEngine.Serialization; - using Utils; - - /// - /// Use it instead of regular float for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredFloat : IObscuredType - { -#if UNITY_EDITOR - public string migratedVersion; -#endif - [SerializeField] internal int currentCryptoKey; - [SerializeField] internal int hiddenValue; - [SerializeField] [FormerlySerializedAs("hiddenValue")] -#pragma warning disable 414 - private ACTkByte4 hiddenValueOldByte4; -#pragma warning restore 414 - - [SerializeField] internal float fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredFloat(float value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - hiddenValueOldByte4 = default; - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; - migratedVersion = null; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : 0f; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static int Encrypt(float value, int key) - { - return FloatIntBytesUnion.XorFloatToInt(value, key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static float Decrypt(int value, int key) - { - return FloatIntBytesUnion.XorIntToFloat(value, key); - } - - /// - /// Allows to update the raw encrypted value to the newer encryption format. - /// - /// Use when you have some encrypted values saved somewhere with previous ACTk version - /// and you wish to set them using SetEncrypted() to the newer ACTk version obscured type. - /// Current migration variants: - /// from 0 or 1 to 2 - migrate obscured type from ACTk 1.5.2.0-1.5.8.0 to the 1.5.9.0+ format - /// Encrypted value you got from previous ACTk version obscured type with GetEncrypted(). - /// Source format version. - /// Target format version. - /// Migrated raw encrypted value which you may use for SetEncrypted(0 later. - public static int MigrateEncrypted(int encrypted, byte fromVersion = 0, byte toVersion = 2) - { - return FloatIntBytesUnion.Migrate(encrypted, fromVersion, toVersion); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredFloat FromEncrypted(int encrypted, int key) - { - var instance = new ObscuredFloat(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static int GenerateKey() - { - return RandomUtils.GenerateIntKey(); - } - - private static bool Compare(float f1, float f2) - { - var epsilon = ObscuredCheatingDetector.ExistsAndIsRunning ? - ObscuredCheatingDetector.Instance.floatEpsilon : float.Epsilon; - return NumUtils.CompareFloats(f1, f2, epsilon); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public int GetEncrypted(out int key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(int encrypted, int key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public float GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private float InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - -#if ACTK_OBSCURED_AUTO_MIGRATION - if (hiddenValueOldByte4.b1 != 0 || - hiddenValueOldByte4.b2 != 0 || - hiddenValueOldByte4.b3 != 0 || - hiddenValueOldByte4.b4 != 0) - { - var union = new FloatIntBytesUnion {b4 = hiddenValueOldByte4}; - union.b4.Shuffle(); - hiddenValue = union.i; - - hiddenValueOldByte4.b1 = 0; - hiddenValueOldByte4.b2 = 0; - hiddenValueOldByte4.b3 = 0; - hiddenValueOldByte4.b4 = 0; - } -#endif - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredFloat)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.floatEpsilon}\n" + - $"compare: {Compare(decrypted, fakeValue)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(int newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static int Encrypt(float value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static float Decrypt(int value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredFloat FromEncrypted(int encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public int GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(int encrypted) {} - - #endregion - - //! @endcond - - [StructLayout(LayoutKind.Explicit)] - internal struct FloatIntBytesUnion - { - [FieldOffset(0)] private float f; - [FieldOffset(0)] internal int i; // need to be internal for ACTK_OBSCURED_AUTO_MIGRATION - [FieldOffset(0)] internal ACTkByte4 b4; // need to be internal for ACTK_OBSCURED_AUTO_MIGRATION - - public static int Migrate(int value, byte fromVersion, byte toVersion) - { - var u = FromInt(value); - - if (fromVersion < 2 && toVersion == 2) - u.b4.Shuffle(); - - return u.i; - } - - internal static int XorFloatToInt(float value, int key) - { - return FromFloat(value).Shuffle(key).i; - } - - internal static float XorIntToFloat(int value, int key) - { - return FromInt(value).UnShuffle(key).f; - } - - private static FloatIntBytesUnion FromFloat(float value) - { - return new FloatIntBytesUnion { f = value}; - } - - private static FloatIntBytesUnion FromInt(int value) - { - return new FloatIntBytesUnion { i = value}; - } - - private FloatIntBytesUnion Shuffle(int key) - { - i ^= key; - b4.Shuffle(); - - return this; - } - - private FloatIntBytesUnion UnShuffle(int key) - { - b4.UnShuffle(); - i ^= key; - - return this; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.cs.meta deleted file mode 100644 index 35e78f0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredFloat.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0062c4ab43af0ba4bb3a8b3d83c1e16d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.API.cs deleted file mode 100644 index 8d3edb8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.API.cs +++ /dev/null @@ -1,128 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredInt : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredInt(int value) - { - return new ObscuredInt(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator int(ObscuredInt value) - { - return value.InternalDecrypt(); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredFloat(ObscuredInt value) - { - return value.InternalDecrypt(); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredDouble(ObscuredInt value) - { - return value.InternalDecrypt(); - } - - public static explicit operator ObscuredUInt(ObscuredInt value) - { - return (uint)value.InternalDecrypt(); - } - - public static ObscuredInt operator ++(ObscuredInt input) - { - return Increment(input, 1); - } - - public static ObscuredInt operator --(ObscuredInt input) - { - return Increment(input, -1); - } - - private static ObscuredInt Increment(ObscuredInt input, int increment) - { - var decrypted = input.InternalDecrypt() + increment; - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredInt o && Equals(o) || - other is int r && Equals(r); - } - - public bool Equals(ObscuredInt other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(int other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredInt other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(int other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.API.cs.meta deleted file mode 100644 index ccc1d6e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 83a81ecd47f749c19fa2fb601d2e77b6 -timeCreated: 1679403896 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.Editor.cs deleted file mode 100644 index ff6549a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredInt - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.Editor.cs.meta deleted file mode 100644 index 966631a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c4c7ef58a0b547db891276b5cbbee8bb -timeCreated: 1667756897 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.cs deleted file mode 100644 index 0c26668..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.cs +++ /dev/null @@ -1,209 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular int for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredInt : IObscuredType - { - [SerializeField] internal int currentCryptoKey; - [SerializeField] internal int hiddenValue; - [SerializeField] internal int fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredInt(int value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : 0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static int Encrypt(int value, int key) - { - return value ^ key; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static int Decrypt(int value, int key) - { - return value ^ key; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredInt FromEncrypted(int encrypted, int key) - { - var instance = new ObscuredInt(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static int GenerateKey() - { - return RandomUtils.GenerateIntKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public int GetEncrypted(out int key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(int encrypted, int key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public int GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - hiddenValue = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(hiddenValue, currentCryptoKey); - } - - private int InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredInt)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(int newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static int Encrypt(int value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static int Decrypt(int value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredInt FromEncrypted(int encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public int GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(int encrypted) {} - - #endregion - - //! @endcond - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.cs.meta deleted file mode 100644 index da16bf6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredInt.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 135d4771d45b98a46bf8fc40cc92c2c5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.API.cs deleted file mode 100644 index 2b37237..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.API.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredLong : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredLong(long value) - { - return new ObscuredLong(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator long(ObscuredLong value) - { - return value.InternalDecrypt(); - } - - public static ObscuredLong operator ++(ObscuredLong input) - { - return Increment(input, 1); - } - - public static ObscuredLong operator --(ObscuredLong input) - { - return Increment(input, -1); - } - - private static ObscuredLong Increment(ObscuredLong input, int increment) - { - var decrypted = input.InternalDecrypt() + increment; - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredLong o && Equals(o) || - other is long r && Equals(r); - } - - public bool Equals(ObscuredLong other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(long other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredLong other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(long other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.API.cs.meta deleted file mode 100644 index 1214e4b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0c1f4e4f0823481790ea9836b60e9c8a -timeCreated: 1679401118 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.Editor.cs deleted file mode 100644 index 5cc73a8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredLong - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.Editor.cs.meta deleted file mode 100644 index 91eae08..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6447e4a358db4386abc01c188cdda3a9 -timeCreated: 1667757201 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.cs deleted file mode 100644 index ae6e75b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.cs +++ /dev/null @@ -1,209 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular long for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredLong : IObscuredType - { - [SerializeField] internal long currentCryptoKey; - [SerializeField] internal long hiddenValue; - [SerializeField] internal long fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredLong(long value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : 0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static long Encrypt(long value, long key) - { - return value ^ key; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static long Decrypt(long value, long key) - { - return value ^ key; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredLong FromEncrypted(long encrypted, long key) - { - var instance = new ObscuredLong(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static long GenerateKey() - { - return RandomUtils.GenerateLongKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public long GetEncrypted(out long key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(long encrypted, long key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public long GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private long InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredLong)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - #region obsolete - - //! @cond - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(long newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static long Encrypt(long value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static long Decrypt(long value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredLong FromEncrypted(long encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public long GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(long encrypted) {} - - //! @endcond - - #endregion - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.cs.meta deleted file mode 100644 index 9f6d875..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredLong.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1486394148a280c4699dd97480305294 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.API.cs deleted file mode 100644 index 8e7467a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.API.cs +++ /dev/null @@ -1,67 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using UnityEngine; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredQuaternion : IEquatable, IEquatable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredQuaternion(Quaternion value) - { - return new ObscuredQuaternion(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Quaternion(ObscuredQuaternion value) - { - return value.InternalDecrypt(); - } - - public override bool Equals(object other) - { - return other is ObscuredQuaternion o && Equals(o) || - other is Quaternion r && Equals(r); - } - - public bool Equals(ObscuredQuaternion other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(Quaternion other) - { - return InternalDecrypt().Equals(other); - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public void Normalize() - { - var temp = InternalDecrypt(); - temp.Normalize(); - SetEncrypted(Encrypt(normalized, currentCryptoKey), currentCryptoKey); - } - - public Quaternion normalized => InternalDecrypt().normalized; - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.API.cs.meta deleted file mode 100644 index 6ac9e82..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0fe7d9772d484fbeaf8d33ce0cb5896d -timeCreated: 1679400996 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Editor.cs deleted file mode 100644 index 6bc09a6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredQuaternion - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return Compare(fakeValue, InternalDecrypt()); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Editor.cs.meta deleted file mode 100644 index ca4278c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0c068e4728474ea087f0db89b994b8c6 -timeCreated: 1667757261 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Raw.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Raw.cs deleted file mode 100644 index a9147a0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Raw.cs +++ /dev/null @@ -1,62 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredQuaternion - { - /// - /// Used to store encrypted Quaternion. - /// - [Serializable] - public struct RawEncryptedQuaternion : IEquatable - { - /// - /// Encrypted value - /// - public int x; - - /// - /// Encrypted value - /// - public int y; - - /// - /// Encrypted value - /// - public int z; - - /// - /// Encrypted value - /// - public int w; - - public bool Equals(RawEncryptedQuaternion other) - { - return x == other.x && y == other.y && z == other.z && w == other.w; - } - - public override bool Equals(object obj) - { - return obj is RawEncryptedQuaternion other && Equals(other); - } - - public override int GetHashCode() - { - unchecked - { - var hashCode = x; - hashCode = (hashCode * 397) ^ y; - hashCode = (hashCode * 397) ^ z; - hashCode = (hashCode * 397) ^ w; - return hashCode; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Raw.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Raw.cs.meta deleted file mode 100644 index 2d3953c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.Raw.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 913bb305a9394088b8b5d2b82fb12a12 -timeCreated: 1679417305 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.cs deleted file mode 100644 index 6fd621f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.cs +++ /dev/null @@ -1,277 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular Quaternion for any cheating-sensitive variables. - /// - /// \htmlonlyWARNING:\endhtmlonly Doesn't mimic regular type API, thus should be used with extra caution. Cast it to regular, not obscured type to work with regular APIs.
- /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredQuaternion : IObscuredType - { - private static readonly Quaternion Identity = Quaternion.identity; - -#if UNITY_EDITOR - public string migratedVersion; -#endif - [SerializeField] internal int currentCryptoKey; - [SerializeField] internal RawEncryptedQuaternion hiddenValue; - [SerializeField] internal Quaternion fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredQuaternion(Quaternion value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; - migratedVersion = null; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : Identity; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Mimics constructor of regular Quaternion. Please note, passed components are not Euler Angles. - /// - /// X component of the quaternion - /// Y component of the quaternion - /// Z component of the quaternion - /// W component of the quaternion - public ObscuredQuaternion(float x, float y, float z, float w) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(x, y, z, w, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue = new Quaternion(x, y, z, w); - fakeValueActive = true; - } - else - { - fakeValue = Identity; - fakeValueActive = false; - } - -#if UNITY_EDITOR - migratedVersion = null; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedQuaternion Encrypt(Quaternion value, int key) - { - return Encrypt(value.x, value.y, value.z, value.w, key); - } - - /// - /// Encrypts passed components using passed key. - /// Please note, passed components are not an Euler Angles. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedQuaternion Encrypt(float x, float y, float z, float w, int key) - { - RawEncryptedQuaternion result; - result.x = ObscuredFloat.Encrypt(x, key); - result.y = ObscuredFloat.Encrypt(y, key); - result.z = ObscuredFloat.Encrypt(z, key); - result.w = ObscuredFloat.Encrypt(w, key); - - return result; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static Quaternion Decrypt(RawEncryptedQuaternion value, int key) - { - Quaternion result; - result.x = ObscuredFloat.Decrypt(value.x, key); - result.y = ObscuredFloat.Decrypt(value.y, key); - result.z = ObscuredFloat.Decrypt(value.z, key); - result.w = ObscuredFloat.Decrypt(value.w, key); - - return result; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredQuaternion FromEncrypted(RawEncryptedQuaternion encrypted, int key) - { - var instance = new ObscuredQuaternion(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static int GenerateKey() - { - return RandomUtils.GenerateIntKey(); - } - - private static bool Compare(Quaternion q1, Quaternion q2) - { - var epsilon = ObscuredCheatingDetector.ExistsAndIsRunning ? - ObscuredCheatingDetector.Instance.quaternionEpsilon : float.Epsilon; - return NumUtils.CompareFloats(q1.x, q2.x, epsilon) && - NumUtils.CompareFloats(q1.y, q2.y, epsilon) && - NumUtils.CompareFloats(q1.z, q2.z, epsilon) && - NumUtils.CompareFloats(q1.w, q2.w, epsilon); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public RawEncryptedQuaternion GetEncrypted(out int key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(RawEncryptedQuaternion encrypted, int key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public Quaternion GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private Quaternion InternalDecrypt() - { - if (!inited) - { - Init(); - return Identity; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredQuaternion)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}\"" + - $"epsilon: {ObscuredCheatingDetector.Instance.quaternionEpsilon}\n" + - $"compare: {Compare(decrypted, fakeValue)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(Identity, currentCryptoKey); - fakeValue = Identity; - fakeValueActive = false; - inited = true; - } - - #region obsolete - - //! @cond - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(int newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static RawEncryptedQuaternion Encrypt(Quaternion value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static Quaternion Decrypt(RawEncryptedQuaternion value) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public RawEncryptedQuaternion GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(RawEncryptedQuaternion encrypted) {} - - //! @endcond - - #endregion - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.cs.meta deleted file mode 100644 index 3d35952..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredQuaternion.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b5554fb207077af4e9fd8a862cfef2d3 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.API.cs deleted file mode 100644 index 38dd57d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.API.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredSByte : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredSByte(sbyte value) - { - return new ObscuredSByte(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator sbyte(ObscuredSByte value) - { - return value.InternalDecrypt(); - } - - public static ObscuredSByte operator ++(ObscuredSByte input) - { - return Increment(input, 1); - } - - public static ObscuredSByte operator --(ObscuredSByte input) - { - return Increment(input, -1); - } - - private static ObscuredSByte Increment(ObscuredSByte input, int increment) - { - var decrypted = (sbyte)(input.InternalDecrypt() + increment); - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredSByte o && Equals(o) || - other is sbyte r && Equals(r); - } - - public bool Equals(ObscuredSByte obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public bool Equals(sbyte other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredSByte other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(sbyte other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.API.cs.meta deleted file mode 100644 index aeb6986..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cf604223ed2241a9a278f0462bcea1fb -timeCreated: 1679404002 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.cs deleted file mode 100644 index d4fb5fe..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.cs +++ /dev/null @@ -1,214 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using Utils; - using Detectors; - - /// - /// Use it instead of regular sbyte for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredSByte : IObscuredType - { - private sbyte currentCryptoKey; - private sbyte hiddenValue; - private sbyte fakeValue; - private bool fakeValueActive; - private bool inited; - - private ObscuredSByte(sbyte value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : (sbyte)0; - fakeValueActive = detectorRunning; -#endif - - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static sbyte Encrypt(sbyte value, sbyte key) - { - return (sbyte)(value ^ key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static sbyte Decrypt(sbyte value, sbyte key) - { - return (sbyte)(value ^ key); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredSByte FromEncrypted(sbyte encrypted, sbyte key) - { - var instance = new ObscuredSByte(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static sbyte GenerateKey() - { - return RandomUtils.GenerateSByteKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public sbyte GetEncrypted(out sbyte key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(sbyte encrypted, sbyte key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public sbyte GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private sbyte InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - UnityEngine.Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredSByte)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(sbyte newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) API instead.", true)] - public static sbyte EncryptDecrypt(sbyte value) { throw new Exception(); } - - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) APIs instead. " + - "This API will be removed in future updates.")] - public static sbyte EncryptDecrypt(sbyte value, sbyte key) - { - return (sbyte)(value ^ key); - } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredSByte FromEncrypted(sbyte encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public sbyte GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(sbyte encrypted) {} - - #endregion - - //! @endcond - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.cs.meta deleted file mode 100644 index 813973a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredSByte.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 85fc7cb25b13cdb49bac95dfa9613df3 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.API.cs deleted file mode 100644 index b2b01bc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.API.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredShort : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredShort(short value) - { - return new ObscuredShort(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator short(ObscuredShort value) - { - return value.InternalDecrypt(); - } - - public static ObscuredShort operator ++(ObscuredShort input) - { - return Increment(input, 1); - } - - public static ObscuredShort operator --(ObscuredShort input) - { - return Increment(input, -1); - } - - private static ObscuredShort Increment(ObscuredShort input, int increment) - { - var decrypted = (short)(input.InternalDecrypt() + increment); - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredShort o && Equals(o) || - other is short r && Equals(r); - } - - public bool Equals(ObscuredShort obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public bool Equals(short other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredShort other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(short other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.API.cs.meta deleted file mode 100644 index 8758900..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3305d1b94ab64fb5a9253573b3e9a0fe -timeCreated: 1679404060 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.Editor.cs deleted file mode 100644 index 0778b64..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredShort - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.Editor.cs.meta deleted file mode 100644 index 7224ce2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ba529d640a1743db9d63ae30476b3ce2 -timeCreated: 1667757696 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.cs deleted file mode 100644 index 39a28b8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.cs +++ /dev/null @@ -1,213 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular short for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredShort : IObscuredType - { - [SerializeField] internal short currentCryptoKey; - [SerializeField] internal short hiddenValue; - [SerializeField] internal short fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredShort(short value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : (short)0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static short Encrypt(short value, short key) - { - return (short)(value ^ key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static short Decrypt(short value, short key) - { - return (short)(value ^ key); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredShort FromEncrypted(short encrypted, short key) - { - var instance = new ObscuredShort(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static short GenerateKey() - { - return RandomUtils.GenerateShortKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public short GetEncrypted(out short key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(short encrypted, short key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public short GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private short InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredShort)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(short newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) API instead.", true)] - public static short EncryptDecrypt(short value) { throw new Exception(); } - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) APIs instead. " + - "This API will be removed in future updates.")] - public static short EncryptDecrypt(short value, short key) - { - return (short)(value ^ key); - } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredShort FromEncrypted(short encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public short GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(short encrypted) {} - - #endregion - - //! @endcond - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.cs.meta deleted file mode 100644 index 5dd54be..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredShort.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 46e3b6b31fa3d9b41ab6f000a24f838b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.API.cs deleted file mode 100644 index 8d2ad32..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.API.cs +++ /dev/null @@ -1,161 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public sealed partial class ObscuredString : IEquatable, IEquatable, IComparable, IComparable, IComparable - { - public int Length => hiddenChars.Length; - - /// - /// Proxy to the String API. - /// Please consider avoiding using this in a hot path since it invokes decryption on every access call. - /// - public char this[int index] - { - get - { - if (index < 0 || index >= Length) - throw new IndexOutOfRangeException(); - return InternalDecrypt()[index]; - } - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredString(string value) - { - return value == null ? null : new ObscuredString(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator string(ObscuredString value) - { - return value == null ? null : value.InternalDecryptToString(); - } - - /// - /// Determines whether two specified ObscuredStrings have the same value. - /// - /// - /// - /// true if the value of is the same as the value of ; otherwise, false. - /// - /// An ObscuredString or null. An ObscuredString or null. - public static bool operator ==(ObscuredString a, ObscuredString b) - { - if (ReferenceEquals(a, b)) - return true; - - if ((object)a == null || (object)b == null) - return false; - - return a.cryptoKey == b.cryptoKey - ? ArraysEquals(a.hiddenChars, b.hiddenChars) - : ArraysEquals(a.InternalDecrypt(), b.InternalDecrypt()); - } - - /// - /// Determines whether two specified ObscuredStrings have different values. - /// - /// - /// - /// true if the value of is different from the value of ; otherwise, false. - /// - /// An ObscuredString or null. An ObscuredString or null. - public static bool operator !=(ObscuredString a, ObscuredString b) - { - return !(a == b); - } - - /// - /// Proxy to the String API. - /// Please consider avoiding using this in a hot path since it invokes decryption on every access call. - /// - public string Substring(int startIndex) - { - return Substring(startIndex, Length - startIndex); - } - - /// - /// Proxy to the String API. - /// Please consider avoiding using this in a hot path since it invokes decryption on every access call. - /// - public string Substring(int startIndex, int length) - { - return InternalDecryptToString().Substring(startIndex, length); - } - - /// - /// Proxy to the String API. - /// Please consider avoiding using this in a hot path since it invokes decryption on every access call. - /// - public bool StartsWith(string value, StringComparison comparisonType = StringComparison.CurrentCulture) - { - return InternalDecryptToString().StartsWith(value, comparisonType); - } - - /// - /// Proxy to the String API. - /// Please consider avoiding using this in a hot path since it invokes decryption on every access call. - /// - public bool EndsWith(string value, StringComparison comparisonType = StringComparison.CurrentCulture) - { - return InternalDecryptToString().EndsWith(value, comparisonType); - } - - public override int GetHashCode() - { - return InternalDecryptToString().GetHashCode(); - } - - public override string ToString() - { - return InternalDecryptToString(); - } - - public override bool Equals(object other) - { - return other is ObscuredString o && Equals(o) || - other is string r && Equals(r); - } - - public bool Equals(ObscuredString obj) - { - if (obj == null) return false; - - return cryptoKey == obj.cryptoKey ? ArraysEquals(hiddenChars, obj.hiddenChars) : - ArraysEquals(InternalDecrypt(), obj.InternalDecrypt()); - } - - public bool Equals(ObscuredString value, StringComparison comparisonType) - { - return value != null && - string.Equals(InternalDecryptToString(), value.InternalDecryptToString(), comparisonType); - } - - public bool Equals(string other) - { - return InternalDecryptToString().Equals(other); - } - - public int CompareTo(ObscuredString other) - { - return InternalDecryptToString().CompareTo(other.InternalDecryptToString()); - } - - public int CompareTo(string other) - { - return InternalDecryptToString().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecryptToString().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.API.cs.meta deleted file mode 100644 index 1160ecc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a1ece52e9b49435aa1f0bccec969feb4 -timeCreated: 1679404093 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.Editor.cs deleted file mode 100644 index e8fc738..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public sealed partial class ObscuredString - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == GetDecrypted(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.Editor.cs.meta deleted file mode 100644 index 6078cf0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2f1581216ccf4e2eb7ac53d0133bc220 -timeCreated: 1667512610 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.cs deleted file mode 100644 index cdc7c91..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.cs +++ /dev/null @@ -1,430 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using Common; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular string for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public sealed partial class ObscuredString : IObscuredType - { - [SerializeField] private string currentCryptoKey; // deprecated -#pragma warning disable 0649 - [SerializeField] private byte[] hiddenValue; // deprecated -#pragma warning restore 0649 - - [SerializeField] internal char[] cryptoKey; - [SerializeField] internal char[] hiddenChars; - [SerializeField] internal string fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - // for serialization purposes - private ObscuredString(){} - - private ObscuredString(string value) - { - cryptoKey = new char[7]; - GenerateKey(ref cryptoKey); - hiddenChars = InternalEncryptDecrypt(value.ToCharArray(), cryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : null; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static char[] Encrypt(string value, string key) - { - return Encrypt(value, key.ToCharArray()); - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static char[] Encrypt(string value, char[] key) - { - return Encrypt(value.ToCharArray(), key); - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static char[] Encrypt(char[] value, char[] key) - { - return InternalEncryptDecrypt(value, key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static string Decrypt(char[] value, string key) - { - return Decrypt(value, key.ToCharArray()); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static string Decrypt(char[] value, char[] key) - { - return new string(InternalEncryptDecrypt(value, key)); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredString FromEncrypted(char[] encrypted, char[] key) - { - var instance = new ObscuredString(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Use this only to decrypt data encrypted with previous ACTk versions. - /// - /// Please use \ref FromEncrypted() "FromEncrypted(char[], char[])" in other cases. - [Obsolete("Use this only to decrypt data encrypted with previous ACTk versions. " + - "Please use FromEncrypted(char[], char[]) in other cases.")] - public static ObscuredString FromEncrypted(string encrypted, string key = "4441") - { - var instance = new ObscuredString(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key in new allocated array. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static char[] GenerateKey() - { - var arrayToFill = new char[7]; - GenerateKey(ref arrayToFill); - return arrayToFill; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Preallocated char array. Only first 7 bytes are filled. - public static void GenerateKey(ref char[] arrayToFill) - { - RandomUtils.GenerateCharArrayKey(ref arrayToFill); - } - - [Obsolete("Please use version with ref argument or without arguments instead.")] - public static char[] GenerateKey(char[] arrayToFill) - { - RandomUtils.GenerateCharArrayKey(ref arrayToFill); - return arrayToFill; - } - - internal static char[] InternalEncryptDecrypt(char[] value, char[] key) - { - if (value == null || value.Length == 0) - return value; - - if (key.Length == 0) - { - Debug.LogError(ACTk.LogPrefix + "Empty key can't be used for string encryption or decryption!"); - return value; - } - - var keyLength = key.Length; - var valueLength = value.Length; - var result = new char[valueLength]; - - for (var i = 0; i < valueLength; i++) - { - result[i] = (char)(value[i] ^ key[i % keyLength]); - } - - return result; - } - - internal static string EncryptDecryptObsolete(string value, string key) - { - if (string.IsNullOrEmpty(value)) - return string.Empty; - - if (string.IsNullOrEmpty(key)) - { - Debug.LogError(ACTk.LogPrefix + "Empty key can't be used for string encryption or decryption!"); - return string.Empty; - } - - var keyLength = key.Length; - var valueLength = value.Length; - var result = new char[valueLength]; - - for (var i = 0; i < valueLength; i++) - { - result[i] = (char)(value[i] ^ key[i % keyLength]); - } - - return new string(result); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public char[] GetEncrypted(out char[] key) - { - if (!inited) - Init(); - - key = cryptoKey; - return hiddenChars; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(char[] encrypted, char[] key) - { - inited = true; - hiddenChars = encrypted; - cryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecryptToString(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Use this only to decrypt data encrypted with previous ACTk versions. - /// - /// Please use \ref SetEncrypted() "SetEncrypted(char[], char[])" in other cases. - [Obsolete("Use this only to decrypt data encrypted with previous ACTk versions. " + - "Please use SetEncrypted(char[], char[]) in other cases.")] - public void SetEncrypted(string encrypted, string key) - { - inited = true; - var decrypted = EncryptDecryptObsolete(encrypted, key); - cryptoKey = GenerateKey(); - hiddenChars = Encrypt(decrypted, cryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecryptToString(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public string GetDecrypted() - { - return InternalDecryptToString(); - } - - /// - /// GC-friendly alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value as a raw chars array in case you don't wish to allocate new string. - public char[] GetDecryptedToChars() - { - return InternalDecrypt(); - } - - /// - /// Allows to change current crypto key to the new random value and re-encrypt variable using it. - /// Use it for extra protection against 'unknown value' search. - /// Just call it sometimes when your variable doesn't change to fool the cheater. - /// - /// \htmlonlyWARNING:\endhtmlonly produces some GC allocations, be careful when using it! - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - GenerateKey(ref cryptoKey); - hiddenChars = InternalEncryptDecrypt(decrypted, cryptoKey); // encrypting - } - - private string InternalDecryptToString() - { - return new string(InternalDecrypt()); - } - - private char[] InternalDecrypt() - { - if (!inited) - { - Init(); - return Array.Empty(); - } - - if (!string.IsNullOrEmpty(currentCryptoKey)) - MigrateFromACTkV1(); - - var decrypted = InternalEncryptDecrypt(hiddenChars, cryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredString)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}\n" + - $"compare: {Compare(decrypted, fakeValue)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - cryptoKey = new char[7]; - GenerateKey(ref cryptoKey); - hiddenChars = InternalEncryptDecrypt(Array.Empty(), cryptoKey); // encrypting - fakeValue = string.Empty; - fakeValueActive = false; - inited = true; - } - - private bool Compare(char[] chars, string s) - { - if (chars.Length != s.Length) return false; - - for (var i = 0; i < chars.Length; i++) - { - if (chars[i] != s[i]) - return false; - } - - return true; - } - - internal void MigrateFromACTkV1() - { - var decryptedOld = EncryptDecryptObsolete(GetStringObsolete(hiddenValue), currentCryptoKey); - GenerateKey(ref cryptoKey); - hiddenChars = InternalEncryptDecrypt(decryptedOld.ToCharArray(), cryptoKey); - currentCryptoKey = null; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(string newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) API instead.", true)] - public static string EncryptDecrypt(string value) { throw new Exception(); } - - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) APIs instead. " + - "This API will be removed in future updates.")] - public static string EncryptDecrypt(string value, string key) - { - return EncryptDecryptObsolete(value, key); - } - -/* [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredString FromEncrypted(string encrypted) { throw new Exception(); }*/ - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public string GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(string encrypted) {} - - #endregion - - //! @endcond - - internal static string GetStringObsolete(byte[] bytes) - { - var chars = new char[bytes.Length / sizeof(char)]; - Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); - return new string(chars); - } - - internal static byte[] GetBytesObsolete(string str) - { - var bytes = new byte[str.Length * sizeof(char)]; - Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); - return bytes; - } - - private static bool ArraysEquals(char[] a1, char[] a2) - { - if (a1 == a2) return true; - if (a1 == null || a2 == null) return false; - if (a1.Length != a2.Length) return false; - - for (var i = 0; i < a1.Length; i++) - { - if (a1[i] != a2[i]) - return false; - } - return true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.cs.meta deleted file mode 100644 index 6591667..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredString.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b7384734914d23c46a03e66efa0e3772 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.API.cs deleted file mode 100644 index 2fe78f0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.API.cs +++ /dev/null @@ -1,116 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredUInt : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredUInt(uint value) - { - return new ObscuredUInt(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator uint(ObscuredUInt value) - { - return value.InternalDecrypt(); - } - - public static explicit operator ObscuredInt(ObscuredUInt value) - { - return (int)value.InternalDecrypt(); - } - - public static ObscuredUInt operator ++(ObscuredUInt input) - { - return Increment(input, 1); - } - - public static ObscuredUInt operator --(ObscuredUInt input) - { - return Increment(input, -1); - } - - private static ObscuredUInt Increment(ObscuredUInt input, int increment) - { - var decrypted = (uint)(input.InternalDecrypt() + increment); - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredUInt o && Equals(o) || - other is uint r && Equals(r); - } - - public bool Equals(ObscuredUInt obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public bool Equals(uint other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredUInt other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(uint other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.API.cs.meta deleted file mode 100644 index 87c2a23..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4fd4788d44324ca9aaad04c3eabf4b0f -timeCreated: 1679404128 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.Editor.cs deleted file mode 100644 index ba5ecbc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredUInt - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.Editor.cs.meta deleted file mode 100644 index 66ec407..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f70a5adbfb3245b0b3d004bcb31a24eb -timeCreated: 1667757804 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.cs deleted file mode 100644 index d89c235..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.cs +++ /dev/null @@ -1,209 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular uint for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredUInt : IObscuredType - { - [SerializeField] internal uint currentCryptoKey; - [SerializeField] internal uint hiddenValue; - [SerializeField] internal uint fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredUInt(uint value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : 0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static uint Encrypt(uint value, uint key) - { - return value ^ key; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static uint Decrypt(uint value, uint key) - { - return value ^ key; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredUInt FromEncrypted(uint encrypted, uint key) - { - var instance = new ObscuredUInt(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static uint GenerateKey() - { - return RandomUtils.GenerateUIntKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public uint GetEncrypted(out uint key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(uint encrypted, uint key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public uint GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private uint InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredUInt)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(uint newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static int Encrypt(uint value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static int Decrypt(uint value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredUInt FromEncrypted(uint encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public uint GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(uint encrypted) {} - - #endregion - - //! @endcond - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.cs.meta deleted file mode 100644 index eb09535..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUInt.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 36ce40c89daa5014fb48c61a9f8e1223 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.API.cs deleted file mode 100644 index ed343fe..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.API.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredULong : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredULong(ulong value) - { - return new ObscuredULong(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ulong(ObscuredULong value) - { - return value.InternalDecrypt(); - } - - public static ObscuredULong operator ++(ObscuredULong input) - { - return Increment(input, true); - } - - public static ObscuredULong operator --(ObscuredULong input) - { - return Increment(input, false); - } - - private static ObscuredULong Increment(ObscuredULong input, bool positive) - { - var decrypted = positive ? input.InternalDecrypt() + 1 : input.InternalDecrypt() - 1; - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredULong o && Equals(o) || - other is ulong r && Equals(r); - } - - public bool Equals(ObscuredULong obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public bool Equals(ulong other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredULong other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(ulong other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.API.cs.meta deleted file mode 100644 index 04fef8d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bffdf5db0aff4d60af9b627f8c59426c -timeCreated: 1679404161 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.Editor.cs deleted file mode 100644 index 2c29128..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredULong - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.Editor.cs.meta deleted file mode 100644 index 5cafd91..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: caa6f1e794994c469fea73a44f03329f -timeCreated: 1667757946 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.cs deleted file mode 100644 index aa18a40..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.cs +++ /dev/null @@ -1,209 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular ulong for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredULong : IObscuredType - { - [SerializeField] internal ulong currentCryptoKey; - [SerializeField] internal ulong hiddenValue; - [SerializeField] internal ulong fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredULong(ulong value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : 0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static ulong Encrypt(ulong value, ulong key) - { - return value ^ key; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static ulong Decrypt(ulong value, ulong key) - { - return value ^ key; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredULong FromEncrypted(ulong encrypted, ulong key) - { - var instance = new ObscuredULong(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static ulong GenerateKey() - { - return RandomUtils.GenerateULongKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public ulong GetEncrypted(out ulong key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(ulong encrypted, ulong key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public ulong GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private ulong InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredULong)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(ulong newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static ulong Encrypt(ulong value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static ulong Decrypt(ulong value) { throw new Exception(); } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredULong FromEncrypted(ulong encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public ulong GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(ulong encrypted) {} - - #endregion - - //! @endcond - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.cs.meta deleted file mode 100644 index 4815f29..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredULong.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ba6f44ca353c8e14c9956d3b2ca79d42 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.API.cs deleted file mode 100644 index f078aaa..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.API.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Detectors; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredUShort : IFormattable, IEquatable, IEquatable, IComparable, IComparable, IComparable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredUShort(ushort value) - { - return new ObscuredUShort(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ushort(ObscuredUShort value) - { - return value.InternalDecrypt(); - } - - public static ObscuredUShort operator ++(ObscuredUShort input) - { - return Increment(input, 1); - } - - public static ObscuredUShort operator --(ObscuredUShort input) - { - return Increment(input, -1); - } - - private static ObscuredUShort Increment(ObscuredUShort input, int increment) - { - var decrypted = (ushort)(input.InternalDecrypt() + increment); - input.hiddenValue = Encrypt(decrypted, input.currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - input.fakeValue = decrypted; - input.fakeValueActive = true; - } - else - { - input.fakeValueActive = false; - } - - return input; - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public string ToString(IFormatProvider provider) - { - return InternalDecrypt().ToString(provider); - } - - public string ToString(string format, IFormatProvider provider) - { - return InternalDecrypt().ToString(format, provider); - } - - public override bool Equals(object other) - { - return other is ObscuredUShort o && Equals(o) || - other is ushort r && Equals(r); - } - - public bool Equals(ObscuredUShort obj) - { - return currentCryptoKey == obj.currentCryptoKey ? hiddenValue.Equals(obj.hiddenValue) : - InternalDecrypt().Equals(obj.InternalDecrypt()); - } - - public bool Equals(ushort other) - { - return InternalDecrypt().Equals(other); - } - - public int CompareTo(ObscuredUShort other) - { - return InternalDecrypt().CompareTo(other.InternalDecrypt()); - } - - public int CompareTo(ushort other) - { - return InternalDecrypt().CompareTo(other); - } - - public int CompareTo(object obj) - { - return InternalDecrypt().CompareTo(obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.API.cs.meta deleted file mode 100644 index 07b0c16..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 35caec54866c4efe8ea236bc42b39ec0 -timeCreated: 1679404193 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.cs deleted file mode 100644 index 9ce3335..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.cs +++ /dev/null @@ -1,212 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using Utils; - using Detectors; - - /// - /// Use it instead of regular ushort for any cheating-sensitive variables. - /// - /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredUShort : IObscuredType - { - private ushort currentCryptoKey; - private ushort hiddenValue; - private ushort fakeValue; - private bool fakeValueActive; - private bool inited; - - private ObscuredUShort(ushort value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : (ushort)0; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static ushort Encrypt(ushort value, ushort key) - { - return (ushort)(value ^ key); - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static ushort Decrypt(ushort value, ushort key) - { - return (ushort)(value ^ key); - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredUShort FromEncrypted(ushort encrypted, ushort key) - { - var instance = new ObscuredUShort(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static ushort GenerateKey() - { - return RandomUtils.GenerateUShortKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public ushort GetEncrypted(out ushort key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(ushort encrypted, ushort key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public ushort GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private ushort InternalDecrypt() - { - if (!inited) - { - Init(); - return 0; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - UnityEngine.Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredUShort)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(0, currentCryptoKey); - fakeValue = 0; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(ushort newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) API instead.", true)] - public static ushort EncryptDecrypt(ushort value) { throw new Exception(); } - - [Obsolete("Please use new Encrypt(value, key) or Decrypt(value, key) APIs instead. " + - "This API will be removed in future updates.")] - public static ushort EncryptDecrypt(ushort value, ushort key) - { - return (ushort)(value ^ key); - } - - [Obsolete("Please use new FromEncrypted(encrypted, key) API instead.", true)] - public static ObscuredUShort FromEncrypted(ushort encrypted) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public ushort GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(ushort encrypted) {} - - #endregion - - //! @endcond - } -} diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.cs.meta deleted file mode 100644 index 4b6eac0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredUShort.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c45101ba7cb548746b7a533070d39455 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.API.cs deleted file mode 100644 index 1fc2fb7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.API.cs +++ /dev/null @@ -1,74 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using UnityEngine; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector2 : IEquatable, IEquatable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredVector2(Vector2 value) - { - return new ObscuredVector2(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Vector2(ObscuredVector2 value) - { - return value.InternalDecrypt(); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Vector3(ObscuredVector2 value) - { - var v = value.InternalDecrypt(); - return new Vector3(v.x, v.y, 0.0f); - } - - public override bool Equals(object other) - { - return other is ObscuredVector2 o && Equals(o) || - other is Vector2 r && Equals(r); - } - - public bool Equals(ObscuredVector2 other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(Vector2 other) - { - return InternalDecrypt().Equals(other); - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public void Normalize() - { - var temp = InternalDecrypt(); - temp.Normalize(); - SetEncrypted(Encrypt(normalized, currentCryptoKey), currentCryptoKey); - } - - public Vector2 normalized => InternalDecrypt().normalized; - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.API.cs.meta deleted file mode 100644 index 58aef21..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 17422e8dbb944e89abbcc6611c5f7e9e -timeCreated: 1679404235 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Editor.cs deleted file mode 100644 index 01df3d3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector2 - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return Compare(fakeValue, InternalDecrypt()); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Editor.cs.meta deleted file mode 100644 index 55a866c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d83987ab0d524a19aca947859fe514f2 -timeCreated: 1667758003 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Raw.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Raw.cs deleted file mode 100644 index 28557be..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Raw.cs +++ /dev/null @@ -1,48 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector2 - { - /// - /// Used to store encrypted Vector2. - /// - [Serializable] - public struct RawEncryptedVector2 : IEquatable - { - /// - /// Encrypted value - /// - public int x; - - /// - /// Encrypted value - /// - public int y; - - public bool Equals(RawEncryptedVector2 other) - { - return x == other.x && y == other.y; - } - - public override bool Equals(object obj) - { - return obj is RawEncryptedVector2 other && Equals(other); - } - - public override int GetHashCode() - { - unchecked - { - return (x * 397) ^ y; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Raw.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Raw.cs.meta deleted file mode 100644 index b0879e1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.Raw.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 63cd55426ab0482da5c170cc6b7d9574 -timeCreated: 1679417260 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.cs deleted file mode 100644 index 63c42f4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.cs +++ /dev/null @@ -1,376 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular Vector2 for any cheating-sensitive variables. - /// - /// \htmlonlyWARNING:\endhtmlonly Doesn't mimic regular type API, thus should be used with extra caution. Cast it to regular, not obscured type to work with regular APIs.
- /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredVector2 : IObscuredType - { - private static readonly Vector2 Zero = Vector2.zero; - -#if UNITY_EDITOR - public string migratedVersion; -#endif - - [SerializeField] internal int currentCryptoKey; - [SerializeField] internal RawEncryptedVector2 hiddenValue; - [SerializeField] internal Vector2 fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredVector2(Vector2 value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; - migratedVersion = null; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : Zero; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Mimics constructor of regular Vector2. - /// - /// X component of the vector - /// Y component of the vector - public ObscuredVector2(float x, float y) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(x, y, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue = new Vector2(x, y); - fakeValueActive = true; - } - else - { - fakeValue = Zero; - fakeValueActive = false; - } - -#if UNITY_EDITOR - migratedVersion = null; -#endif - inited = true; - } - - public float x - { - get - { - var decrypted = ObscuredFloat.Decrypt(hiddenValue.x, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue.x)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector2)}\n" + - $"decrypted.x: {decrypted}\n" + - $"fakeValue.x: {fakeValue.x}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.vector2Epsilon}" + - $"compare: {Compare(decrypted, fakeValue.x)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.x = ObscuredFloat.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = value; - fakeValue.y = ObscuredFloat.Decrypt(hiddenValue.y, currentCryptoKey); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public float y - { - get - { - var decrypted = ObscuredFloat.Decrypt(hiddenValue.y, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue.y)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector2)}\n" + - $"decrypted.y: {decrypted}\n" + - $"fakeValue.y: {fakeValue.y}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.vector2Epsilon}" + - $"compare: {Compare(decrypted, fakeValue.y)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.y = ObscuredFloat.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = ObscuredFloat.Decrypt(hiddenValue.x, currentCryptoKey); - fakeValue.y = value; - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public float this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - default: - throw new IndexOutOfRangeException($"Invalid {nameof(ObscuredVector2)} index!"); - } - } - set - { - switch (index) - { - case 0: - x = value; - break; - case 1: - y = value; - break; - default: - throw new IndexOutOfRangeException($"Invalid {nameof(ObscuredVector2)} index!"); - } - } - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector2 Encrypt(Vector2 value, int key) - { - return Encrypt(value.x, value.y, key); - } - - /// - /// Encrypts passed components using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector2 Encrypt(float x, float y, int key) - { - RawEncryptedVector2 result; - result.x = ObscuredFloat.Encrypt(x, key); - result.y = ObscuredFloat.Encrypt(y, key); - - return result; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static Vector2 Decrypt(RawEncryptedVector2 value, int key) - { - Vector2 result; - result.x = ObscuredFloat.Decrypt(value.x, key); - result.y = ObscuredFloat.Decrypt(value.y, key); - - return result; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredVector2 FromEncrypted(RawEncryptedVector2 encrypted, int key) - { - var instance = new ObscuredVector2(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static int GenerateKey() - { - return RandomUtils.GenerateIntKey(); - } - - private static bool Compare(Vector2 v1, Vector2 v2) - { - return Compare(v1.x, v2.x) && - Compare(v1.y, v2.y); - } - - private static bool Compare(float f1, float f2) - { - var epsilon = ObscuredCheatingDetector.ExistsAndIsRunning ? - ObscuredCheatingDetector.Instance.vector2Epsilon : float.Epsilon; - return NumUtils.CompareFloats(f1, f2, epsilon); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public RawEncryptedVector2 GetEncrypted(out int key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(RawEncryptedVector2 encrypted, int key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public Vector2 GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private Vector2 InternalDecrypt() - { - if (!inited) - { - Init(); - return Zero; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector2)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.vector2Epsilon}" + - $"compare: {Compare(decrypted, fakeValue)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(Zero, currentCryptoKey); - fakeValue = Zero; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(int newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static RawEncryptedVector2 Encrypt(Vector2 value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static Vector2 Decrypt(RawEncryptedVector2 value) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public RawEncryptedVector2 GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(RawEncryptedVector2 encrypted) {} - - #endregion - - //! @endcond - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.cs.meta deleted file mode 100644 index de1bd86..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b2747e161005ff74f91cf08fc1184a62 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.API.cs deleted file mode 100644 index 95e9faf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.API.cs +++ /dev/null @@ -1,59 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using UnityEngine; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector2Int : IEquatable, IEquatable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredVector2Int(Vector2Int value) - { - return new ObscuredVector2Int(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Vector2Int(ObscuredVector2Int value) - { - return value.InternalDecrypt(); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Vector2(ObscuredVector2Int value) - { - return value.InternalDecrypt(); - } - - public override bool Equals(object other) - { - return other is ObscuredVector2Int o && Equals(o) || - other is Vector2Int r && Equals(r); - } - - public bool Equals(ObscuredVector2Int other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(Vector2Int other) - { - return InternalDecrypt().Equals(other); - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.API.cs.meta deleted file mode 100644 index 2161dd1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5ebd36de4e03418596a257ef9bc779ef -timeCreated: 1679404258 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Editor.cs deleted file mode 100644 index 72c3282..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector2Int - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Editor.cs.meta deleted file mode 100644 index d518cc1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0fdcf5cd346e40e78a452f5bbe0eb95b -timeCreated: 1667758261 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Raw.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Raw.cs deleted file mode 100644 index 2736cd9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Raw.cs +++ /dev/null @@ -1,48 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector2Int - { - /// - /// Used to store encrypted Vector2. - /// - [Serializable] - public struct RawEncryptedVector2Int : IEquatable - { - /// - /// Encrypted value - /// - public int x; - - /// - /// Encrypted value - /// - public int y; - - public bool Equals(RawEncryptedVector2Int other) - { - return x == other.x && y == other.y; - } - - public override bool Equals(object obj) - { - return obj is RawEncryptedVector2Int other && Equals(other); - } - - public override int GetHashCode() - { - unchecked - { - return (x * 397) ^ y; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Raw.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Raw.cs.meta deleted file mode 100644 index f3bd12a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.Raw.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 62fa01c2fbd44ada8f0c54ed89914fc7 -timeCreated: 1679417218 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.cs deleted file mode 100644 index 0054f89..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.cs +++ /dev/null @@ -1,351 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular Vector2Int for any cheating-sensitive variables. - /// - /// \htmlonlyWARNING:\endhtmlonly Doesn't mimic regular type API, thus should be used with extra caution. Cast it to regular, not obscured type to work with regular APIs.
- /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredVector2Int : IObscuredType - { - private static readonly Vector2Int Zero = Vector2Int.zero; - - [SerializeField] internal int currentCryptoKey; - [SerializeField] internal RawEncryptedVector2Int hiddenValue; - [SerializeField] internal Vector2Int fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredVector2Int(Vector2Int value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : Zero; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Mimics constructor of regular Vector2Int. - /// - /// X component of the vector - /// Y component of the vector - public ObscuredVector2Int(int x, int y) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(x, y, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue = new Vector2Int(x, y); - fakeValueActive = true; - } - else - { - fakeValue = Zero; - fakeValueActive = false; - } - - inited = true; - } - - public int x - { - get - { - var decrypted = ObscuredInt.Decrypt(hiddenValue.x, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue.x) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector2Int)}\n" + - $"decrypted.x: {decrypted}\n" + - $"fakeValue.x: {fakeValue.x}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.x = ObscuredInt.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = value; - fakeValue.y = ObscuredInt.Decrypt(hiddenValue.y, currentCryptoKey); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public int y - { - get - { - var decrypted = ObscuredInt.Decrypt(hiddenValue.y, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue.y) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector2Int)}\n" + - $"decrypted.y: {decrypted}\n" + - $"fakeValue.y: {fakeValue.y}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.y = ObscuredInt.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = ObscuredInt.Decrypt(hiddenValue.x, currentCryptoKey); - fakeValue.y = value; - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public int this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - default: - throw new IndexOutOfRangeException($"Invalid {nameof(ObscuredVector2Int)} index!"); - } - } - set - { - switch (index) - { - case 0: - x = value; - break; - case 1: - y = value; - break; - default: - throw new IndexOutOfRangeException($"Invalid {nameof(ObscuredVector2Int)} index!"); - } - } - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector2Int Encrypt(Vector2Int value, int key) - { - return Encrypt(value.x, value.y, key); - } - - /// - /// Encrypts passed components using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector2Int Encrypt(int x, int y, int key) - { - RawEncryptedVector2Int result; - result.x = ObscuredInt.Encrypt(x, key); - result.y = ObscuredInt.Encrypt(y, key); - - return result; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static Vector2Int Decrypt(RawEncryptedVector2Int value, int key) - { - var result = new Vector2Int - { - x = ObscuredInt.Decrypt(value.x, key), - y = ObscuredInt.Decrypt(value.y, key) - }; - - return result; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredVector2Int FromEncrypted(RawEncryptedVector2Int encrypted, int key) - { - var instance = new ObscuredVector2Int(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static int GenerateKey() - { - return RandomUtils.GenerateIntKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public RawEncryptedVector2Int GetEncrypted(out int key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(RawEncryptedVector2Int encrypted, int key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public Vector2Int GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private Vector2Int InternalDecrypt() - { - if (!inited) - { - Init(); - return Zero; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector2Int)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(Zero, currentCryptoKey); - fakeValue = Zero; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(int newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static RawEncryptedVector2Int Encrypt(Vector2Int value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static Vector2Int Decrypt(RawEncryptedVector2Int value) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public RawEncryptedVector2Int GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(RawEncryptedVector2Int encrypted) {} - - #endregion - - //! @endcond - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.cs.meta deleted file mode 100644 index edc2b69..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector2Int.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7d311f3fb76e0264daaa7162eab7563f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.API.cs deleted file mode 100644 index cb7d623..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.API.cs +++ /dev/null @@ -1,147 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using UnityEngine; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector3 : IEquatable, IEquatable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredVector3(Vector3 value) - { - return new ObscuredVector3(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Vector3(ObscuredVector3 value) - { - return value.InternalDecrypt(); - } - - public static ObscuredVector3 operator +(ObscuredVector3 a, ObscuredVector3 b) - { - return a.InternalDecrypt() + b.InternalDecrypt(); - } - - public static ObscuredVector3 operator +(Vector3 a, ObscuredVector3 b) - { - return a + b.InternalDecrypt(); - } - - public static ObscuredVector3 operator +(ObscuredVector3 a, Vector3 b) - { - return a.InternalDecrypt() + b; - } - - public static ObscuredVector3 operator -(ObscuredVector3 a, ObscuredVector3 b) - { - return a.InternalDecrypt() - b.InternalDecrypt(); - } - - public static ObscuredVector3 operator -(Vector3 a, ObscuredVector3 b) - { - return a - b.InternalDecrypt(); - } - - public static ObscuredVector3 operator -(ObscuredVector3 a, Vector3 b) - { - return a.InternalDecrypt() - b; - } - - public static ObscuredVector3 operator -(ObscuredVector3 a) - { - return -a.InternalDecrypt(); - } - - public static ObscuredVector3 operator *(ObscuredVector3 a, float d) - { - return a.InternalDecrypt() * d; - } - - public static ObscuredVector3 operator *(float d, ObscuredVector3 a) - { - return d * a.InternalDecrypt(); - } - - public static ObscuredVector3 operator /(ObscuredVector3 a, float d) - { - return a.InternalDecrypt() / d; - } - - public static bool operator ==(ObscuredVector3 lhs, ObscuredVector3 rhs) - { - return lhs.InternalDecrypt() == rhs.InternalDecrypt(); - } - - public static bool operator ==(Vector3 lhs, ObscuredVector3 rhs) - { - return lhs == rhs.InternalDecrypt(); - } - - public static bool operator ==(ObscuredVector3 lhs, Vector3 rhs) - { - return lhs.InternalDecrypt() == rhs; - } - - public static bool operator !=(ObscuredVector3 lhs, ObscuredVector3 rhs) - { - return lhs.InternalDecrypt() != rhs.InternalDecrypt(); - } - - public static bool operator !=(Vector3 lhs, ObscuredVector3 rhs) - { - return lhs != rhs.InternalDecrypt(); - } - - public static bool operator !=(ObscuredVector3 lhs, Vector3 rhs) - { - return lhs.InternalDecrypt() != rhs; - } - - public override bool Equals(object other) - { - return other is ObscuredVector3 o && Equals(o) || - other is Vector3 r && Equals(r); - } - - public bool Equals(ObscuredVector3 other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(Vector3 other) - { - return InternalDecrypt().Equals(other); - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - - public void Normalize() - { - var temp = InternalDecrypt(); - temp.Normalize(); - SetEncrypted(Encrypt(normalized, currentCryptoKey), currentCryptoKey); - } - - public Vector3 normalized => InternalDecrypt().normalized; - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.API.cs.meta deleted file mode 100644 index 90d401d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c2ada4c9123744958b5b7d2575eb5716 -timeCreated: 1679404280 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Editor.cs deleted file mode 100644 index 9a1f627..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector3 - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return Compare(fakeValue, InternalDecrypt()); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Editor.cs.meta deleted file mode 100644 index b825fe5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 986cba1b8fe54661b153c0ad08e0f095 -timeCreated: 1667758318 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Raw.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Raw.cs deleted file mode 100644 index e28ffb4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Raw.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector3 - { - /// - /// Used to store encrypted Vector3. - /// - [Serializable] - public struct RawEncryptedVector3 : IEquatable - { - /// - /// Encrypted value - /// - public int x; - /// - /// Encrypted value - /// - public int y; - /// - /// Encrypted value - /// - public int z; - - public bool Equals(RawEncryptedVector3 other) - { - return x == other.x && y == other.y && z == other.z; - } - - public override bool Equals(object obj) - { - return obj is RawEncryptedVector3 other && Equals(other); - } - - public override int GetHashCode() - { - unchecked - { - var hashCode = x; - hashCode = (hashCode * 397) ^ y; - hashCode = (hashCode * 397) ^ z; - return hashCode; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Raw.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Raw.cs.meta deleted file mode 100644 index 620b06e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.Raw.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3614e359670b47d29e5ce31cec6f1153 -timeCreated: 1679417072 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.cs deleted file mode 100644 index c991d00..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.cs +++ /dev/null @@ -1,424 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular Vector3 for any cheating-sensitive variables. - /// - /// \htmlonlyWARNING:\endhtmlonly Doesn't mimic regular type API, thus should be used with extra caution. Cast it to regular, not obscured type to work with regular APIs.
- /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredVector3 : IObscuredType - { - private static readonly Vector3 Zero = Vector3.zero; - -#if UNITY_EDITOR - public string migratedVersion; -#endif - - [SerializeField] internal int currentCryptoKey; - [SerializeField] internal RawEncryptedVector3 hiddenValue; - [SerializeField] internal Vector3 fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredVector3(Vector3 value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; - migratedVersion = null; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : Zero; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Mimics constructor of regular Vector3. - /// - /// X component of the vector - /// Y component of the vector - /// Z component of the vector - public ObscuredVector3(float x, float y, float z) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(x,y,z, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue = new Vector3(x, y, z); - fakeValueActive = true; - } - else - { - fakeValue = Zero; - fakeValueActive = false; - } - -#if UNITY_EDITOR - migratedVersion = null; -#endif - inited = true; - } - - public float x - { - get - { - var decrypted = ObscuredFloat.Decrypt(hiddenValue.x, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue.x)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3)}\n" + - $"decrypted.y: {decrypted}\n" + - $"fakeValue.y: {fakeValue.y}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.vector3Epsilon}" + - $"compare: {Compare(decrypted, fakeValue.y)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.x = ObscuredFloat.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = value; - fakeValue.y = ObscuredFloat.Decrypt(hiddenValue.y, currentCryptoKey); - fakeValue.z = ObscuredFloat.Decrypt(hiddenValue.z, currentCryptoKey); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public float y - { - get - { - var decrypted = ObscuredFloat.Decrypt(hiddenValue.y, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue.y)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3)}\n" + - $"decrypted.y: {decrypted}\n" + - $"fakeValue.y: {fakeValue.y}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.vector3Epsilon}" + - $"compare: {Compare(decrypted, fakeValue.y)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.y = ObscuredFloat.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = ObscuredFloat.Decrypt(hiddenValue.x, currentCryptoKey); - fakeValue.y = value; - fakeValue.z = ObscuredFloat.Decrypt(hiddenValue.z, currentCryptoKey); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public float z - { - get - { - var decrypted = ObscuredFloat.Decrypt(hiddenValue.z, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue.z)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3)}\n" + - $"decrypted.z: {decrypted}\n" + - $"fakeValue.z: {fakeValue.z}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.vector3Epsilon}" + - $"compare: {Compare(decrypted, fakeValue.z)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.z = ObscuredFloat.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = ObscuredFloat.Decrypt(hiddenValue.x, currentCryptoKey); - fakeValue.y = ObscuredFloat.Decrypt(hiddenValue.y, currentCryptoKey); - fakeValue.z = value; - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public float this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - case 2: - return z; - default: - throw new IndexOutOfRangeException($"Invalid {nameof(ObscuredVector3)} index!"); - } - } - set - { - switch (index) - { - case 0: - x = value; - break; - case 1: - y = value; - break; - case 2: - z = value; - break; - default: - throw new IndexOutOfRangeException($"Invalid {nameof(ObscuredVector3)} index!"); - } - } - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector3 Encrypt(Vector3 value, int key) - { - return Encrypt(value.x, value.y, value.z, key); - } - - /// - /// Encrypts passed components using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector3 Encrypt(float x, float y, float z, int key) - { - RawEncryptedVector3 result; - result.x = ObscuredFloat.Encrypt(x, key); - result.y = ObscuredFloat.Encrypt(y, key); - result.z = ObscuredFloat.Encrypt(z, key); - - return result; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static Vector3 Decrypt(RawEncryptedVector3 value, int key) - { - Vector3 result; - result.x = ObscuredFloat.Decrypt(value.x, key); - result.y = ObscuredFloat.Decrypt(value.y, key); - result.z = ObscuredFloat.Decrypt(value.z, key); - - return result; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredVector3 FromEncrypted(RawEncryptedVector3 encrypted, int key) - { - var instance = new ObscuredVector3(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static int GenerateKey() - { - return RandomUtils.GenerateIntKey(); - } - - private static bool Compare(Vector3 v1, Vector3 v2) - { - return Compare(v1.x, v2.x) && - Compare(v1.y, v2.y) && - Compare(v1.z, v2.z); - } - - private static bool Compare(float f1, float f2) - { - var epsilon = ObscuredCheatingDetector.ExistsAndIsRunning ? - ObscuredCheatingDetector.Instance.vector3Epsilon : float.Epsilon; - return NumUtils.CompareFloats(f1, f2, epsilon); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public RawEncryptedVector3 GetEncrypted(out int key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(RawEncryptedVector3 encrypted, int key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public Vector3 GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private Vector3 InternalDecrypt() - { - if (!inited) - { - Init(); - return Zero; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && !Compare(decrypted, fakeValue)) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}\n" + - $"epsilon: {ObscuredCheatingDetector.Instance.vector3Epsilon}" + - $"compare: {Compare(decrypted, fakeValue)}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(Zero, currentCryptoKey); - fakeValue = Zero; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(int newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static RawEncryptedVector3 Encrypt(Vector3 value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static Vector3 Decrypt(RawEncryptedVector3 value) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public RawEncryptedVector3 GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(RawEncryptedVector3 encrypted) {} - - #endregion - - //! @endcond - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.cs.meta deleted file mode 100644 index 75ba7f6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ee22c33f589a744438fb51f130130827 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.API.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.API.cs deleted file mode 100644 index 5ec0c00..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.API.cs +++ /dev/null @@ -1,129 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using UnityEngine; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector3Int : IEquatable, IEquatable - { - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator ObscuredVector3Int(Vector3Int value) - { - return new ObscuredVector3Int(value); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Vector3Int(ObscuredVector3Int value) - { - return value.InternalDecrypt(); - } - - [System.Reflection.Obfuscation(Exclude = true)] - public static implicit operator Vector3(ObscuredVector3Int value) - { - return value.InternalDecrypt(); - } - - public static ObscuredVector3Int operator +(ObscuredVector3Int a, ObscuredVector3Int b) - { - return a.InternalDecrypt() + b.InternalDecrypt(); - } - - public static ObscuredVector3Int operator +(Vector3Int a, ObscuredVector3Int b) - { - return a + b.InternalDecrypt(); - } - - public static ObscuredVector3Int operator +(ObscuredVector3Int a, Vector3Int b) - { - return a.InternalDecrypt() + b; - } - - public static ObscuredVector3Int operator -(ObscuredVector3Int a, ObscuredVector3Int b) - { - return a.InternalDecrypt() - b.InternalDecrypt(); - } - - public static ObscuredVector3Int operator -(Vector3Int a, ObscuredVector3Int b) - { - return a - b.InternalDecrypt(); - } - - public static ObscuredVector3Int operator -(ObscuredVector3Int a, Vector3Int b) - { - return a.InternalDecrypt() - b; - } - - public static ObscuredVector3Int operator *(ObscuredVector3Int a, int d) - { - return a.InternalDecrypt() * d; - } - - public static bool operator ==(ObscuredVector3Int lhs, ObscuredVector3Int rhs) - { - return lhs.InternalDecrypt() == rhs.InternalDecrypt(); - } - - public static bool operator ==(Vector3Int lhs, ObscuredVector3Int rhs) - { - return lhs == rhs.InternalDecrypt(); - } - - public static bool operator ==(ObscuredVector3Int lhs, Vector3Int rhs) - { - return lhs.InternalDecrypt() == rhs; - } - - public static bool operator !=(ObscuredVector3Int lhs, ObscuredVector3Int rhs) - { - return lhs.InternalDecrypt() != rhs.InternalDecrypt(); - } - - public static bool operator !=(Vector3Int lhs, ObscuredVector3Int rhs) - { - return lhs != rhs.InternalDecrypt(); - } - - public static bool operator !=(ObscuredVector3Int lhs, Vector3Int rhs) - { - return lhs.InternalDecrypt() != rhs; - } - - public override bool Equals(object other) - { - return other is ObscuredVector3Int o && Equals(o) || - other is Vector3Int r && Equals(r); - } - - public bool Equals(ObscuredVector3Int other) - { - return currentCryptoKey == other.currentCryptoKey ? hiddenValue.Equals(other.hiddenValue) : - InternalDecrypt().Equals(other.InternalDecrypt()); - } - - public bool Equals(Vector3Int other) - { - return InternalDecrypt().Equals(other); - } - - public override int GetHashCode() - { - return InternalDecrypt().GetHashCode(); - } - - public override string ToString() - { - return InternalDecrypt().ToString(); - } - - public string ToString(string format) - { - return InternalDecrypt().ToString(format); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.API.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.API.cs.meta deleted file mode 100644 index ac408b1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.API.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f398f8b21561437c9b36c3dc8770729b -timeCreated: 1679404297 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Editor.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Editor.cs deleted file mode 100644 index 00ea593..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Editor.cs +++ /dev/null @@ -1,22 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_EDITOR -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector3Int - { - internal bool IsDataValid - { - get - { - if (!inited || !fakeValueActive) return true; - return fakeValue == InternalDecrypt(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Editor.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Editor.cs.meta deleted file mode 100644 index bcdc005..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Editor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: b852214be1af49ca91066b605d494bc7 -timeCreated: 1667758305 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Raw.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Raw.cs deleted file mode 100644 index c0e7334..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Raw.cs +++ /dev/null @@ -1,56 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - public partial struct ObscuredVector3Int - { - /// - /// Used to store encrypted Vector3Int. - /// - [Serializable] - public struct RawEncryptedVector3Int : IEquatable - { - /// - /// Encrypted value - /// - public int x; - - /// - /// Encrypted value - /// - public int y; - - /// - /// Encrypted value - /// - public int z; - - public bool Equals(RawEncryptedVector3Int other) - { - return x == other.x && y == other.y && z == other.z; - } - - public override bool Equals(object obj) - { - return obj is RawEncryptedVector3Int other && Equals(other); - } - - public override int GetHashCode() - { - unchecked - { - var hashCode = x; - hashCode = (hashCode * 397) ^ y; - hashCode = (hashCode * 397) ^ z; - return hashCode; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Raw.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Raw.cs.meta deleted file mode 100644 index e46f752..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.Raw.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f2c722b1d3654eaca9326f80983c511f -timeCreated: 1679416889 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.cs deleted file mode 100644 index 398392a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.cs +++ /dev/null @@ -1,401 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.ObscuredTypes -{ - using System; - using UnityEngine; - using Utils; - using Detectors; - - /// - /// Use it instead of regular Vector3Int for any cheating-sensitive variables. - /// - /// \htmlonlyWARNING:\endhtmlonly Doesn't mimic regular type API, thus should be used with extra caution. Cast it to regular, not obscured type to work with regular APIs.
- /// Regular type is faster and memory wiser comparing to the obscured one!
- /// Feel free to use regular types for all short-term operations and calculations while keeping obscured type only at the long-term declaration (i.e. class field). - [Serializable] - public partial struct ObscuredVector3Int : IObscuredType - { - private static readonly Vector3Int Zero = Vector3Int.zero; - - [SerializeField] internal int currentCryptoKey; - [SerializeField] internal RawEncryptedVector3Int hiddenValue; - [SerializeField] internal Vector3Int fakeValue; - [SerializeField] internal bool fakeValueActive; - [SerializeField] internal bool inited; - - private ObscuredVector3Int(Vector3Int value) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(value, currentCryptoKey); - -#if UNITY_EDITOR - fakeValue = value; - fakeValueActive = true; -#else - var detectorRunning = ObscuredCheatingDetector.ExistsAndIsRunning; - fakeValue = detectorRunning ? value : Zero; - fakeValueActive = detectorRunning; -#endif - inited = true; - } - - /// - /// Mimics constructor of regular Vector3Int. - /// - /// X component of the vector - /// Y component of the vector - /// Z component of the vector - public ObscuredVector3Int(int x, int y, int z) - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(x, y, z, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue = new Vector3Int - { - x = x, - y = y, - z = z - }; - fakeValueActive = true; - } - else - { - fakeValue = Zero; - fakeValueActive = false; - } - - inited = true; - } - - public int x - { - get - { - var decrypted = ObscuredInt.Decrypt(hiddenValue.x, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue.x) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3Int)}\n" + - $"decrypted.x: {decrypted}\n" + - $"fakeValue.x: {fakeValue.x}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.x = ObscuredInt.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = value; - fakeValue.y = ObscuredInt.Decrypt(hiddenValue.y, currentCryptoKey); - fakeValue.z = ObscuredInt.Decrypt(hiddenValue.z, currentCryptoKey); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public int y - { - get - { - var decrypted = ObscuredInt.Decrypt(hiddenValue.y, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue.y) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3Int)}\n" + - $"decrypted.y: {decrypted}\n" + - $"fakeValue.y: {fakeValue.y}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.y = ObscuredInt.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = ObscuredInt.Decrypt(hiddenValue.x, currentCryptoKey); - fakeValue.y = value; - fakeValue.z = ObscuredInt.Decrypt(hiddenValue.z, currentCryptoKey); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public int z - { - get - { - var decrypted = ObscuredInt.Decrypt(hiddenValue.z, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue.z) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3Int)}\n" + - $"decrypted.z: {decrypted}\n" + - $"fakeValue.z: {fakeValue.z}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - return decrypted; - } - - set - { - hiddenValue.z = ObscuredInt.Encrypt(value, currentCryptoKey); - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValue.x = ObscuredInt.Decrypt(hiddenValue.x, currentCryptoKey); - fakeValue.y = ObscuredInt.Decrypt(hiddenValue.y, currentCryptoKey); - fakeValue.z = value; - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - } - - public int this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - case 2: - return z; - default: - throw new IndexOutOfRangeException("Invalid ObscuredVector3Int index!"); - } - } - set - { - switch (index) - { - case 0: - x = value; - break; - case 1: - y = value; - break; - case 2: - z = value; - break; - default: - throw new IndexOutOfRangeException("Invalid ObscuredVector3Int index!"); - } - } - } - - /// - /// Encrypts passed value using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector3Int Encrypt(Vector3Int value, int key) - { - return Encrypt(value.x, value.y, value.z, key); - } - - /// - /// Encrypts passed components using passed key. - /// - /// Key can be generated automatically using GenerateKey(). - /// \sa Decrypt(), GenerateKey() - public static RawEncryptedVector3Int Encrypt(int x, int y, int z, int key) - { - RawEncryptedVector3Int result; - result.x = ObscuredInt.Encrypt(x, key); - result.y = ObscuredInt.Encrypt(y, key); - result.z = ObscuredInt.Encrypt(z, key); - - return result; - } - - /// - /// Decrypts passed value you got from Encrypt() using same key. - /// - /// \sa Encrypt() - public static Vector3Int Decrypt(RawEncryptedVector3Int value, int key) - { - var result = new Vector3Int - { - x = ObscuredInt.Decrypt(value.x, key), - y = ObscuredInt.Decrypt(value.y, key), - z = ObscuredInt.Decrypt(value.z, key) - }; - - return result; - } - - /// - /// Creates and fills obscured variable with raw encrypted value previously got from GetEncrypted(). - /// - /// Literally does same job as SetEncrypted() but makes new instance instead of filling existing one, - /// making it easier to initialize new variables from saved encrypted values. - /// - /// Raw encrypted value you got from GetEncrypted(). - /// Encryption key you've got from GetEncrypted(). - /// New obscured variable initialized from specified encrypted value. - /// \sa GetEncrypted(), SetEncrypted() - public static ObscuredVector3Int FromEncrypted(RawEncryptedVector3Int encrypted, int key) - { - var instance = new ObscuredVector3Int(); - instance.SetEncrypted(encrypted, key); - return instance; - } - - /// - /// Generates random key. Used internally and can be used to generate key for manual Encrypt() calls. - /// - /// Key suitable for manual Encrypt() calls. - public static int GenerateKey() - { - return RandomUtils.GenerateIntKey(); - } - - /// - /// Allows to pick current obscured value as is. - /// - /// Encryption key needed to decrypt returned value. - /// Encrypted value as is. - /// Use it in conjunction with SetEncrypted().
- /// Useful for saving data in obscured state. - /// \sa FromEncrypted(), SetEncrypted() - public RawEncryptedVector3Int GetEncrypted(out int key) - { - if (!inited) - Init(); - - key = currentCryptoKey; - return hiddenValue; - } - - /// - /// Allows to explicitly set current obscured value. Crypto key should be same as when encrypted value was got with GetEncrypted(). - /// - /// Use it in conjunction with GetEncrypted().
- /// Useful for loading data stored in obscured state. - /// \sa FromEncrypted() - public void SetEncrypted(RawEncryptedVector3Int encrypted, int key) - { - inited = true; - hiddenValue = encrypted; - currentCryptoKey = key; - - if (ObscuredCheatingDetector.ExistsAndIsRunning) - { - fakeValueActive = false; - fakeValue = InternalDecrypt(); - fakeValueActive = true; - } - else - { - fakeValueActive = false; - } - } - - /// - /// Alternative to the type cast, use if you wish to get decrypted value - /// but can't or don't want to use cast to the regular type. - /// - /// Decrypted value. - public Vector3Int GetDecrypted() - { - return InternalDecrypt(); - } - - public void RandomizeCryptoKey() - { - var decrypted = InternalDecrypt(); - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(decrypted, currentCryptoKey); - } - - private Vector3Int InternalDecrypt() - { - if (!inited) - { - Init(); - return Zero; - } - - var decrypted = Decrypt(hiddenValue, currentCryptoKey); - - if (ObscuredCheatingDetector.ExistsAndIsRunning && fakeValueActive && decrypted != fakeValue) - { -#if ACTK_DETECTION_BACKLOGS - Debug.LogWarning(ObscuredCheatingDetector.LogPrefix + "Detection backlog:\n" + - $"type: {nameof(ObscuredVector3Int)}\n" + - $"decrypted: {decrypted}\n" + - $"fakeValue: {fakeValue}"); -#endif - ObscuredCheatingDetector.Instance.OnCheatingDetected(this, decrypted, fakeValue); - } - - return decrypted; - } - - private void Init() - { - currentCryptoKey = GenerateKey(); - hiddenValue = Encrypt(Zero, currentCryptoKey); - fakeValue = Zero; - fakeValueActive = false; - inited = true; - } - - //! @cond - - #region obsolete - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public static void SetNewCryptoKey(int newKey) {} - - [Obsolete("This API is redundant and does not perform any actions. It will be removed in future updates.")] - public void ApplyNewCryptoKey() {} - - [Obsolete("Please use new Encrypt(value, key) API instead.", true)] - public static RawEncryptedVector3Int Encrypt(Vector3Int value) { throw new Exception(); } - - [Obsolete("Please use new Decrypt(value, key) API instead.", true)] - public static Vector3Int Decrypt(RawEncryptedVector3Int value) { throw new Exception(); } - - [Obsolete("Please use new GetEncrypted(out key) API instead.", true)] - public RawEncryptedVector3Int GetEncrypted() { throw new Exception(); } - - [Obsolete("Please use new SetEncrypted(encrypted, key) API instead.", true)] - public void SetEncrypted(RawEncryptedVector3Int encrypted) {} - - #endregion - - //! @endcond - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.cs.meta deleted file mode 100644 index a37f8b4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/ObscuredTypes/ObscuredVector3Int.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 810949a528762374e94ad0834411b4af -timeCreated: 1508447606 -licenseType: Store -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage.meta deleted file mode 100644 index 90864eb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 53c58f29a336490ebb583a482b606a98 -timeCreated: 1556983137 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data.meta deleted file mode 100644 index 6ec9d56..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5c14e3b6c1f7467b839ce0462687948b -timeCreated: 1622839242 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums.meta deleted file mode 100644 index a3af63c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 97a37e2b444044c0af8884070c16fbe4 -timeCreated: 1623438923 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums/StorageDataType.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums/StorageDataType.cs deleted file mode 100644 index f0527aa..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums/StorageDataType.cs +++ /dev/null @@ -1,110 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - /// - /// Data types supported by ObscuredPrefs and ObscuredFilePrefs. - /// - public enum StorageDataType : byte - { - /// Reserved for unsupported types. - Unknown = 0, - - /// System.SByte - SByte = 1, - - /// System.Byte - Byte = 2, - - /// System.Int16 - Int16 = 3, - - /// System.UInt16 - UInt16 = 4, - - /// System.Int32 - Int32 = 5, - - /// System.UInt32 - UInt32 = 10, - - /// System.Int64 - Int64 = 30, - - /// System.UInt64 - UInt64 = 32, - - /// System.Char - Char = 33, - - /// System.Single - Single = 20, - - /// System.Double - Double = 25, - - /// System.Decimal - Decimal = 27, - - /// System.BigInteger - BigInteger = 28, - - /// System.Boolean - Boolean = 35, - - /// System.String - String = 15, - - /// System.DateTime - DateTime = 37, - - /// Array of System.Byte - ByteArray = 40, - - /// UnityEngine.Vector2 - Vector2 = 45, - - /// UnityEngine.Vector2Int - Vector2Int = 47, - - /// UnityEngine.Vector3 - Vector3 = 50, - - /// UnityEngine.Vector3Int - Vector3Int = 51, - - /// UnityEngine.Vector4 - Vector4 = 53, - - /// UnityEngine.Quaternion - Quaternion = 55, - - /// UnityEngine.Color - Color = 60, - - /// UnityEngine.Color32 - Color32 = 62, - - /// UnityEngine.Rect - Rect = 65, - - /// UnityEngine.RectInt - RectInt = 67, - - /// UnityEngine.RangeInt - RangeInt = 70, - - /// UnityEngine.Matrix4x4 - Matrix4x4 = 78, - - /// UnityEngine.Ray - Ray = 80, - - /// UnityEngine.Ray2D - Ray2D = 83, - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums/StorageDataType.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums/StorageDataType.cs.meta deleted file mode 100644 index 0c5e134..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/Enums/StorageDataType.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d8300df491e14951a99a01d75a2fd1a7 -timeCreated: 1622838527 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/ObscuredPrefsData.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/ObscuredPrefsData.cs deleted file mode 100644 index e7eb583..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/ObscuredPrefsData.cs +++ /dev/null @@ -1,23 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - - [Serializable] - internal struct ObscuredPrefsData - { - public StorageDataType type; - public byte[] data; - - public ObscuredPrefsData(StorageDataType type, byte[] data) - { - this.type = type; - this.data = data; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/ObscuredPrefsData.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/ObscuredPrefsData.cs.meta deleted file mode 100644 index 315885f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/ObscuredPrefsData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fa830384d38440d692d9bae231e91611 -timeCreated: 1622289230 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataConverter.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataConverter.cs deleted file mode 100644 index 5a027df..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataConverter.cs +++ /dev/null @@ -1,251 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using Common; - using UnityEngine; - using Utils; - - internal static class StorageDataConverter - { - public static Color32 BytesToColor32Legacy(byte[] data) - { - var encodedColor = BitConverter.ToUInt32(data, 0);; - var a = (byte)(encodedColor >> 24); - var r = (byte)(encodedColor >> 16); - var g = (byte)(encodedColor >> 8); - var b = (byte)(encodedColor >> 0); - return new Color32(r, g, b, a); - } - - public static ObscuredPrefsData GetPrefsDataFromValue(T value) - { - var storageType = StorageDataTypeClassifier.GetStorageDataType(); - var data = GetBytesFromValue(storageType, value); - return new ObscuredPrefsData(storageType, data); - } - - public static T GetValueFromPrefsData(ObscuredPrefsData prefsData) - { - return GetValueFromData(prefsData.type, prefsData.data); - } - - public static T GetValueFromData(byte[] data) - { - var type = StorageDataTypeClassifier.GetStorageDataType(); - return GetValueFromData(type, data); - } - - public static T GetValueFromData(StorageDataType type, byte[] data) - { - if (data == null || (data.Length == 0 && type != StorageDataType.String)) - { - ACTk.PrintExceptionForSupport($"Source data for value of type {typeof(T)} is empty!" + - "Can't convert it to the desired type, data will be lost."); - return default; - } - - try - { - return GetValueFromBytes(type, data); - } - catch (ArgumentOutOfRangeException e) - { - if (e.Message.StartsWith("Unknown")) - { - ACTk.PrintExceptionForSupport( - $"Something went wrong while converting bytes to specific type {typeof(T)}", e); - } - else - { - Debug.LogError( - $"{ACTk.LogPrefix}Something went wrong while converting bytes to specific type {typeof(T)}!\n" + - "Please make sure you are getting value with same type you set it previously, " + - $"e.g. load data using {nameof(ObscuredPrefs)}.{nameof(ObscuredPrefs.Get)}() if " + - $"you used {nameof(ObscuredPrefs)}.{nameof(ObscuredPrefs.Set)}() to save it!"); - Debug.LogException(e); - } - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport( - $"Something went wrong while converting bytes to specific type {typeof(T)}", e); - } - - return default; - } - - private static byte[] GetBytesFromValue(StorageDataType type, T value) - { - switch (type) - { - case StorageDataType.Unknown: - throw new UnsupportedDataTypeException(typeof(T)); - case StorageDataType.SByte: - return ConvertToBytes((sbyte)(object)value); - case StorageDataType.Byte: - return ConvertToBytes((byte)(object)value); - case StorageDataType.Int16: - return BitConverter.GetBytes((short)(object)value); - case StorageDataType.UInt16: - return BitConverter.GetBytes((ushort)(object)value); - case StorageDataType.Int32: - return BitConverter.GetBytes((int)(object)value); - case StorageDataType.UInt32: - return BitConverter.GetBytes((uint)(object)value); - case StorageDataType.Int64: - return BitConverter.GetBytes((long)(object)value); - case StorageDataType.UInt64: - return BitConverter.GetBytes((ulong)(object)value); - case StorageDataType.Char: - return BitConverter.GetBytes((char)(object)value); - case StorageDataType.Single: - return BitConverter.GetBytes((float)(object)value); - case StorageDataType.Double: - return BitConverter.GetBytes((double)(object)value); - case StorageDataType.Decimal: - return ConvertToBytes((decimal)(object)value); - case StorageDataType.BigInteger: - return ((System.Numerics.BigInteger)(object)value).ToByteArray(); - case StorageDataType.Boolean: - return BitConverter.GetBytes((bool)(object)value); - case StorageDataType.String: - return StringUtils.StringToBytes(value as string); - case StorageDataType.DateTime: - return BitConverter.GetBytes(((DateTime)(object)value).Ticks); - case StorageDataType.ByteArray: - return value as byte[]; - case StorageDataType.Vector2: - return ConvertToBytes((Vector2)(object)value); - case StorageDataType.Vector2Int: - return ConvertToBytes((Vector2Int)(object)value); - case StorageDataType.Vector3: - return ConvertToBytes((Vector3)(object)value); - case StorageDataType.Vector3Int: - return ConvertToBytes((Vector3Int)(object)value); - case StorageDataType.Vector4: - return ConvertToBytes((Vector4)(object)value); - case StorageDataType.Quaternion: - return ConvertToBytes((Quaternion)(object)value); - case StorageDataType.Color: - return ConvertToBytes((Color)(object)value); - case StorageDataType.Color32: - return ConvertToBytes((Color32)(object)value); - case StorageDataType.Rect: - return ConvertToBytes((Rect)(object)value); - case StorageDataType.RectInt: - return ConvertToBytes((RectInt)(object)value); - case StorageDataType.RangeInt: - return ConvertToBytes((RangeInt)(object)value); - case StorageDataType.Matrix4x4: - return ConvertToBytes((Matrix4x4)(object)value); - case StorageDataType.Ray: - return ConvertToBytes((Ray)(object)value); - case StorageDataType.Ray2D: - return ConvertToBytes((Ray2D)(object)value); - default: - throw new ArgumentOutOfRangeException(nameof(type), type, null); - } - } - - private static T GetValueFromBytes(StorageDataType type, byte[] data) - { - switch (type) - { - case StorageDataType.Unknown: - throw new UnsupportedDataTypeException(typeof(T)); - case StorageDataType.SByte: - return (T)(object)ConvertToValue(data); - case StorageDataType.Byte: - return (T)(object)ConvertToValue(data); - case StorageDataType.Int16: - return (T)(object)BitConverter.ToInt16(data, 0); - case StorageDataType.UInt16: - return (T)(object)BitConverter.ToUInt16(data, 0); - case StorageDataType.Int32: - return (T)(object)BitConverter.ToInt32(data, 0); - case StorageDataType.UInt32: - return (T)(object)BitConverter.ToUInt32(data, 0); - case StorageDataType.Single: - return (T)(object)BitConverter.ToSingle(data, 0); - case StorageDataType.Double: - return (T)(object)BitConverter.ToDouble(data, 0); - case StorageDataType.Decimal: - return (T)(object)ConvertToValue(data); - case StorageDataType.BigInteger: - return (T)(object)new System.Numerics.BigInteger(data); - case StorageDataType.Int64: - return (T)(object)BitConverter.ToInt64(data, 0); - case StorageDataType.UInt64: - return (T)(object)BitConverter.ToUInt64(data, 0); - case StorageDataType.Char: - return (T)(object)BitConverter.ToChar(data, 0); - case StorageDataType.Boolean: - return (T)(object)BitConverter.ToBoolean(data, 0); - case StorageDataType.String: - return (T)(object)StringUtils.BytesToString(data, 0, data.Length); - case StorageDataType.DateTime: - return (T)(object)new DateTime(BitConverter.ToInt64(data, 0)); - case StorageDataType.ByteArray: - return (T)(object)data; - case StorageDataType.Vector2: - return (T)(object)ConvertToValue(data); - case StorageDataType.Vector2Int: - return (T)(object)ConvertToValue(data); - case StorageDataType.Vector3: - return (T)(object)ConvertToValue(data); - case StorageDataType.Vector3Int: - return (T)(object)ConvertToValue(data); - case StorageDataType.Vector4: - return (T)(object)ConvertToValue(data); - case StorageDataType.Quaternion: - return (T)(object)ConvertToValue(data); - case StorageDataType.Color: - return (T)(object)ConvertToValue(data); - case StorageDataType.Color32: - return (T)(object)ConvertToValue(data); - case StorageDataType.Rect: - return (T)(object)ConvertToValue(data); - case StorageDataType.RectInt: - return (T)(object)ConvertToValue(data); - case StorageDataType.RangeInt: - return (T)(object)ConvertToValue(data); - case StorageDataType.Matrix4x4: - return (T)(object)ConvertToValue(data); - case StorageDataType.Ray: - return (T)(object)ConvertToValue(data); - case StorageDataType.Ray2D: - return (T)(object)ConvertToValue(data); - default: - throw new ArgumentOutOfRangeException(nameof(type), type, $"Unknown {nameof(StorageDataType)} {type}"); - } - } - - private static unsafe byte[] ConvertToBytes(T value) where T : unmanaged - { - var pointer = (byte*)&value; - - var result = new byte[sizeof(T)]; - for (var i = 0; i < sizeof(T); i++) - result[i] = pointer[i]; - - return result; - } - - private static unsafe T ConvertToValue(byte[] data) where T : unmanaged - { - var result = default(T); - var pointer = (byte*)&result; - - for (var i = 0; i < sizeof(T); i++) - pointer[i] = data[i]; - - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataConverter.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataConverter.cs.meta deleted file mode 100644 index 5b5d6c8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataConverter.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3a140fcdfc8c4dc0a88df806ce98058b -timeCreated: 1622839258 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataTypeClassifier.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataTypeClassifier.cs deleted file mode 100644 index 3868a1b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataTypeClassifier.cs +++ /dev/null @@ -1,86 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using UnityEngine; - - internal static class StorageDataTypeClassifier - { - private static readonly Type SByteType = typeof(sbyte); - private static readonly Type ByteType = typeof(byte); - private static readonly Type ShortType = typeof(short); - private static readonly Type UShortType = typeof(ushort); - private static readonly Type IntType = typeof(int); - private static readonly Type UIntType = typeof(uint); - private static readonly Type LongType = typeof(long); - private static readonly Type ULongType = typeof(ulong); - private static readonly Type CharType = typeof(char); - private static readonly Type StringType = typeof(string); - private static readonly Type FloatType = typeof(float); - private static readonly Type DoubleType = typeof(double); - private static readonly Type DecimalType = typeof(decimal); - private static readonly Type BigInteger = typeof(System.Numerics.BigInteger); - private static readonly Type BoolType = typeof(bool); - private static readonly Type DateTimeType = typeof(DateTime); - private static readonly Type ByteArray = typeof(byte[]); - - private static readonly Type Vector2Type = typeof(Vector2); - private static readonly Type Vector2IntType = typeof(Vector2Int); - private static readonly Type Vector3Type = typeof(Vector3); - private static readonly Type Vector3IntType = typeof(Vector3Int); - private static readonly Type Vector4Type = typeof(Vector4); - private static readonly Type QuaternionType = typeof(Quaternion); - private static readonly Type ColorType = typeof(Color); - private static readonly Type Color32Type = typeof(Color32); - private static readonly Type RectType = typeof(Rect); - private static readonly Type RectIntType = typeof(RectInt); - private static readonly Type RangeIntType = typeof(RangeInt); - private static readonly Type Matrix4x4Type = typeof(Matrix4x4); - private static readonly Type RayType = typeof(Ray); - private static readonly Type Ray2DType = typeof(Ray2D); - - public static StorageDataType GetStorageDataType() - { - var genericType = typeof(T); - if (genericType == SByteType) return StorageDataType.SByte; - if (genericType == ByteType) return StorageDataType.Byte; - if (genericType == ShortType) return StorageDataType.Int16; - if (genericType == UShortType) return StorageDataType.UInt16; - if (genericType == IntType) return StorageDataType.Int32; - if (genericType == UIntType) return StorageDataType.UInt32; - if (genericType == LongType) return StorageDataType.Int64; - if (genericType == ULongType) return StorageDataType.UInt64; - if (genericType == CharType) return StorageDataType.Char; - if (genericType == FloatType) return StorageDataType.Single; - if (genericType == DoubleType) return StorageDataType.Double; - if (genericType == DecimalType) return StorageDataType.Decimal; - if (genericType == BigInteger) return StorageDataType.BigInteger; - if (genericType == BoolType) return StorageDataType.Boolean; - if (genericType == StringType) return StorageDataType.String; - if (genericType == DateTimeType) return StorageDataType.DateTime; - if (genericType == ByteArray) return StorageDataType.ByteArray; - - if (genericType == Vector2Type) return StorageDataType.Vector2; - if (genericType == Vector2IntType) return StorageDataType.Vector2Int; - if (genericType == Vector3Type) return StorageDataType.Vector3; - if (genericType == Vector3IntType) return StorageDataType.Vector3Int; - if (genericType == Vector4Type) return StorageDataType.Vector4; - if (genericType == QuaternionType) return StorageDataType.Quaternion; - if (genericType == ColorType) return StorageDataType.Color; - if (genericType == Color32Type) return StorageDataType.Color32; - if (genericType == RectType) return StorageDataType.Rect; - if (genericType == RectIntType) return StorageDataType.RectInt; - if (genericType == RangeIntType) return StorageDataType.RangeInt; - if (genericType == Matrix4x4Type) return StorageDataType.Matrix4x4; - if (genericType == RayType) return StorageDataType.Ray; - if (genericType == Ray2DType) return StorageDataType.Ray2D; - - return StorageDataType.Unknown; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataTypeClassifier.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataTypeClassifier.cs.meta deleted file mode 100644 index 1c54666..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/StorageDataTypeClassifier.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e9921377b0f747debccebc031f0c55d3 -timeCreated: 1623439028 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/UnsupportedDataTypeException.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/UnsupportedDataTypeException.cs deleted file mode 100644 index ac5bce8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/UnsupportedDataTypeException.cs +++ /dev/null @@ -1,16 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - - internal class UnsupportedDataTypeException : Exception - { - public UnsupportedDataTypeException(Type type):base($"Unsupported data type: {type}!") - { } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/UnsupportedDataTypeException.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/UnsupportedDataTypeException.cs.meta deleted file mode 100644 index 2efbdde..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Data/UnsupportedDataTypeException.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bb9d8ea9d58e42a083882e4981608519 -timeCreated: 1623416321 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock.meta deleted file mode 100644 index 618dbf3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 342c3ac4daf94102a9818315aabce193 -timeCreated: 1622720390 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceIdHolder.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceIdHolder.cs deleted file mode 100644 index a4944e1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceIdHolder.cs +++ /dev/null @@ -1,136 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if !UNITY_WEBGL -#define ACTK_ASYNC -#endif - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using Common; - using UnityEngine; - using Utils; - - /// - /// Used by ObscuredPrefs and ObscuredFile for the device lock feature. - /// - public class DeviceIdHolder - { - internal delegate byte[] HashCheckSumModifierDelegate(string input); - - private static string deviceId; - - /// - /// Allows getting current device ID or setting custom device ID to lock data to the device. - /// - /// \htmlonlyWARNING:\endhtmlonly All data saved with previous device ID will be considered foreign! - public static string DeviceId - { - get - { - if (string.IsNullOrEmpty(deviceId)) - { - deviceId = GetDeviceId(); - } - return deviceId; - } - - set => deviceId = value; - } - - /// - /// Allows forcing device id obtaining on demand. Otherwise, it will be obtained automatically on first usage. - /// - /// Device id obtaining process may be noticeably slow when called first time on some devices.
- /// This method allows you to force this process at comfortable time (while splash screen is showing for example).

- /// Call this if you going to use ObscuredFile or ObscuredFilePrefs from non-main thread while using - /// Lock To Device feature without custom #DeviceId to avoid exception due to Unity API access - /// from non-main thread. - public static void ForceLockToDeviceInit() - { - if (string.IsNullOrEmpty(deviceId)) - { - deviceId = GetDeviceId(); - } - else - { - Debug.LogWarning(ACTk.LogPrefix + "ForceLockToDeviceInit() is called, but device ID is already obtained!"); - } - } - - private static string GetDeviceId() - { - var id = string.Empty; -#if !ACTK_PREVENT_READ_PHONE_STATE - if (string.IsNullOrEmpty(id)) - id = UnityApiResultsHolder.GetDeviceUniqueIdentifier(); -#else - Debug.LogError(ACTk.LogPrefix + "Looks like you forced ACTK_PREVENT_READ_PHONE_STATE flag, but still use LockToDevice feature. It will work incorrectly!"); -#endif - return id; - } - - private readonly uint deviceIdHashSeed; - private uint deviceIdHash; - private HashCheckSumModifierDelegate hashCheckSumModifierDelegate; - - internal DeviceIdHolder(uint deviceIdHashSeed = 0) - { - this.deviceIdHashSeed = deviceIdHashSeed; - } - - internal bool MigratingFromACTkV1 { get; private set; } - - internal uint DeviceIdHash - { - get - { - if (deviceIdHash == 0) - { - deviceIdHash = CalculateChecksum(DeviceId); - } - return deviceIdHash; - } - } - - internal void SetHashCheckSumModifierDelegate(HashCheckSumModifierDelegate method) - { - hashCheckSumModifierDelegate = method; - } - - internal void SetMigrationMode(bool enabled) - { - MigratingFromACTkV1 = enabled; - ResetHash(); // to force hash recalculation - } - - internal void ResetHash() - { - deviceIdHash = 0; - } - - private uint CalculateChecksum(string input) - { - if (string.IsNullOrEmpty(input)) - throw new ArgumentNullException(nameof(input)); - - byte[] inputBytes; - - if (hashCheckSumModifierDelegate != null) - { - inputBytes = hashCheckSumModifierDelegate(input); - } - else - { - inputBytes = StringUtils.StringToBytes(input); - } - - var hash = xxHash.CalculateHash(inputBytes, inputBytes.Length, deviceIdHashSeed); - return hash; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceIdHolder.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceIdHolder.cs.meta deleted file mode 100644 index b366c30..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceIdHolder.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 71bc8753816c4dd487c486884a613af3 -timeCreated: 1620332008 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockLevel.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockLevel.cs deleted file mode 100644 index cc26f5d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockLevel.cs +++ /dev/null @@ -1,40 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - /// Used to specify level of the device lock feature strictness. - /// Use it to prevent cheating via 100% game saves sharing or sharing purchased in-app items for example.
- /// - /// Relies on SystemInfo.deviceUniqueIdentifier when not using custom DeviceIdHolder.DeviceId.
- /// Please note, deviceUniqueIdentifier may change in some rare cases, so one day all locked data may became inaccessible on same device.
- /// - /// \htmlonlyWARNING:\endhtmlonly On iOS use at your peril with default DeviceId! There is no reliable way to get persistent device ID on iOS. So avoid using it or use in conjunction with DeviceIdHolder.DeviceId (see below).
- /// \htmlonlyNOTE #1:\endhtmlonly On iOS it tries to receive vendorIdentifier in first place, to avoid device id change while updating from iOS6 to iOS7. It leads to device ID change while updating from iOS5, but such case appears much rarer.
- /// \htmlonlyNOTE #2:\endhtmlonly You may use own device id via DeviceIdHolder.DeviceId property to make it more reliable and predictable. Use it to lock saves to the specified email for example.
- /// \htmlonlyNOTE #3:\endhtmlonly Main thread may lock up for a noticeable time while obtaining device ID first time on some devices. Consider using DeviceIdHolder.ForceLockToDeviceInit() at loading screen or other desirable stall moment of your app to prevent undesirable behavior in such cases. - /// \sa DeviceIdHolder.ForceLockToDeviceInit(), DeviceIdHolder.DeviceId, ObscuredPrefs.DeviceLockSettings, ObscuredFilePrefs.DeviceLockSettings, DeviceLockSettings - public enum DeviceLockLevel : byte - { - /// - /// Both locked and not locked to any device data can be read and does not locks saves to the current device. - /// - None, - - /// - /// Does locks to the current device and still allows reading not locked data - /// (useful when you decided to lock your saves in one of app updates and wish to keep user data). - /// - Soft, - - /// - /// Does locks to the current device and reads only locked to the current device data. - /// This is a preferred mode, but it should be enabled right from the first app release. - /// If you released an app without data lock consider using Soft lock or any previously saved data will not be accessible. - /// - Strict - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockLevel.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockLevel.cs.meta deleted file mode 100644 index 9fa4527..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockLevel.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 173fabcb544d436ca35870420eb58008 -timeCreated: 1620064587 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockSettings.cs deleted file mode 100644 index 423b75e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockSettings.cs +++ /dev/null @@ -1,37 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - /// - /// Controls Device Lock feature settings. - /// - public class DeviceLockSettings - { - /// - /// Allows locking saved data to the current device. - /// - /// Read more in #DeviceLockLevel description. - /// \sa Sensitivity - public DeviceLockLevel Level { get; set; } - - /// - /// Controls device lock tampering detection sensitivity. - /// - /// Read more in #DeviceLockTamperingSensitivity description. - /// \sa Level - public DeviceLockTamperingSensitivity Sensitivity { get; set; } - - /// - /// Creates instance with custom settings. - /// - public DeviceLockSettings(DeviceLockLevel level = DeviceLockLevel.None, DeviceLockTamperingSensitivity sensitivity = DeviceLockTamperingSensitivity.Normal) - { - Level = level; - Sensitivity = sensitivity; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockSettings.cs.meta deleted file mode 100644 index 92ceffc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3e7cc245e34a4e31864afbefb70d9c98 -timeCreated: 1622720444 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockTamperingSensitivity.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockTamperingSensitivity.cs deleted file mode 100644 index c148d79..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockTamperingSensitivity.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - /// - /// Controls device lock tampering sensitivity - from fully functional to full tampering ignorance. - /// Emits DataFromAnotherDeviceDetected event when detecting data from another device. - /// - /// \sa DeviceLockLevel, ObscuredFile.DataFromAnotherDeviceDetected, ObscuredFilePrefs.DataFromAnotherDeviceDetected, ObscuredPrefs.DataFromAnotherDeviceDetected - public enum DeviceLockTamperingSensitivity : byte - { - /// - /// Allows reading data from another devices without detection. - /// - Disabled, - - /// - /// Allows reading data from another devices and emits DataFromAnotherDeviceDetected event. - /// - Low, - - /// - /// Prevents reading data from another device and emits DataFromAnotherDeviceDetected event. - /// - Normal - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockTamperingSensitivity.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockTamperingSensitivity.cs.meta deleted file mode 100644 index 87ca861..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/DeviceLock/DeviceLockTamperingSensitivity.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a3df350ee20f4958babae3d07e3661a1 -timeCreated: 1620929044 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions.meta deleted file mode 100644 index b85aedc..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: aeeaf650d39d4346a2bdef4f13139d22 -timeCreated: 1630166180 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/DeviceUniqueIdentifierException.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/DeviceUniqueIdentifierException.cs deleted file mode 100644 index aceafdf..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/DeviceUniqueIdentifierException.cs +++ /dev/null @@ -1,19 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using Common; - using UnityEngine; - - internal class DeviceUniqueIdentifierException : BackgroundThreadAccessException - { - public DeviceUniqueIdentifierException() : base($"{nameof(SystemInfo)}." + - $"{nameof(SystemInfo.deviceUniqueIdentifier)}") - { - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/DeviceUniqueIdentifierException.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/DeviceUniqueIdentifierException.cs.meta deleted file mode 100644 index 80aae91..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/DeviceUniqueIdentifierException.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4ddd915e96d44240b4dcb9c159cbef7d -timeCreated: 1630166204 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/PersistentDataPathException.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/PersistentDataPathException.cs deleted file mode 100644 index 7a414eb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/PersistentDataPathException.cs +++ /dev/null @@ -1,19 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using Common; - using UnityEngine; - - internal class PersistentDataPathException : BackgroundThreadAccessException - { - public PersistentDataPathException() : base($"{nameof(Application)}." + - $"{nameof(Application.persistentDataPath)}") - { - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/PersistentDataPathException.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/PersistentDataPathException.cs.meta deleted file mode 100644 index c0bd0f8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/PersistentDataPathException.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fdf0055c31634e909d8fa139c4ed3466 -timeCreated: 1630167247 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/VendorIdentifierException.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/VendorIdentifierException.cs deleted file mode 100644 index 6b8d246..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/VendorIdentifierException.cs +++ /dev/null @@ -1,24 +0,0 @@ -#if UNITY_IPHONE - -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using Common; - - internal class VendorIdentifierException : BackgroundThreadAccessException - { - public VendorIdentifierException() : base($"{nameof(UnityEngine)}." + - $"{nameof(UnityEngine.iOS)}." + - $"{nameof(UnityEngine.iOS.Device)}." + - $"{nameof(UnityEngine.iOS.Device.vendorIdentifier)}") - { - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/VendorIdentifierException.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/VendorIdentifierException.cs.meta deleted file mode 100644 index f8c8589..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Exceptions/VendorIdentifierException.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: aebcb2d846cd4234a5dbf58722d0a5f9 -timeCreated: 1631283157 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File.meta deleted file mode 100644 index ede4d53..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e4f21e7e364d6e44f9843807ff7a5af8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFile.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFile.cs deleted file mode 100644 index d0c6320..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFile.cs +++ /dev/null @@ -1,425 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_WEBGL && !UNITY_EDITOR -#define ACTK_WEBGL_BUILD -#endif - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using System.IO; - using System.Security.Cryptography; - using Common; - using UnityEngine; - - /// - /// Allows saving any binary data into the file either with or without encryption, - /// with or without device locking and always with integrity check to make sure file is genuine. - /// - /// Uses File IO which may cause main thread hiccups when operating with big amounts of data thus - /// it's recommended to use it from background thread or at the stall moments of your app - /// (like loading screens etc).
- /// Please call DeviceIdHolder.ForceLockToDeviceInit() before accessing this class from background thread if you are using Device Lock feature without custom DeviceID. - public class ObscuredFile - { -#if ACTK_WEBGL_BUILD - [System.Runtime.InteropServices.DllImport("__Internal")] - private static extern void FlushFileSystem(); -#endif - - private const string LogPrefix = ACTk.LogPrefix + nameof(ObscuredFile) + ": "; - - /// - /// Filename used by default, if other name or path was not specified in constructor. - /// - public const string DefaultFileName = "actkfile"; - - private static readonly DeviceIdHolder DeviceIdHolder = new DeviceIdHolder(24052013); - - /// - /// Fires when saved data tampering detected. Will not fire when data is damaged and not readable. - /// - public event Action NotGenuineDataDetected; - - /// - /// Fires when saved data from some other device detected. - /// - /// May be helpful to ban potential cheaters, trying to use someone's purchased in-app goods for example.
- /// \htmlonlyNOTE:\endhtmlonly Will fire if same device ID has - /// changed (pretty rare case though). Read more at #DeviceLockLevel. - public event Action DataFromAnotherDeviceDetected; - - /// - /// Allows reading current settings. - /// - public IObscuredFileSettings CurrentSettings { get; } - - /// - /// Returns true if file at #FilePath physically exists on disk. - /// - public bool FileExists => File.Exists(FilePath); - - /// - /// Returns path to the file. - /// It's always not empty and valid even if file was not saved to the physical disk yet. - /// - public string FilePath { get; } - - [System.Diagnostics.Conditional("ACTK_DEV_LOGS")] - private static void DevLog(string log) - { -#if UNITY_EDITOR - Debug.Log("[DEVLOG] " + LogPrefix + log); -#else - Debug.Log("[DEVLOG] " + LogPrefix + log); -#endif - } - - /// - /// Creates instance with file name set to #DefaultFileName and default ObscuredFileSettings. - /// - public ObscuredFile() : this(DefaultFileName, new ObscuredFileSettings()) { } - - /// - /// Creates instance with specified file name and default ObscuredFileSettings. - /// - /// Custom file name to place at ObscuredFileLocation.PersistentData. - public ObscuredFile(string fileName) : this(fileName, new ObscuredFileSettings()) { } - - /// - /// Creates instance with file name set to #DefaultFileName and custom specific settings. - /// - /// Custom settings to use with this instance. - public ObscuredFile(ObscuredFileSettings settings) : this(DefaultFileName, settings) { } - - /// - /// Creates instance with specified file name or file path and custom specific settings. - /// - /// File path if using ObscuredFileLocation.Custom, otherwise represents file name to use with set #ObscuredFileLocation kind. - /// Custom settings to use with this instance. - public ObscuredFile(string fileNameOrPath, IObscuredFileSettings settings) - { - CurrentSettings = settings; - FilePath = ConstructFilePath(fileNameOrPath); - } - - /// - /// Deletes physical file assigned with this instance. Does nothing if file does not exists. - /// - public void Delete() - { - if (!FileExists) - return; - - File.Delete(FilePath); -#if ACTK_WEBGL_BUILD - FlushFileSystem(); -#endif - } - - /// - /// Writes passed data to the physical file on disk. - /// Consider calling from background thread for the large data amount. - /// - /// Custom byte array to write. - /// Operation result. - public ObscuredFileWriteResult WriteAllBytes(byte[] data) - { - return WriteAllBytesInternal(data); - } - - /// - /// Reads all bytes from the physical file on disk. - /// Consider calling from background thread for the large data amount. - /// - /// Operation result structure allowing both to get read data and - /// figure out possible violations and errors if data could not be read for some reason. - public ObscuredFileReadResult ReadAllBytes() - { - return ReadAllBytesInternal(); - } - - private ObscuredFileReadResult ReadAllBytesInternal() - { - byte[] data; - var dataIsNotGenuine = false; - var dataFromAnotherDevice = false; - - try - { - if (!File.Exists(FilePath)) - { - Debug.LogError($"{LogPrefix}File {FilePath} does not exists!"); - return ObscuredFileReadResult.FromError(ObscuredFileErrorCode.FileNotFound); - } - - using (var output = new MemoryStream()) - { - uint hash; - uint actualHash = 0; - - using (var reader = File.Open(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) - { - // getting saved file hash - hash = ObscuredFileCrypto.ReadHash(reader); - - // decrypting rest of the file - ObscuredFileCrypto.Decrypt(reader, output, CurrentSettings.EncryptionSettings); - - if (CurrentSettings.ValidateDataIntegrity) - actualHash = ObscuredFileCrypto.CalculateHash(output); - } - - DevLog("Hashes\n" + - $"Hash from file: {hash}\n" + - $"Calculated hash: {actualHash}\n" + - $"Data integrity validation: {CurrentSettings.ValidateDataIntegrity}"); - - // read file header and exit if it's damaged - var header = ReadHeader(output); - if (!header.IsValid()) - { - Debug.LogError($"{LogPrefix}Header is invalid. Looks like data is damaged, can't read it properly!"); - return ObscuredFileReadResult.FromError(ObscuredFileErrorCode.FileDamaged); - } - - if (CurrentSettings.ValidateDataIntegrity) - { - // it's important to check hashes after header consistency check - // to avoid false positives due to real data damage - dataIsNotGenuine = hash != actualHash; - if (dataIsNotGenuine) - { - NotGenuineDataDetected?.Invoke(); - } - } - - var readVersion = header.Version; - var readObscurationMode = header.ObscurationMode; - var savedDeviceIdHash = ObscuredFileCrypto.ReadHash(output); - - DevLog("Read file header:\n" + - $"Format version: {readVersion}\n" + - $"{nameof(ObscurationMode)}: {readObscurationMode}\n" + - $"Device Id hash: {savedDeviceIdHash}"); - - DevLog("Current encryption settings:\n" + - $"{nameof(DeviceLockSettings.Level)}: {CurrentSettings.DeviceLockSettings.Level}\n" + - $"{nameof(DeviceLockSettings.Sensitivity)}: {CurrentSettings.DeviceLockSettings.Sensitivity}\n" + - $"{nameof(ObscurationMode)}: {CurrentSettings.EncryptionSettings.ObscurationMode}"); - - if (CurrentSettings.DeviceLockSettings.Level != DeviceLockLevel.None) - { - var currentDeviceIdHash = DeviceIdHolder.DeviceIdHash; - - DevLog("Device hashes:\n" + - $"Device Id hash: {savedDeviceIdHash}\n" + - $"Current Device Id hash: {currentDeviceIdHash}"); - - var savedDataIsLocked = savedDeviceIdHash != 0; - dataFromAnotherDevice = savedDataIsLocked && savedDeviceIdHash != currentDeviceIdHash; - - DevLog($"Data locked to any device: {savedDataIsLocked}"); - DevLog($"Data from another device: {dataFromAnotherDevice}"); - - if (savedDataIsLocked) - { - if (dataFromAnotherDevice) - { - switch (CurrentSettings.DeviceLockSettings.Sensitivity) - { - case DeviceLockTamperingSensitivity.Disabled: - break; - case DeviceLockTamperingSensitivity.Low: - DataFromAnotherDeviceDetected?.Invoke(); - break; - case DeviceLockTamperingSensitivity.Normal: - DataFromAnotherDeviceDetected?.Invoke(); - return new ObscuredFileReadResult(null, dataIsNotGenuine, true); - default: - throw new ArgumentOutOfRangeException(); - } - } - } - else - { - if (CurrentSettings.DeviceLockSettings.Level == DeviceLockLevel.Strict) - { - Debug.LogError($"{LogPrefix}Can't read data since it is not locked to any device but current {nameof(DeviceLockLevel)} is set to {nameof(DeviceLockLevel.Strict)}."); - return ObscuredFileReadResult.FromError(ObscuredFileErrorCode.DataIsNotLocked); - } - } - } - - var dataLength = output.Length - output.Position; - data = new byte[dataLength]; - var dataRead = output.Read(data, 0, (int)dataLength); -#if DEBUG - if (dataRead != dataLength) - Debug.LogWarning($"{LogPrefix}Less data read ({dataRead} then requested ({dataLength})!"); -#endif - DevLog($"Loaded data is genuine: {!dataIsNotGenuine}"); - } - } - catch (DeviceUniqueIdentifierException e) - { - Debug.LogError($"{LogPrefix}Please make sure to call " + - $"{nameof(CodeStage.AntiCheat.Storage.DeviceIdHolder)}.{nameof(DeviceIdHolder.ForceLockToDeviceInit)}() " + - $"or {nameof(UnityApiResultsHolder)}.{nameof(UnityApiResultsHolder.InitForAsyncUsage)}(true) " + - $"before using {nameof(ObscuredFile)} or {nameof(ObscuredFilePrefs)} from async context " + - $"with Lock To Device feature enabled while keeping default " + - $"{nameof(CodeStage.AntiCheat.Storage.DeviceIdHolder)}.{nameof(DeviceIdHolder.DeviceId)}!"); - return ObscuredFileReadResult.FromError(e); - } - catch (CryptographicException e) - { - Debug.LogError($"{LogPrefix}Couldn't read bytes because of {nameof(CryptographicException)}! " + - $"Are you trying to read plain file with {nameof(ObscurationMode)}.{nameof(ObscurationMode.Encrypted)} or vice versa?"); - Debug.LogException(e); - return ObscuredFileReadResult.FromError(e); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Unexpected exception occured!", LogPrefix, e); - return ObscuredFileReadResult.FromError(e); - } - - return new ObscuredFileReadResult(data, dataIsNotGenuine, dataFromAnotherDevice); - } - - private ObscuredFileHeader ReadHeader(Stream output) - { - output.Position = 0; - - var result = new ObscuredFileHeader(); - result.ReadFrom(output); - return result; - } - - private ObscuredFileWriteResult WriteAllBytesInternal(byte[] data) - { - try - { - using (var memory = new MemoryStream()) - { - WriteHeader(memory); - ApplyDeviceLockIfNeeded(memory, CurrentSettings.DeviceLockSettings.Level); - memory.Write(data, 0, data.Length); - using (var writer = File.Open(FilePath, FileMode.Create, FileAccess.Write, FileShare.None)) - { - uint hash = 0; - - if (CurrentSettings.ValidateDataIntegrity) - hash = ObscuredFileCrypto.CalculateHash(memory); - - DevLog($"Writing file hash: {hash}\n" + - $"Data integrity validation: {CurrentSettings.ValidateDataIntegrity}"); - ObscuredFileCrypto.WriteHash(writer, hash); - ObscuredFileCrypto.Encrypt(memory, writer, CurrentSettings.EncryptionSettings); - } -#if ACTK_WEBGL_BUILD - FlushFileSystem(); -#endif - } - } - catch (DeviceUniqueIdentifierException e) - { - Debug.LogError($"{LogPrefix}Please make sure to call " + - $"{nameof(CodeStage.AntiCheat.Storage.DeviceIdHolder)}.{nameof(DeviceIdHolder.ForceLockToDeviceInit)}() " + - $"or {nameof(UnityApiResultsHolder)}.{nameof(UnityApiResultsHolder.InitForAsyncUsage)}(true) " + - $"before using {nameof(ObscuredFile)} or {nameof(ObscuredFilePrefs)} from async context " + - $"with Lock To Device feature enabled while keeping default " + - $"{nameof(CodeStage.AntiCheat.Storage.DeviceIdHolder)}.{nameof(DeviceIdHolder.DeviceId)}!"); - return ObscuredFileWriteResult.FromError(e); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Unexpected exception occured!", LogPrefix, e); - return ObscuredFileWriteResult.FromError(e); - } - - return new ObscuredFileWriteResult(ObscuredFileErrorCode.NoError); - } - - private void WriteHeader(Stream memory) - { - ObscuredFileHeader.WriteTo(memory, CurrentSettings.EncryptionSettings.ObscurationMode); - } - - private void ApplyDeviceLockIfNeeded(Stream writer, DeviceLockLevel deviceLockLevel) - { - var hash = deviceLockLevel == DeviceLockLevel.None ? 0 : DeviceIdHolder.DeviceIdHash; - DevLog($"Writing device id hash: {hash}"); - ObscuredFileCrypto.WriteHash(writer, hash); - } - - private string ConstructFilePath(string path) - { - string filePath; - if (!Path.HasExtension(path)) - path = Path.ChangeExtension(path, "actk"); - - var isRooted = Path.IsPathRooted(path); - var locationKind = CurrentSettings.LocationKind; - - if (isRooted && locationKind == ObscuredFileLocation.PersistentData) - { - Debug.LogWarning($"Looks like you pass rooted path '{path}' while using default {nameof(ObscuredFileLocation.PersistentData)} {nameof(CurrentSettings.LocationKind)} setting\n" + - $"Using {nameof(ObscuredFileLocation)}.{nameof(ObscuredFileLocation.Custom)} instead!"); - locationKind = ObscuredFileLocation.Custom; - } - - try - { - switch (locationKind) - { - case ObscuredFileLocation.PersistentData: - { - filePath = Path.GetFullPath(Path.Combine(UnityApiResultsHolder.GetPersistentDataPath(), path)); - break; - } - case ObscuredFileLocation.Custom: - { - filePath = Path.GetFullPath(path); - -#if UNITY_ANDROID || UNITY_WEBGL - var streamingPath = Path.GetFullPath(Application.streamingAssetsPath); - if (filePath.StartsWith(streamingPath, StringComparison.InvariantCulture)) - { - var log = $"{LogPrefix}Can't access StreamingAssets data at the " + - $"{filePath} on " + - $"{nameof(RuntimePlatform.Android)} and {nameof(RuntimePlatform.WebGLPlayer)} platforms!\n" + - "Consider moving data to the supported location first. " + - "See 'Troubleshooting' in User Manual for more details."; - #if UNITY_EDITOR - Debug.LogWarning(log); - #else - Debug.LogError(log); - #endif - } -#endif - - break; - } - default: - throw new ArgumentOutOfRangeException(); - } - } - catch (PersistentDataPathException) - { - Debug.LogError($"{LogPrefix}Please make sure to call " + - $"{nameof(UnityApiResultsHolder)}.{nameof(UnityApiResultsHolder.InitForAsyncUsage)}() " + - $"before using {nameof(ObscuredFile)} or " + - $"{nameof(ObscuredFilePrefs)} from async context with " + - $"{nameof(ObscuredFileLocation)}.{nameof(ObscuredFileLocation.PersistentData)} {nameof(ObscuredFileSettings.LocationKind)}!"); - filePath = path; - } - - return filePath; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFile.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFile.cs.meta deleted file mode 100644 index b733fe1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 87bcb44861ea5794c91502625ccf2b42 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileCrypto.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileCrypto.cs deleted file mode 100644 index 7da8726..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileCrypto.cs +++ /dev/null @@ -1,118 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using System.IO; - using System.Security.Cryptography; - using Utils; - - internal static class ObscuredFileCrypto - { - private const int HashSize = sizeof(uint); - private const int BufferSize = 81920; - - private static byte[] copyStreamBuffer; - - public static void Encrypt(Stream input, Stream output, EncryptionSettings settings) - { - EncryptInternal(input, output, settings); - } - - public static void Decrypt(Stream input, Stream output, EncryptionSettings settings) - { - DecryptInternal(input, output, settings); - } - - internal static uint CalculateHash(Stream input) - { - return CalculateHashInternal(input); - } - - internal static uint ReadHash(Stream input) - { - var hashBuffer = new byte[HashSize]; - input.Read(hashBuffer, 0, HashSize); - return BytesToHash(hashBuffer); - } - - internal static void WriteHash(Stream writer, uint hash) - { - writer.Write(HashToBytes(hash), 0, HashSize); - } - - - private static uint CalculateHashInternal(Stream input) - { - var count = input.Length; - var hash = xxHash.CalculateHash(input, count, 1613878765); - return hash; - } - - private static void EncryptInternal(Stream input, Stream output, EncryptionSettings settings) - { - if (settings.ObscurationMode == ObscurationMode.Encrypted) - { -#if ACTK_US_EXPORT_COMPATIBLE - CryptoUtils.EncryptRc2(input, output, settings.Password); -#else - CryptoUtils.EncryptAes(input, output, settings.Password); -#endif - } - else - { - input.CopyTo(output, BufferSize); - } - } - - private static byte[] HashToBytes(uint hash) - { - return BitConverter.GetBytes(hash ^ 2122232456); - } - - private static uint BytesToHash(byte[] hash) - { - return BitConverter.ToUInt32(hash, 0) ^ 2122232456; - } - - private static void DecryptInternal(Stream input, Stream output, EncryptionSettings settings) - { - var cryptoKey = settings.Password; - - if (settings.ObscurationMode == ObscurationMode.Encrypted) - { - var position = input.Position; - -#if ACTK_US_EXPORT_COMPATIBLE - try - { - CryptoUtils.DecryptRc2(input, output, cryptoKey); - } - catch (CryptographicException) - { - input.Position = position; - CryptoUtils.DecryptAes(input, output, cryptoKey); - } -#else - try - { - CryptoUtils.DecryptAes(input, output, cryptoKey); - } - catch (CryptographicException) - { - input.Position = position; - CryptoUtils.DecryptRc2(input, output, cryptoKey); - } -#endif - } - else - { - input.CopyTo(output, BufferSize); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileCrypto.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileCrypto.cs.meta deleted file mode 100644 index 07e919c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileCrypto.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7d63eeaec0204d5d9a24e84d682dada6 -timeCreated: 1616322344 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileHeader.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileHeader.cs deleted file mode 100644 index a8b0664..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileHeader.cs +++ /dev/null @@ -1,56 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System.IO; - - internal struct ObscuredFileHeader - { - private const byte HeaderByte1 = 65; // A - private const byte HeaderByte2 = 67; // C - private const byte HeaderByte3 = 84; // T - private const byte HeaderByte4 = 107; // k - private const byte HeaderVersion = 0; - - private byte Byte1 { get; set; } - private byte Byte2 { get; set; } - private byte Byte3 { get; set; } - private byte Byte4 { get; set; } - - public byte Version { get; private set; } - public ObscurationMode ObscurationMode { get; private set; } - - public bool IsValid() - { - return Version == HeaderVersion && - Byte1 == HeaderByte1 && - Byte2 == HeaderByte2 && - Byte3 == HeaderByte3 && - Byte4 == HeaderByte4; - } - - public void ReadFrom(Stream stream) - { - Byte1 = (byte)stream.ReadByte(); - Byte2 = (byte)stream.ReadByte(); - Byte3 = (byte)stream.ReadByte(); - Byte4 = (byte)stream.ReadByte(); - Version = (byte)stream.ReadByte(); - ObscurationMode = (ObscurationMode)stream.ReadByte(); - } - - public static void WriteTo(Stream stream, ObscurationMode obscurationMode) - { - stream.WriteByte(HeaderByte1); - stream.WriteByte(HeaderByte2); - stream.WriteByte(HeaderByte3); - stream.WriteByte(HeaderByte4); - stream.WriteByte(HeaderVersion); - stream.WriteByte((byte)obscurationMode); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileHeader.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileHeader.cs.meta deleted file mode 100644 index 598e1c6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/ObscuredFileHeader.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1e66aeea00dc48e5b6484999ec7a5668 -timeCreated: 1624011321 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults.meta deleted file mode 100644 index c06c621..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 439854bd00ab46028d4c3cd5bf68eeee -timeCreated: 1624047113 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileError.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileError.cs deleted file mode 100644 index 12f5735..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileError.cs +++ /dev/null @@ -1,72 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - - /// Possible error codes for the file read operation. - public enum ObscuredFileErrorCode : byte - { - /// Indicates no errors happened. - NoError = 0, - /// Indicates file to read from wasn't found. - FileNotFound = 5, - /// Indicates file header was damaged. - FileDamaged = 10, - /// - /// Indicates read data was not locked but you are using - /// DeviceLockLevel.Strict which prevents reading such files. - /// - DataIsNotLocked = 15, - /// Indicates used tool wasn't properly initialized. See error logs for more information. - NotInitialized = 20, - /// Indicates some other exception occured, see ObscuredFileError.Exception for details. - OtherException = 250, - } - - /// ObscuredFile-related errors container. - public readonly struct ObscuredFileError - { - /// - /// Represents error code. If there was no error it will equal to ObscuredFileErrorCode.NoError. - /// - public ObscuredFileErrorCode ErrorCode { get; } - - /// - /// Contains exception details if ErrorCode equals to the ObscuredFileErrorCode.OtherException. - /// - /// Can be null. - public Exception Exception { get; } - - internal ObscuredFileError(ObscuredFileErrorCode code) - { - ErrorCode = code; - Exception = null; - } - - internal ObscuredFileError(Exception exception) - { - ErrorCode = ObscuredFileErrorCode.OtherException; - Exception = exception; - } - - /// Returns contents of this error. - /// Human-readable error information. - public override string ToString() - { - switch (ErrorCode) - { - case ObscuredFileErrorCode.NoError: - return "No error"; - case ObscuredFileErrorCode.OtherException: - return Exception.ToString(); - default: - return $"ErrorCode: {ErrorCode}"; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileError.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileError.cs.meta deleted file mode 100644 index e120bed..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileError.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d10bb1e4419440449fe5083c4c8d20a4 -timeCreated: 1624023251 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileReadResult.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileReadResult.cs deleted file mode 100644 index 592c8e2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileReadResult.cs +++ /dev/null @@ -1,95 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - - /// Contains ObscuredFile read operation results. - public readonly struct ObscuredFileReadResult - { - /// - /// Returns true in case #Data is not null and #Error's ErrorCode is ObscuredFileErrorCode.NoError, returns false otherwise. - /// - /// \htmlonlyNOTE:\endhtmlonly it will be - /// false if data is not genuine or was loaded from another device even if Data itself was read successfully and not null. - /// Listen to the NotGenuineDataDetected and DataFromAnotherDeviceDetected events - /// (at ObscuredFile or ObscuredFilePrefs) or check #CheatingDetected, #DataIsNotGenuine and #DataFromAnotherDevice - /// properties explicitly to react on the possible cheating. - public bool Success => IsValid && Data != null && !CheatingDetected && Error.ErrorCode == ObscuredFileErrorCode.NoError; - - /// - /// Contains read bytes. Will be null if data was damaged, file does not exists or device lock feature prevented data read. - /// - public byte[] Data { get; } - - /// - /// Indicates either #DataIsNotGenuine or #DataFromAnotherDevice is true. - /// - public bool CheatingDetected => DataIsNotGenuine || DataFromAnotherDevice; - - /// - /// Returns true if saved data has correct header but signature does not matches file contents. Returns false otherwise. - /// - public bool DataIsNotGenuine { get; } - - /// - /// Returns true if device lock feature detected data from another device. - /// - public bool DataFromAnotherDevice { get; } - - /// - /// Contains specific error in case #Success is not true but #IsValid is true. - /// - public ObscuredFileError Error { get; } - - /// - /// Returns true if this struct was filled with actual data, otherwise will stay false. - /// - public bool IsValid { get; } - - internal ObscuredFileReadResult(byte[] data, bool dataIsNotGenuine, bool dataFromAnotherDevice) - { - Data = data; - DataIsNotGenuine = dataIsNotGenuine; - DataFromAnotherDevice = dataFromAnotherDevice; - Error = default; - IsValid = true; - } - - private ObscuredFileReadResult(ObscuredFileError error) - { - Data = default; - DataIsNotGenuine = default; - DataFromAnotherDevice = default; - Error = error; - IsValid = true; - } - - internal static ObscuredFileReadResult FromError(Exception exception) - { - return new ObscuredFileReadResult(new ObscuredFileError(exception)); - } - - internal static ObscuredFileReadResult FromError(ObscuredFileErrorCode errorCode) - { - return new ObscuredFileReadResult(new ObscuredFileError(errorCode)); - } - - /// - /// Returns contents of this operation result. - /// - /// Human-readable operation result. - public override string ToString() - { - return $"{nameof(IsValid)}: {IsValid}\n" + - $"Read data length: {Data?.Length ?? 0}\n" + - $"{nameof(DataIsNotGenuine)}: {DataIsNotGenuine}\n" + - $"{nameof(DataFromAnotherDevice)}: {DataFromAnotherDevice}\n" + - $"{nameof(Error)}: {Error}"; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileReadResult.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileReadResult.cs.meta deleted file mode 100644 index 829d54b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileReadResult.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6d66c88b42404e0cae8c737bbfcb800b -timeCreated: 1620065234 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileWriteResult.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileWriteResult.cs deleted file mode 100644 index dac4a07..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileWriteResult.cs +++ /dev/null @@ -1,57 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - - /// Contains ObscuredFile write operation results. - public readonly struct ObscuredFileWriteResult - { - /// Returns true in case operation had no errors. - public bool Success => IsValid && Error.ErrorCode == ObscuredFileErrorCode.NoError; - - /// Contains specific error in case #Success is not true but #IsValid is true. - public ObscuredFileError Error { get; } - - /// - /// Returns true if this struct was filled with actual data, otherwise will stay false. - /// - public bool IsValid { get; } - - internal ObscuredFileWriteResult(ObscuredFileErrorCode result) - { - Error = new ObscuredFileError(result); - IsValid = true; - } - - private ObscuredFileWriteResult(ObscuredFileError error) - { - Error = error; - IsValid = true; - } - - internal static ObscuredFileWriteResult FromError(Exception exception) - { - return new ObscuredFileWriteResult(new ObscuredFileError(exception)); - } - - internal static ObscuredFileWriteResult FromError(ObscuredFileErrorCode errorCode) - { - return new ObscuredFileWriteResult(new ObscuredFileError(errorCode)); - } - - /// - /// Returns contents of this operation result. - /// - /// Human-readable operation result. - public override string ToString() - { - return $"{nameof(IsValid)}: {IsValid}\n" + - $"{nameof(Error)}: {Error}"; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileWriteResult.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileWriteResult.cs.meta deleted file mode 100644 index 39bf635..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/OperationResults/ObscuredFileWriteResult.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6055bbb3199e4e79b38a8ea2d09aac31 -timeCreated: 1624047261 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs.meta deleted file mode 100644 index 981738a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 68ab9f6eb5f54aabb21851293e9b04e8 -timeCreated: 1622717571 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.ObscuredTypes.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.ObscuredTypes.cs deleted file mode 100644 index 3a2344a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.ObscuredTypes.cs +++ /dev/null @@ -1,60 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -using System; -using CodeStage.AntiCheat.ObscuredTypes; -using UnityEngine; - -namespace CodeStage.AntiCheat.Storage -{ - // these overloads allow seamless obscured types processing - public static partial class ObscuredFilePrefs - { - public static void Set(string key, ObscuredBool value) { Set(key, value); } - public static void Set(string key, ObscuredByte value) { Set(key, value); } - public static void Set(string key, ObscuredChar value) { Set(key, value); } - public static void Set(string key, ObscuredDateTime value) { Set(key, value); } - public static void Set(string key, ObscuredDecimal value) { Set(key, value); } - public static void Set(string key, ObscuredBigInteger value) { Set(key, value); } - public static void Set(string key, ObscuredDouble value) { Set(key, value); } - public static void Set(string key, ObscuredFloat value) { Set(key, value); } - public static void Set(string key, ObscuredInt value) { Set(key, value); } - public static void Set(string key, ObscuredLong value) { Set(key, value); } - public static void Set(string key, ObscuredQuaternion value) { Set(key, value); } - public static void Set(string key, ObscuredSByte value) { Set(key, value); } - public static void Set(string key, ObscuredShort value) { Set(key, value); } - public static void Set(string key, ObscuredString value) { Set(key, value); } - public static void Set(string key, ObscuredUInt value) { Set(key, value); } - public static void Set(string key, ObscuredULong value) { Set(key, value); } - public static void Set(string key, ObscuredUShort value) { Set(key, value); } - public static void Set(string key, ObscuredVector2 value) { Set(key, value); } - public static void Set(string key, ObscuredVector2Int value) { Set(key, value); } - public static void Set(string key, ObscuredVector3 value) { Set(key, value); } - public static void Set(string key, ObscuredVector3Int value) { Set(key, value); } - - public static ObscuredBool Get(string key, ObscuredBool defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredByte Get(string key, ObscuredByte defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredChar Get(string key, ObscuredChar defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredDateTime Get(string key, ObscuredDateTime defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredDecimal Get(string key, ObscuredDecimal defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredBigInteger Get(string key, ObscuredBigInteger defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredDouble Get(string key, ObscuredDouble defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredFloat Get(string key, ObscuredFloat defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredInt Get(string key, ObscuredInt defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredLong Get(string key, ObscuredLong defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredQuaternion Get(string key, ObscuredQuaternion defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredSByte Get(string key, ObscuredSByte defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredShort Get(string key, ObscuredShort defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredString Get(string key, ObscuredString defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredUInt Get(string key, ObscuredUInt defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredULong Get(string key, ObscuredULong defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredUShort Get(string key, ObscuredUShort defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector2 Get(string key, ObscuredVector2 defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector2Int Get(string key, ObscuredVector2Int defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector3 Get(string key, ObscuredVector3 defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector3Int Get(string key, ObscuredVector3Int defaultValue = default) { return Get(key, defaultValue); } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.ObscuredTypes.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.ObscuredTypes.cs.meta deleted file mode 100644 index d20d0d5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.ObscuredTypes.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 30c294f0c32d40aab86161ea4a6c6cdb -timeCreated: 1635268762 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.cs deleted file mode 100644 index 941bca0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.cs +++ /dev/null @@ -1,514 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using System.Collections.Generic; - using Common; - using UnityEngine; - - /// - /// ObscuredPrefs analogue but uses File IO instead of PlayerPrefs as a backend, has more flexibility and can work from a background thread. - /// - /// Don't forget to call Save() when you wish to save prefs file. You can call it from background thread. - /// It also will save automatically on non-abnormal application quit (relies on Application.wantsToQuit API).
- /// Please call DeviceIdHolder.ForceLockToDeviceInit before accessing this class from background thread if you are using Device Lock feature without custom DeviceID. - public static partial class ObscuredFilePrefs - { - /// - /// Filename used by default, if other name or path was not specified in constructor. - /// - public const string DefaultFileName = "actkfileprefs"; - - private const string LogPrefix = ACTk.LogPrefix + nameof(ObscuredFilePrefs) + ": "; - - /// - /// Fires when saved data tampering detected. Will not fire when data is damaged and not readable. - /// - public static event Action NotGenuineDataDetected; - - /// - /// Fires when saved data from some other device detected. - /// - /// May be helpful to ban potential cheaters, trying to use someone's purchased in-app goods for example.
- /// \htmlonlyNOTE:\endhtmlonly Will fire if same device ID has - /// changed (pretty rare case though). Read more at #DeviceLockLevel. - public static event Action DataFromAnotherDeviceDetected; - - private static ObscuredFile prefsFile; - private static Dictionary prefsCache; - private static readonly object BusyLock = new object(); - - /// - /// Allows checking current settings. - /// - /// Use #Init() to set the initial settings. - /// \sa #Init() - public static IObscuredFileSettings CurrentSettings => PrefsFile.CurrentSettings; - - /// - /// Allows checking if #Init() was called previously. - /// - public static bool IsInited { get; private set; } - - /// - /// Allows checking if prefs cache was loaded \ initialized. - /// It can be true while IsExists is false if new prefs was not saved yet. - /// - public static bool IsLoaded => prefsCache != null; - - /// - /// Returns true if prefs file physically exists on disk. File may not exist until Save() is called. - /// - public static bool IsExists => PrefsFile.FileExists; - - /// - /// Returns true if prefs file has unsaved changes. - /// - public static bool IsSaved { get; private set; } - - /// - /// Returns true if prefs file is busy with long-running process such as loading or saving. - /// - public static bool IsBusy { get; private set; } - - /// - /// Returns path to the prefs file. - /// It's always not empty and valid even if prefs was not saved to the physical file yet. - /// - public static string FilePath => PrefsFile.FilePath; - - /// - /// Contains reference to the last underlying ObscuredFile read operation result. - /// - /// Filled on prefs file read.
- /// May be invalid if no read operations were executed. - /// Check ObscuredFileReadResult.IsValid property to figure this out. - public static ObscuredFileReadResult LastFileReadResult { get; private set; } - - /// - /// Contains reference to the last underlying ObscuredFile write operation result. - /// - /// Filled on prefs file saving.
- /// May be invalid if no write operations were executed yet. - /// Check ObscuredFileWriteResult.IsValid property to figure this out. - public static ObscuredFileWriteResult LastFileWriteResult { get; private set; } - - // to be exposed in future - private static SerializationSettings SerializationSettings { get; set; } - - private static ObscuredFile PrefsFile - { - get - { - if (IsInited) - return prefsFile; - - Debug.LogError($"{LogPrefix}Please call {nameof(Init)} first!"); - return null; - } - } - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void Reset() - { - IsInited = false; - IsSaved = false; - IsBusy = false; - - prefsFile = null; - prefsCache?.Clear(); - prefsCache = null; - NotGenuineDataDetected = null; - DataFromAnotherDeviceDetected = null; - } -#endif - - /// - /// Initializes %ObscuredFilePrefs with file name set to #DefaultFileName and default ObscuredFileSettings. - /// - /// Pass true to automatically call LoadPrefs(). - /// This may block calling thread, consider using asynchronously for large files. - public static void Init(bool loadPrefs = false) - { - Init(DefaultFileName, new ObscuredFileSettings(), loadPrefs); - } - - /// - /// Initializes %ObscuredFilePrefs with specified file name and default ObscuredFileSettings. - /// - /// Custom file name to place at ObscuredFileLocation.PersistentData. - /// Pass true to automatically call LoadPrefs(). - /// This may block calling thread, consider using asynchronously for large files. - public static void Init(string fileName, bool loadPrefs) - { - Init(fileName, new ObscuredFileSettings(), loadPrefs); - } - - /// - /// Initializes %ObscuredFilePrefs with file name set to #DefaultFileName and custom specific settings. - /// - /// Specific custom settings. - /// Pass true to automatically call LoadPrefs(). - /// This may block calling thread, consider using asynchronously for large files. - public static void Init(IObscuredFileSettings settings, bool loadPrefs) - { - Init(DefaultFileName, settings, loadPrefs); - } - - /// - /// Initializes %ObscuredFilePrefs with specified file name or file path and custom specific settings. - /// - /// File path if using ObscuredFileLocation.Custom, otherwise represents file name to use with set #ObscuredFileLocation kind. - /// Specific custom settings. - /// Pass true to automatically call LoadPrefs(). - /// This may block calling thread, consider using asynchronously for large files. - public static void Init(string fileNameOrPath, IObscuredFileSettings settings, bool loadPrefs) - { - if (IsInited) - { - Debug.LogWarning($"{LogPrefix}Already initialized!"); - return; - } - - prefsFile = InitPrefsFile(fileNameOrPath, settings); - - if (settings.AutoSave) - ObscuredFilePrefsAutoSaver.Init(); - - IsInited = true; - - // for future use, currently using only custom binary serialization - SerializationSettings = new SerializationSettings(); - - if (loadPrefs) - LoadPrefs(); - } - - /// - /// Releases internal prefs cache, unsubscribes events and frees other used resources. - /// - /// Please call Init() again if you wish to re-use it. - public static void UnInit() - { - IsSaved = false; - IsInited = false; - prefsCache?.Clear(); - prefsCache = null; - prefsFile = null; - - NotGenuineDataDetected = null; - DataFromAnotherDeviceDetected = null; - } - - /// - /// Loads prefs from existing file if it wasn't loaded before. - /// - /// This function will read from disk potentially causing a hiccup especially when - /// you have lots of data in your prefs, therefore it is not recommended to call it - /// synchronously during actual game play. - /// Instead, call it from separate thread asynchronously or at loading screens and - /// other stall moments of your app. - public static void LoadPrefs() - { - try - { - if (prefsCache != null) // already loaded - return; - - lock (BusyLock) - { - if (IsBusy) - { - Debug.LogWarning($"{LogPrefix}Couldn't load prefs: I'm already busy."); - return; - } - - IsBusy = true; - - prefsCache = LoadAndDeserializePrefs(); - } - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Couldn't load prefs!", e); - } - finally - { - IsBusy = false; - } - } - - /// - /// Unloads cached prefs from memory. Optionally saves current prefs to the file before unloading. - /// - /// \htmlonlyWARNING:\endhtmlonly Unsaved data will be lost! - public static void UnloadPrefs(bool saveBeforeUnloading = true) - { - if (saveBeforeUnloading) - Save(); - - prefsCache?.Clear(); - prefsCache = null; - } - - /// - /// Returns true if key exists in the %ObscuredFilePrefs. - /// - /// Calls LoadPrefs() internally. - public static bool HasKey(string key) - { - LoadPrefs(); - return prefsCache.ContainsKey(key); - } - - /// - /// Returns all existing prefs keys in current %ObscuredFilePrefs. - /// - /// Calls LoadPrefs() internally. - public static ICollection GetKeys() - { - LoadPrefs(); - return prefsCache.Keys; - } - - /// - /// Removes key and its corresponding value from the %ObscuredFilePrefs. - /// - /// Calls LoadPrefs() internally. - public static void DeleteKey(string key) - { - if (!HasKey(key)) - return; - - prefsCache.Remove(key); - IsSaved = false; - } - - /// - /// Use with caution! Removes all keys and values from the prefs. - /// - public static void DeleteAll() - { - if (!IsInited) - { - Debug.LogError($"{LogPrefix}Please call {nameof(Init)} first!"); - return; - } - - prefsCache?.Clear(); - prefsCache = null; - PrefsFile.Delete(); - IsSaved = true; - } - - /// - /// Writes all modified prefs to underlying ObscuredFile on disk. - /// - /// By default, prefs are saved to disk on Application Quit - /// (relies on Application.wantsToQuit API).
- /// In case when the app crashes or otherwise prematurely exits, you might - /// want to write the prefs at sensible 'checkpoints' in your app.
- /// This function will write to disk potentially causing a hiccup especially - /// when you have lots of data in your prefs, therefore it is not recommended - /// to call it synchronously during actual game play. - /// Instead, call it from separate thread asynchronously or at loading screens - /// and other stall moments of your app. - /// True if save was successful or wasn't needed and false if something went wrong. - /// Check LastFileWriteResult for details if this method returns false. - public static bool Save() - { - if (IsSaved) - return true; - - if (prefsCache == null || prefsCache.Count == 0) - return true; - - try - { - lock (BusyLock) - { - if (IsBusy) - { - Debug.LogWarning($"{LogPrefix}Couldn't save prefs: I'm already busy."); - return false; - } - - IsBusy = true; - var result = SerializeAndSavePrefs(); - - if (!result.Success) - Debug.LogError($"{LogPrefix}Couldn't save prefs! See {nameof(LastFileWriteResult)} for details."); - - return result.Success; - } - } - catch (Exception e) - { - Debug.LogException(e); - } - finally - { - IsBusy = false; - } - - return false; - } - - /// - /// Sets the value of the preference identified by key. - /// - /// \htmlonlyWARNING:\endhtmlonly Not all types are supported, see ::StorageDataType for list of supported types. - public static void Set(string key, T value) - { - if (key == null) - throw new ArgumentNullException(nameof(key), $"{LogPrefix}You've passed null as key for type {typeof(T)}!"); - - if (value == null) - throw new ArgumentNullException(nameof(value),$"{LogPrefix}You've passed null as value for type {typeof(T)}!"); - - WritePref(key, value); - } - - /// - /// Returns the value corresponding to key in the preference file if it exists. - /// If it doesn't exist, it will return defaultValue. - /// - /// \htmlonlyWARNING:\endhtmlonly Not all types are supported, see ::StorageDataType for list of supported types. - public static T Get(string key, T defaultValue = default) - { - if (key == null) - throw new ArgumentNullException(nameof(key)); - - return ReadPref(key, defaultValue); - } - - private static ObscuredFile InitPrefsFile(string fileNameOrPath, IObscuredFileSettings settings) - { - var result = new ObscuredFile(fileNameOrPath, settings); - result.NotGenuineDataDetected += OnNotGenuineDataDetected; - result.DataFromAnotherDeviceDetected += OnDataFromAnotherDeviceDetected; - return result; - } - - private static void OnNotGenuineDataDetected() - { - NotGenuineDataDetected?.Invoke(); - } - - private static void OnDataFromAnotherDeviceDetected() - { - DataFromAnotherDeviceDetected?.Invoke(); - } - - private static Dictionary LoadAndDeserializePrefs() - { - if (!PrefsFile.FileExists) - return new Dictionary(); - - LastFileReadResult = ReadAllBytesInternal(); - if (!LastFileReadResult.Success) - { - Debug.LogError($"{LogPrefix}Couldn't load prefs! Load operation result:\n" + - LastFileReadResult); - return new Dictionary(); - } - - var result = PrefsSerialization.DeserializePrefsDictionary(LastFileReadResult.Data, SerializationSettings); - if (result == null) - { - Debug.LogError($"{LogPrefix}Couldn't deserialize prefs!"); - return new Dictionary(); - } - - IsSaved = true; - - return result; - } - - private static ObscuredFileWriteResult SerializeAndSavePrefs() - { - var data = PrefsSerialization.SerializePrefsDictionary(prefsCache, SerializationSettings); - LastFileWriteResult = WriteAllBytesInternal(data); - return LastFileWriteResult; - } - - private static T ReadPref(string key, T defaultValue) - { - if (!IsInited) - { - Debug.LogError($"{LogPrefix}Please call {nameof(Init)} first!"); - return defaultValue; - } - - T result = defaultValue; - - if (HasKey(key)) - result = PrefsSerialization.DeserializeStorageDataType(prefsCache[key], SerializationSettings); - - return result; - } - - private static void WritePref(string key, T value) - { - if (!IsInited) - { - Debug.LogError($"{LogPrefix}Please call {nameof(Init)} first!"); - return; - } - - var data = PrefsSerialization.SerializeStorageDataType(value, SerializationSettings); - - if (HasKey(key)) - { - var existingType = prefsCache[key].type; - var newType = data.type; - if (existingType != newType) - { - Debug.LogWarning($"{LogPrefix}Pref {key} type changed from " + - $"{existingType} to {newType}!\n" + - "This message is harmless if you know what you're doing."); - } - - prefsCache[key] = data; - } - else - { - prefsCache.Add(key, data); - } - - IsSaved = false; - } - - private static ObscuredFileReadResult ReadAllBytesInternal() - { - if (!IsInited) - { - Debug.LogError($"{LogPrefix}Please call {nameof(Init)} first!"); - return ObscuredFileReadResult.FromError(ObscuredFileErrorCode.NotInitialized); - } - - return PrefsFile.ReadAllBytes(); - } - - private static ObscuredFileWriteResult WriteAllBytesInternal(byte[] data) - { - if (!IsInited) - { - Debug.LogError($"{LogPrefix}Please call {nameof(Init)} first!"); - return ObscuredFileWriteResult.FromError(ObscuredFileErrorCode.NotInitialized); - } - - var result = PrefsFile.WriteAllBytes(data); - IsSaved = result.Success; - - return result; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.cs.meta deleted file mode 100644 index 0af36c3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefs.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d9b841dfe843485e8f0d22bf45b0789b -timeCreated: 1621647549 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefsAutoSaver.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefsAutoSaver.cs deleted file mode 100644 index 62ddef1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefsAutoSaver.cs +++ /dev/null @@ -1,126 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -#if !UNITY_WEBGL -#define ACTK_ASYNC -#endif - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using Common; - using UnityEngine; - using Utils; - - internal static class ObscuredFilePrefsAutoSaver - { - private static bool isInited; - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void Reset() - { - isInited = false; - } -#endif - - internal static void Init() - { - if (isInited) - return; - - try - { - if (UnityApiResultsHolder.IsMobilePlatform()) - { - AppEventsDispatcher.Instance.ApplicationFocused += OnApplicationFocused; - AppEventsDispatcher.Instance.ApplicationPaused += OnApplicationPaused; - } - else - { - Application.wantsToQuit += OnApplicationWantsToQuit; - } - -#if UNITY_EDITOR - UnityEditor.EditorApplication.wantsToQuit += OnEditorApplicationWantsToQuit; - UnityEditor.EditorApplication.playModeStateChanged += OnEditorPlayModeStateChanged; -#endif - isInited = true; - } - catch (UnityException e) - { - Debug.LogError($"{ACTk.LogPrefix} Couldn't initialize {nameof(ObscuredFilePrefsAutoSaver)}. " + - $"Are you using {nameof(ObscuredFilePrefs)} from background thread but didn't " + - $"call the {nameof(UnityApiResultsHolder)}.{nameof(UnityApiResultsHolder.InitForAsyncUsage)}()?\n" + - $"Auto Save will not be operational!\nException:{e}"); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport($"Something went wrong while creating {nameof(ObscuredFilePrefsAutoSaver)}", e); - } - } - -#if UNITY_EDITOR - private static bool OnEditorApplicationWantsToQuit() - { - TrySave(false); - return true; - } - - private static void OnEditorPlayModeStateChanged(UnityEditor.PlayModeStateChange state) - { - if (state == UnityEditor.PlayModeStateChange.ExitingPlayMode) - TrySave(false); - } -#endif - - private static bool OnApplicationWantsToQuit() - { - TrySave(false); - return true; - } - - private static void OnApplicationFocused(bool hasFocus) - { - if (!hasFocus) - TrySave(); - } - - private static void OnApplicationPaused(bool pauseStatus) - { - if (pauseStatus) - TrySave(); - } - - private static void TrySave(bool async = true) - { - try - { -#if ACTK_ASYNC - if (async) - System.Threading.Tasks.Task.Run(Save); - else - Save(); -#else - Save(); -#endif - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport($"{nameof(ObscuredFilePrefsAutoSaver)} couldn't save data.", e); - } - - void Save() - { - if (ObscuredFilePrefs.IsInited && - !ObscuredFilePrefs.IsSaved && - !ObscuredFilePrefs.IsBusy) - ObscuredFilePrefs.Save(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefsAutoSaver.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefsAutoSaver.cs.meta deleted file mode 100644 index 07421ad..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/ObscuredFilePrefsAutoSaver.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 42a77b99c66148f893666c084f9a9650 -timeCreated: 1649461440 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization.meta deleted file mode 100644 index 0e2b706..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 95f1f2c08107411d8f2778b93c663b6e -timeCreated: 1622828401 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/PrefsSerialization.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/PrefsSerialization.cs deleted file mode 100644 index 47a5a0b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/PrefsSerialization.cs +++ /dev/null @@ -1,43 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System.Collections.Generic; - - internal static class PrefsSerialization - { - public static ObscuredPrefsData SerializeStorageDataType(T value, SerializationSettings settings) - { - var serializer = GetSerializer(settings); - return serializer.SerializeStorageDataType(value); - } - - public static T DeserializeStorageDataType(ObscuredPrefsData data, SerializationSettings settings) - { - var serializer = GetSerializer(settings); - return serializer.DeserializeStorageDataType(data); - } - - public static byte[] SerializePrefsDictionary(Dictionary value, SerializationSettings settings) - { - var serializer = GetSerializer(settings); - return serializer.SerializePrefsDictionary(value); - } - - public static Dictionary DeserializePrefsDictionary(byte[] data, SerializationSettings settings) - { - var serializer = GetSerializer(settings); - return serializer.DeserializePrefsDictionary(data); - } - - private static IObscuredFilePrefsSerializer GetSerializer(SerializationSettings settings) - { - return settings.SerializationKind == ACTkSerializationKind.Binary ? - BinarySerializer.GetSerializer() : JsonSerializer.GetSerializer(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/PrefsSerialization.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/PrefsSerialization.cs.meta deleted file mode 100644 index 831ff1f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/PrefsSerialization.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4443ceaad88f421ca769f62179f25860 -timeCreated: 1622719602 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/SerializationSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/SerializationSettings.cs deleted file mode 100644 index d7a7226..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/SerializationSettings.cs +++ /dev/null @@ -1,23 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - internal enum ACTkSerializationKind - { - Binary - } - - internal class SerializationSettings - { - public ACTkSerializationKind SerializationKind { get; } - - public SerializationSettings(ACTkSerializationKind serializationKind = ACTkSerializationKind.Binary) - { - SerializationKind = serializationKind; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/SerializationSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/SerializationSettings.cs.meta deleted file mode 100644 index b78a1d1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/SerializationSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 905728f794eb4c9a8871af1cd83479be -timeCreated: 1622720122 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers.meta deleted file mode 100644 index 4245fa8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3205bf6ebaa843d1b8be3afeb38f5ef8 -timeCreated: 1622717626 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/BinarySerializer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/BinarySerializer.cs deleted file mode 100644 index 752657a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/BinarySerializer.cs +++ /dev/null @@ -1,107 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System.Collections.Generic; - using System.IO; - using Common; - using UnityEngine; - - internal class BinarySerializer : IObscuredFilePrefsSerializer - { - private const byte Version = 0; - - private static BinarySerializer cachedInstance; - - public static IObscuredFilePrefsSerializer GetSerializer() - { - return cachedInstance ?? (cachedInstance = new BinarySerializer()); - } - - public ObscuredPrefsData SerializeStorageDataType(T value) - { - return StorageDataConverter.GetPrefsDataFromValue(value); - } - - public T DeserializeStorageDataType(ObscuredPrefsData data) - { - return StorageDataConverter.GetValueFromPrefsData(data); - } - - public byte[] SerializePrefsDictionary(Dictionary dictionary) - { - using (var ms = new MemoryStream()) - { - using (var bw = new BinaryWriter(ms)) - { - // writing binary serialization version for future use - bw.Write(Version); - - // writing length - bw.Write(dictionary.Count); - - foreach (var prefsData in dictionary) - { - // writing each pref - WritePref(bw, prefsData.Key, prefsData.Value); - } - } - - return ms.ToArray(); - } - } - - public Dictionary DeserializePrefsDictionary(byte[] data) - { - using (var ms = new MemoryStream(data)) - { - using (var br = new BinaryReader(ms)) - { - // reading version, for future use - var version = br.ReadByte(); - if (version != Version) - { - Debug.LogError($"{ACTk.LogPrefix}Incorrect {nameof(BinarySerializer)} version at the prefs dictionary data!" + - "Can't read data, something is wrong, please report."); - return null; - } - - // getting dictionary elements count - var count = br.ReadInt32(); - var result = new Dictionary(count); - - for (var i = 0; i < count; i++) - { - // reading each pref accordingly to write format - var (key, value) = ReadPref(br); - result.Add(key, value); - } - - return result; - } - } - } - - private void WritePref(BinaryWriter writer, string key, ObscuredPrefsData value) - { - writer.Write(key); - writer.Write((byte)value.type); - writer.Write(value.data.Length); - writer.Write(value.data); - } - - private (string key, ObscuredPrefsData value) ReadPref(BinaryReader reader) - { - var key = reader.ReadString(); - var type = (StorageDataType)reader.ReadByte(); - var dataLength = reader.ReadInt32(); - var data = reader.ReadBytes(dataLength); - - return (key, new ObscuredPrefsData(type, data)); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/BinarySerializer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/BinarySerializer.cs.meta deleted file mode 100644 index 00f9288..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/BinarySerializer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ced52881bfaf4d98a304173fa5ef0773 -timeCreated: 1622717656 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/IObscuredFilePrefsSerializer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/IObscuredFilePrefsSerializer.cs deleted file mode 100644 index 1657726..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/IObscuredFilePrefsSerializer.cs +++ /dev/null @@ -1,19 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System.Collections.Generic; - - internal interface IObscuredFilePrefsSerializer - { - ObscuredPrefsData SerializeStorageDataType(T value); - T DeserializeStorageDataType(ObscuredPrefsData data); - - byte[] SerializePrefsDictionary(Dictionary dictionary); - Dictionary DeserializePrefsDictionary(byte[] data); - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/IObscuredFilePrefsSerializer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/IObscuredFilePrefsSerializer.cs.meta deleted file mode 100644 index c86f0d7..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/IObscuredFilePrefsSerializer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e3bff4cc002a4f849f3e7c6c6fc11d6d -timeCreated: 1622718106 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/JsonSerializer.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/JsonSerializer.cs deleted file mode 100644 index f7c38fe..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/JsonSerializer.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using System.Collections.Generic; - - // Currently not implemented. To be decided: to be or not to be =) - internal class JsonSerializer : IObscuredFilePrefsSerializer - { - private static JsonSerializer cachedInstance; - - public static IObscuredFilePrefsSerializer GetSerializer() - { - return cachedInstance ?? (cachedInstance = new JsonSerializer()); - } - - public ObscuredPrefsData SerializeStorageDataType(T value) - { - throw new NotImplementedException(); - } - - public T DeserializeStorageDataType(ObscuredPrefsData data) - { - throw new NotImplementedException(); - } - - public byte[] SerializePrefsDictionary(Dictionary dictionary) - { - throw new NotImplementedException(); - } - - public Dictionary DeserializePrefsDictionary(byte[] data) - { - throw new NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/JsonSerializer.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/JsonSerializer.cs.meta deleted file mode 100644 index c996b07..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Prefs/Serialization/Serializers/JsonSerializer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 74b302c3833b44648954b9e45c39c811 -timeCreated: 1622827918 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings.meta deleted file mode 100644 index 7e50842..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5d93c91b029c41dd981e53cf8697a8a2 -timeCreated: 1649673824 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/EncryptionSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/EncryptionSettings.cs deleted file mode 100644 index 3301be4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/EncryptionSettings.cs +++ /dev/null @@ -1,76 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using Utils; - - /// - /// Represents how data will be saved to file. - /// - public enum ObscurationMode : byte - { - /// - /// No encryption, just plain binary data. Serialized data will be readable. - /// - Plain = 0, - - /// - /// All data will be encrypted and not readable in the file. - /// - Encrypted = 1 - } - - /// - /// Different ObscuredFile and ObscuredFilePrefs encryption-related settings. - /// - public class EncryptionSettings - { - /// - /// Represents the way data is stored in the file: eiter plain (as is) or encrypted with user-set password, - /// depending on #Password value. - /// - public ObscurationMode ObscurationMode { get; } - - /// - /// Password used to encrypt and decrypt data. Switches #ObscurationMode to ObscurationMode.Encrypted when set - /// or to ObscurationMode.Plain when not set. - /// - /// \htmlonlyWARNING:\endhtmlonly Any existing data encrypted with - /// one password will not be readable with another password. - public byte[] Password { get; } - - /// - /// Creates new specified encryption settings instance. - /// - /// Password string used to encrypt and decrypt data. - /// Changes the way data is stored in the file: plain (as is) if password - /// is not set or empty, otherwise data will be encrypted on write and decrypted on read using this - /// password. Will be converted to byte[] internally. - /// Configured instance. - public EncryptionSettings(string password) : this(StringUtils.StringToBytes(password)) - { - } - - /// - /// Creates new specified encryption settings instance. - /// - /// Password bytes used to encrypt and decrypt data. - /// Changes the way data is stored in the file: plain (as is) if password - /// is not set or empty, otherwise data will be encrypted on write and decrypted on read using this - /// password. - /// Configured instance. - public EncryptionSettings(byte[] password = null) - { - if (password == null || password.Length == 0) - ObscurationMode = ObscurationMode.Plain; - else - ObscurationMode = ObscurationMode.Encrypted; - - Password = password; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/EncryptionSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/EncryptionSettings.cs.meta deleted file mode 100644 index e9f2c75..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/EncryptionSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bd60e7d395014239ab4976b91f4850a9 -timeCreated: 1619918970 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/IObscuredFileSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/IObscuredFileSettings.cs deleted file mode 100644 index 198f9b6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/IObscuredFileSettings.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - /// - /// Specific settings to use with ObscuredFile instance. - /// - public interface IObscuredFileSettings - { - /// - /// Controls file location. Read more at #ObscuredFileLocation docs. - /// - ObscuredFileLocation LocationKind { get; } - - /// - /// Controls file encryption settings. Read more at #EncryptionSettings docs. - /// - EncryptionSettings EncryptionSettings { get; } - - /// - /// Controls DeviceLock feature settings. Read more at #DeviceLockSettings docs. - /// - DeviceLockSettings DeviceLockSettings { get; } - - /// - /// Controls anti-tampering setting. - /// - /// When enabled, data integrity is validated and invokes NotGenuineDataDetected event on violation. - ///
Disable to skip integrity validation entirely and improve performance. - bool ValidateDataIntegrity { get; } - - /// - /// Switches Auto Save feature. - /// - /// Auto Save feature allows making sure any unsaved data will persist - /// when your app quits (on desktops) or loses the focus (on mobiles). - /// It's enabled by default and this is the recommended setting, - /// but you're free to turn it off at your own risk. - bool AutoSave { get; } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/IObscuredFileSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/IObscuredFileSettings.cs.meta deleted file mode 100644 index 29bd900..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/IObscuredFileSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bf7cf4e40873480487d04fb9499be4a0 -timeCreated: 1649673805 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/ObscuredFileSettings.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/ObscuredFileSettings.cs deleted file mode 100644 index d858bf1..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/ObscuredFileSettings.cs +++ /dev/null @@ -1,88 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - /// - /// Specifies file location. - /// - public enum ObscuredFileLocation : byte - { - /// - /// Corresponds to the Application.persistentDataPath. - /// - PersistentData = 5, - - /// - /// Allows setting custom file path. - /// - Custom = 10, - } - - /// - /// Specific settings to use with ObscuredFile instance. - /// - public class ObscuredFileSettings : IObscuredFileSettings - { - public ObscuredFileLocation LocationKind { get; set; } - public EncryptionSettings EncryptionSettings { get; set; } - public DeviceLockSettings DeviceLockSettings { get; set; } - public bool ValidateDataIntegrity { get; set; } - public bool AutoSave { get; set; } - - /// - /// Creates default settings instance. - /// - /// Default settings are: - /// - LocationKind set to ObscuredFileLocation.PersistentData - /// - EncryptionSettings.ObscurationMode set to ObscurationMode.Plain - /// - DeviceLockSettings.Level set to DeviceLockLevel.None - /// - ValidateDataIntegrity set to true - /// - AutoSave set to true - public ObscuredFileSettings():this(ObscuredFileLocation.PersistentData) - { - } - - /// - /// Creates settings instance with specified LocationKind. - /// - /// Default settings are: - /// - EncryptionSettings.ObscurationMode set to ObscurationMode.Plain - /// - DeviceLockSettings.Level set to DeviceLockLevel.None - /// - ValidateDataIntegrity set to true - /// - AutoSave set to true - public ObscuredFileSettings(ObscuredFileLocation locationKind) : this( - new EncryptionSettings(), new DeviceLockSettings(), locationKind) { } - - /// - /// Creates settings instance with specified DeviceLockSettings. - /// - /// Default settings are: - /// - LocationKind set to ObscuredFileLocation.PersistentData - /// - EncryptionSettings.ObscurationMode set to ObscurationMode.Plain - /// - ValidateDataIntegrity set to true - /// - AutoSave set to true - public ObscuredFileSettings(DeviceLockSettings deviceLockSettings) : this( - new EncryptionSettings(), deviceLockSettings) - { -; - } - - /// - /// Creates user-specified settings instance. - /// - public ObscuredFileSettings(EncryptionSettings encryptionSettings, DeviceLockSettings deviceLockSettings, - ObscuredFileLocation locationKind = ObscuredFileLocation.PersistentData, bool validateDataIntegrity = true, - bool autoSave = true) - { - EncryptionSettings = encryptionSettings; - DeviceLockSettings = deviceLockSettings; - LocationKind = locationKind; - ValidateDataIntegrity = validateDataIntegrity; - AutoSave = autoSave; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/ObscuredFileSettings.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/ObscuredFileSettings.cs.meta deleted file mode 100644 index 54b81d9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/File/Settings/ObscuredFileSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 48100ed207eb4b43a61d3e58f737aeae -timeCreated: 1616322302 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs.meta deleted file mode 100644 index e962805..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5f1dc951fb744fc49b4b508bff79157f -timeCreated: 1557164832 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.LegacyApi.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.LegacyApi.cs deleted file mode 100644 index b070978..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.LegacyApi.cs +++ /dev/null @@ -1,274 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using UnityEngine; - - public static partial class ObscuredPrefs - { - #region int - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetInt(string key, int value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static int GetInt(string key, int defaultValue = 0) - { - return Get(key, defaultValue); - } - #endregion - - #region uint - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetUInt(string key, uint value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static uint GetUInt(string key, uint defaultValue = 0) - { - return Get(key, defaultValue); - } - #endregion - - #region string - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetString(string key, string value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static string GetString(string key, string defaultValue = "") - { - return Get(key, defaultValue); - } - #endregion - - #region float - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetFloat(string key, float value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static float GetFloat(string key, float defaultValue = 0f) - { - return Get(key, defaultValue); - } - #endregion - - #region double - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetDouble(string key, double value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static double GetDouble(string key, double defaultValue = 0) - { - return Get(key, defaultValue); - } - #endregion - - #region decimal - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetDecimal(string key, decimal value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static decimal GetDecimal(string key, decimal defaultValue = 0) - { - return Get(key, defaultValue); - } - #endregion - - #region long - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetLong(string key, long value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static long GetLong(string key, long defaultValue = 0) - { - return Get(key, defaultValue); - } - #endregion - - #region ulong - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetULong(string key, ulong value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static ulong GetULong(string key, ulong defaultValue = 0) - { - return Get(key, defaultValue); - } - #endregion - - #region bool - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetBool(string key, bool value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static bool GetBool(string key, bool defaultValue = false) - { - return Get(key, defaultValue); - } - #endregion - - #region byte[] - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetByteArray(string key, byte[] value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static byte[] GetByteArray(string key, byte defaultValue = 0, int defaultLength = 0) - { - var encryptedKey = EncryptKey(key); - var encrypted = GetEncryptedPrefsString(key, encryptedKey); - - if (encrypted == RawNotFound) - { - return ConstructByteArray(defaultValue, defaultLength); - } - - return DecryptByteArrayValue(key, encrypted, defaultValue, defaultLength); - } - - private static byte[] ConstructByteArray(byte value, int length) - { - var bytes = new byte[length]; - for (var i = 0; i < length; i++) - { - bytes[i] = value; - } - return bytes; - } - #endregion - - #region Vector2 - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetVector2(string key, Vector2 value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Vector2 GetVector2(string key) - { - return GetVector2(key, Vector2.zero); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Vector2 GetVector2(string key, Vector2 defaultValue) - { - return Get(key, defaultValue); - } - #endregion - - #region Vector3 - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetVector3(string key, Vector3 value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Vector3 GetVector3(string key) - { - return GetVector3(key, Vector3.zero); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Vector3 GetVector3(string key, Vector3 defaultValue) - { - return Get(key, defaultValue); - } - #endregion - - #region Quaternion - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetQuaternion(string key, Quaternion value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Quaternion GetQuaternion(string key) - { - return GetQuaternion(key, Quaternion.identity); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Quaternion GetQuaternion(string key, Quaternion defaultValue) - { - return Get(key, defaultValue); - } - #endregion - - #region Color32 - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates. Be careful with Color and Color32 difference!", false)] - public static void SetColor(string key, Color32 value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates. Be careful with Color and Color32 difference!", false)] - public static Color32 GetColor(string key) - { - return GetColor(key, new Color32(0,0,0,1)); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates. Be careful with Color and Color32 difference!", false)] - public static Color32 GetColor(string key, Color32 defaultValue) - { - return Get(key, defaultValue); - } - - #endregion - - #region Rect - [Obsolete("Please use generic " + nameof(Set) + " instead. This API will be removed in next updates.", false)] - public static void SetRect(string key, Rect value) - { - Set(key, value); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Rect GetRect(string key) - { - return GetRect(key, new Rect(0,0,0,0)); - } - - [Obsolete("Please use generic " + nameof(Get) + " instead. This API will be removed in next updates.", false)] - public static Rect GetRect(string key, Rect defaultValue) - { - return Get(key, defaultValue); - } - - #endregion - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.LegacyApi.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.LegacyApi.cs.meta deleted file mode 100644 index a95521f..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.LegacyApi.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6560e603784748ca9e742adbe8119d1c -timeCreated: 1623342137 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.ObscuredTypes.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.ObscuredTypes.cs deleted file mode 100644 index de3a901..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.ObscuredTypes.cs +++ /dev/null @@ -1,61 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -using System; -using CodeStage.AntiCheat.ObscuredTypes; -using UnityEngine; - -namespace CodeStage.AntiCheat.Storage -{ - // these overloads allow seamless obscured types processing - public static partial class ObscuredPrefs - { - public static void Set(string key, ObscuredBool value) { Set(key, value); } - public static void Set(string key, ObscuredByte value) { Set(key, value); } - public static void Set(string key, ObscuredChar value) { Set(key, value); } - public static void Set(string key, ObscuredDateTime value) { Set(key, value); } - public static void Set(string key, ObscuredDecimal value) { Set(key, value); } - public static void Set(string key, ObscuredBigInteger value) { Set(key, value); } - public static void Set(string key, ObscuredDouble value) { Set(key, value); } - public static void Set(string key, ObscuredFloat value) { Set(key, value); } - public static void Set(string key, ObscuredInt value) { Set(key, value); } - public static void Set(string key, ObscuredLong value) { Set(key, value); } - public static void Set(string key, ObscuredQuaternion value) { Set(key, value); } - public static void Set(string key, ObscuredSByte value) { Set(key, value); } - public static void Set(string key, ObscuredShort value) { Set(key, value); } - public static void Set(string key, ObscuredString value) { Set(key, value); } - public static void Set(string key, ObscuredUInt value) { Set(key, value); } - public static void Set(string key, ObscuredULong value) { Set(key, value); } - public static void Set(string key, ObscuredUShort value) { Set(key, value); } - public static void Set(string key, ObscuredVector2 value) { Set(key, value); } - public static void Set(string key, ObscuredVector2Int value) { Set(key, value); } - public static void Set(string key, ObscuredVector3 value) { Set(key, value); } - public static void Set(string key, ObscuredVector3Int value) { Set(key, value); } - - public static ObscuredBool Get(string key, ObscuredBool defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredByte Get(string key, ObscuredByte defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredChar Get(string key, ObscuredChar defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredDateTime Get(string key, ObscuredDateTime defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredDecimal Get(string key, ObscuredDecimal defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredBigInteger Get(string key, ObscuredBigInteger defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredDouble Get(string key, ObscuredDouble defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredFloat Get(string key, ObscuredFloat defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredInt Get(string key, ObscuredInt defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredLong Get(string key, ObscuredLong defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredQuaternion Get(string key, ObscuredQuaternion defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredSByte Get(string key, ObscuredSByte defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredShort Get(string key, ObscuredShort defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredString Get(string key, ObscuredString defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredUInt Get(string key, ObscuredUInt defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredULong Get(string key, ObscuredULong defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredUShort Get(string key, ObscuredUShort defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector2 Get(string key, ObscuredVector2 defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector2Int Get(string key, ObscuredVector2Int defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector3 Get(string key, ObscuredVector3 defaultValue = default) { return Get(key, defaultValue); } - public static ObscuredVector3Int Get(string key, ObscuredVector3Int defaultValue = default) { return Get(key, defaultValue); } - - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.ObscuredTypes.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.ObscuredTypes.cs.meta deleted file mode 100644 index 90a65f3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.ObscuredTypes.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 140cedaa8714013488f22776e11e85cd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.Routines.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.Routines.cs deleted file mode 100644 index 270c842..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.Routines.cs +++ /dev/null @@ -1,481 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using System; - using ObscuredTypes; - using UnityEngine; - using Utils; - - public static partial class ObscuredPrefs - { - private static char[] generatedCryptoKey; - - internal static char[] GetCryptoKey(string dynamicSuffix = null, string prefsKey = PrefsKey) - { - if (generatedCryptoKey == null) - { - var savedKey = PlayerPrefs.GetString(prefsKey); - if (!string.IsNullOrEmpty(savedKey)) - { - generatedCryptoKey = Base64Utils.FromBase64ToChars(savedKey); - } - else - { - generatedCryptoKey = ObscuredString.GenerateKey(); - var b64 = Base64Utils.ToBase64(generatedCryptoKey); - PlayerPrefs.SetString(prefsKey, b64); - PlayerPrefs.Save(); - } - } - - if (string.IsNullOrEmpty(dynamicSuffix)) - { - return generatedCryptoKey; - } - - var suffixChars = dynamicSuffix.ToCharArray(); - var result = new char[generatedCryptoKey.Length + suffixChars.Length]; - Buffer.BlockCopy(generatedCryptoKey, 0, result, 0, generatedCryptoKey.Length); - Buffer.BlockCopy(suffixChars, 0, result, generatedCryptoKey.Length + 1, suffixChars.Length); - - return result; - } - - internal static string EncryptKey(string key) - { - var keyChars = ObscuredString.Encrypt(key.ToCharArray(), GetCryptoKey()); - key = Base64Utils.ToBase64(keyChars); - return key; - } - - internal static StorageDataType GetRawValueType(string value) - { - var result = StorageDataType.Unknown; - byte[] inputBytes; - - try - { - inputBytes = Convert.FromBase64String(value); - } - catch (Exception) - { - return result; - } - - if (inputBytes.Length < 7) - { - return result; - } - - var inputLength = inputBytes.Length; - - result = (StorageDataType)inputBytes[inputLength - 7]; - - var version = inputBytes[inputLength - 6]; - if (version > 10) - { - result = StorageDataType.Unknown; - } - - return result; - } - - internal static string EncryptValue(string key, T value) - { - var prefsData = StorageDataConverter.GetPrefsDataFromValue(value); - return EncryptData(key, prefsData.data, prefsData.type); - } - - internal static T DecryptValue(string key, string encryptedKey, T defaultValue, string encryptedInput = null) - { - if (encryptedInput == null) - encryptedInput = GetEncryptedPrefsString(key, encryptedKey); - - if (encryptedInput == RawNotFound) - return defaultValue; - - var cleanBytes = DecryptData(key, encryptedInput); - if (cleanBytes == null) - return defaultValue; - - var cleanValue = StorageDataConverter.GetValueFromData(cleanBytes); - return cleanValue; - } - - private static byte[] DecryptByteArrayValue(string key, string encryptedInput, byte defaultValue, int defaultLength) - { - var cleanBytes = DecryptData(key, encryptedInput); - return cleanBytes ?? ConstructByteArray(defaultValue, defaultLength); - } - - private static string EncryptData(string key, byte[] cleanBytes, StorageDataType type) - { - var dataLength = cleanBytes.Length; - var encryptedBytes = EncryptDecryptBytes(cleanBytes, dataLength, GetCryptoKey(key)); - - var dataHash = xxHash.CalculateHash(cleanBytes, dataLength, 0); - var dataHashBytes = new byte[4]; // replaces BitConverter.GetBytes(hash); - dataHashBytes[0] = (byte)(dataHash & 0xFF); - dataHashBytes[1] = (byte)((dataHash >> 8) & 0xFF); - dataHashBytes[2] = (byte)((dataHash >> 16) & 0xFF); - dataHashBytes[3] = (byte)((dataHash >> 24) & 0xFF); - - byte[] deviceHashBytes = null; - int finalBytesLength; - if (DeviceLockSettings.Level != DeviceLockLevel.None) - { - // 4 device id hash + 1 data type + 1 device lock mode + 1 version + 4 data hash - finalBytesLength = dataLength + 11; - var deviceHash = DeviceIdHolder.DeviceIdHash; - deviceHashBytes = new byte[4]; // replaces BitConverter.GetBytes(hash); - deviceHashBytes[0] = (byte)(deviceHash & 0xFF); - deviceHashBytes[1] = (byte)((deviceHash >> 8) & 0xFF); - deviceHashBytes[2] = (byte)((deviceHash >> 16) & 0xFF); - deviceHashBytes[3] = (byte)((deviceHash >> 24) & 0xFF); - } - else - { - // 1 data type + 1 device lock mode + 1 version + 4 data hash - finalBytesLength = dataLength + 7; - } - - var finalBytes = new byte[finalBytesLength]; - - Buffer.BlockCopy(encryptedBytes, 0, finalBytes, 0, dataLength); - if (deviceHashBytes != null) - { - Buffer.BlockCopy(deviceHashBytes, 0, finalBytes, dataLength, 4); - } - - finalBytes[finalBytesLength - 7] = (byte)type; - finalBytes[finalBytesLength - 6] = Version; - finalBytes[finalBytesLength - 5] = (byte)DeviceLockSettings.Level; - Buffer.BlockCopy(dataHashBytes, 0, finalBytes, finalBytesLength - 4, 4); - - return Convert.ToBase64String(finalBytes); - } - - private static byte[] DecryptData(string key, string encryptedInput) - { - byte[] inputBytes; - - try - { - inputBytes = Convert.FromBase64String(encryptedInput); - } - catch (Exception) - { - SavesTampered(); - return null; - } - - if (inputBytes.Length <= 0) - { - SavesTampered(); - return null; - } - - var inputLength = inputBytes.Length; - - if (inputLength < 7) - { - SavesTampered(); - return null; - } - - var inputLockToDevice = (DeviceLockLevel)inputBytes[inputLength - 5]; - - var dataHashBytes = new byte[4]; - Buffer.BlockCopy(inputBytes, inputLength - 4, dataHashBytes, 0, 4); - var inputDataHash = (uint)(dataHashBytes[0] | dataHashBytes[1] << 8 | dataHashBytes[2] << 16 | dataHashBytes[3] << 24); - - int dataBytesLength; - uint inputDeviceHash = 0; - - if (inputLockToDevice != DeviceLockLevel.None) - { - dataBytesLength = inputLength - 11; - if (DeviceLockSettings.Level != DeviceLockLevel.None) - { - var deviceHashBytes = new byte[4]; - Buffer.BlockCopy(inputBytes, dataBytesLength, deviceHashBytes, 0, 4); - inputDeviceHash = (uint)(deviceHashBytes[0] | deviceHashBytes[1] << 8 | deviceHashBytes[2] << 16 | deviceHashBytes[3] << 24); - } - } - else - { - dataBytesLength = inputLength - 7; - } - - if (dataBytesLength < 0) - { - SavesTampered(); - return null; - } - - var encryptedBytes = new byte[dataBytesLength]; - Buffer.BlockCopy(inputBytes, 0, encryptedBytes, 0, dataBytesLength); - - byte[] cleanBytes; - if (!DeviceIdHolder.MigratingFromACTkV1) - { - cleanBytes = EncryptDecryptBytes(encryptedBytes, dataBytesLength, GetCryptoKey(key)); - } - else - { - cleanBytes = EncryptDecryptBytesObsolete(encryptedBytes, dataBytesLength, key + cryptoKeyObsoleteForMigration); - } - - var realDataHash = xxHash.CalculateHash(cleanBytes, dataBytesLength, 0); - if (realDataHash != inputDataHash) - { - SavesTampered(); - return null; - } - - if (inputDeviceHash == 0 && - DeviceLockSettings.Level == DeviceLockLevel.Strict && - DeviceLockSettings.Sensitivity == DeviceLockTamperingSensitivity.Normal) - { - return null; - } - - if (inputDeviceHash != 0 && DeviceLockSettings.Sensitivity != DeviceLockTamperingSensitivity.Disabled) - { - var realDeviceHash = DeviceIdHolder.DeviceIdHash; - if (inputDeviceHash != realDeviceHash) - { - PossibleForeignSavesDetected(); - if (DeviceLockSettings.Sensitivity == DeviceLockTamperingSensitivity.Normal) return null; - } - } - - // reserved for future use - // var type = (StorageDataType)inputBytes[inputLength - 7]; - - var inputVersion = inputBytes[inputLength - 6]; - if (inputVersion != Version) - { - if (inputVersion == 2 || inputVersion == 3) - { - var type = (StorageDataType)inputBytes[inputLength - 7]; - if (type == StorageDataType.Color) // converting Color32 bytes format to new version - { - var color32 = StorageDataConverter.BytesToColor32Legacy(cleanBytes); - cleanBytes = StorageDataConverter.GetPrefsDataFromValue(color32).data; - } - - /*if (string.IsNullOrEmpty(cryptoKeyObsolete)) - { - Debug.LogError(LogPrefix + "Data encrypted with obsolete version found but CryptoKey is not set! " + - "Can't decrypt it without a key."); - return null; - }*/ - } - else if (inputVersion > Version) // impossible thing in normal conditions - { - SavesTampered(); - return null; - } - } - - return cleanBytes; - } - - private static byte[] EncryptDecryptBytes(byte[] bytes, int dataLength, char[] key) - { - var encryptionKeyLength = key.Length; - - var result = new byte[dataLength]; - - for (var i = 0; i < dataLength; i++) - { - result[i] = (byte)(bytes[i] ^ key[i % encryptionKeyLength]); - } - - return result; - } - - private static string GetEncryptedPrefsString(string key, string encryptedKey) - { - var result = PlayerPrefs.GetString(encryptedKey, RawNotFound); - - if (result == RawNotFound) - { - if (PlayerPrefs.HasKey(key)) - { - Debug.LogWarning(LogPrefix + "Are you trying to read regular PlayerPrefs data using ObscuredPrefs (key = " + key + ")?"); - } - else - { - MigrateFromACTkV1Internal(key, cryptoKeyObsolete); - result = PlayerPrefs.GetString(encryptedKey, RawNotFound); - } - } - return result; - } - -#pragma warning disable 618 - private static bool MigrateFromACTkV1Internal(string key, string cryptoKey) - { - var oldPrefsKey = EncryptKeyWithACTkV1Algorithm(key, cryptoKey); - if (!PlayerPrefs.HasKey(oldPrefsKey)) - { - return false; - } - - DeviceIdHolder.SetMigrationMode(true); - cryptoKeyObsoleteForMigration = cryptoKey; - - var encrypted = PlayerPrefs.GetString(oldPrefsKey); - var type = GetRawValueType(encrypted); - - switch (type) - { - case StorageDataType.Int32: - { - var decrypted = DecryptValue(key, oldPrefsKey, 0, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetInt(key, decrypted); - break; - } - case StorageDataType.UInt32: - { - var decrypted = DecryptValue(key, oldPrefsKey, 0u, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetUInt(key, decrypted); - break; - } - case StorageDataType.String: - { - var decrypted = DecryptValue(key, oldPrefsKey, string.Empty, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetString(key, decrypted); - break; - } - case StorageDataType.Single: - { - var decrypted = DecryptValue(key, oldPrefsKey, 0f, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetFloat(key, decrypted); - break; - } - case StorageDataType.Double: - { - var decrypted = DecryptValue(key, oldPrefsKey, 0d, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetDouble(key, decrypted); - break; - } - case StorageDataType.Decimal: - { - var decrypted = DecryptValue(key, oldPrefsKey, 0m, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetDecimal(key, decrypted); - break; - } - case StorageDataType.Int64: - { - var decrypted = DecryptValue(key, oldPrefsKey, 0L, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetLong(key, decrypted); - break; - } - case StorageDataType.UInt64: - { - var decrypted = DecryptValue(key, oldPrefsKey, 0ul, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetULong(key, decrypted); - break; - } - case StorageDataType.Boolean: - { - var decrypted = DecryptValue(key, oldPrefsKey, false, encrypted); - DeviceIdHolder.SetMigrationMode(false); - SetBool(key, decrypted); - break; - } - case StorageDataType.ByteArray: - { - var decrypted = DecryptByteArrayValue(key, encrypted, 0, 0); - DeviceIdHolder.SetMigrationMode(false); - SetByteArray(key, decrypted); - break; - } - case StorageDataType.Vector2: - { - var decrypted = DecryptValue(key, encrypted, Vector2.zero); - DeviceIdHolder.SetMigrationMode(false); - SetVector2(key, decrypted); - break; - } - case StorageDataType.Vector3: - { - var decrypted = DecryptValue(key, encrypted, Vector3.zero); - DeviceIdHolder.SetMigrationMode(false); - SetVector3(key, decrypted); - break; - } - case StorageDataType.Quaternion: - { - var decrypted = DecryptValue(key, encrypted, Quaternion.identity); - DeviceIdHolder.SetMigrationMode(false); - SetQuaternion(key, decrypted); - break; - } - case StorageDataType.Color: // in ACTk1, Color32 was saved with Color type - { - var decrypted = DecryptValue(key, encrypted, new Color32(0, 0, 0, 1)); - DeviceIdHolder.SetMigrationMode(false); - SetColor(key, decrypted); - break; - } - case StorageDataType.Rect: - { - var decrypted = DecryptValue(key, encrypted, new Rect(0,0,0,0)); - DeviceIdHolder.SetMigrationMode(false); - SetRect(key, decrypted); - break; - } - default: - Debug.LogWarning(LogPrefix + "Couldn't migrate " + key + " key from ACTk v1 prefs since its type is unknown!"); - return false; - } - - Debug.Log(LogPrefix + "Obscured pref " + key + " successfully migrated to the newer format."); - - cryptoKeyObsoleteForMigration = null; - PlayerPrefs.DeleteKey(oldPrefsKey); - return true; - } -#pragma warning restore 618 - - private static byte[] EncryptDecryptBytesObsolete(byte[] bytes, int dataLength, string key) - { - var encryptionKeyLength = key.Length; - var result = new byte[dataLength]; - - for (var i = 0; i < dataLength; i++) - { - result[i] = (byte)(bytes[i] ^ key[i % encryptionKeyLength]); - } - - return result; - } - - private static byte[] DeviceIdHashModifier(string input) - { - if (DeviceIdHolder.MigratingFromACTkV1) - { - return StringUtils.StringToBytes(input + cryptoKeyObsoleteForMigration); - } - - return StringUtils.CharsToBytes(GetCryptoKey(input)); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.Routines.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.Routines.cs.meta deleted file mode 100644 index 8f63056..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.Routines.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c09fe09018b845fa977f45e1d4258802 -timeCreated: 1557319723 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.cs deleted file mode 100644 index 19a2756..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.cs +++ /dev/null @@ -1,360 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Storage -{ - using Common; - using Utils; - - using System; - using ObscuredTypes; - using UnityEngine; - - /// - /// This is an Obscured analogue of the PlayerPrefs class. - /// - /// Saves data in encrypted state, optionally locking it to the current device.
- /// Automatically encrypts PlayerPrefs on first read (auto migration), has tampering detection and more.
- /// Check out ObscuredFilePrefs if you wish to save big data amounts. - public static partial class ObscuredPrefs - { - // JFF: MD2 for "ElonShotMarsWithACar" (yes, MD2, not MD5) - internal const string PrefsKey = "9978e9f39c218d674463dab9dc728bd6"; - private const string RawNotFound = "{not_found}"; - private const string LogPrefix = ACTk.LogPrefix + "ObscuredPrefs: "; - private const byte Version = 4; - - private static bool alterationReported; - private static bool foreignSavesReported; - - private static string cryptoKeyObsolete = "e806f6"; - private static string cryptoKeyObsoleteForMigration; - - [Obsolete("Custom crypto key is now obsolete, use only for data recovery from prefs saved with previous version. " + - "This property will be removed in future versions.")] - public static string CryptoKey - { - set => cryptoKeyObsolete = value; - get => cryptoKeyObsolete; - } - - [Obsolete("Please use DeviceIdHolder.DeviceId instead.", false)] - public static string DeviceId - { - get => DeviceIdHolder.DeviceId; - set => DeviceIdHolder.DeviceId = value; - } - - private static DeviceIdHolder deviceIdHolder; - - private static DeviceIdHolder DeviceIdHolder - { - get - { - if (deviceIdHolder == null) - { - deviceIdHolder = new DeviceIdHolder(); - deviceIdHolder.SetHashCheckSumModifierDelegate(DeviceIdHashModifier); - } - - return deviceIdHolder; - } - } - - [Obsolete("Please use NotGenuineDataDetected event instead.", false)] - public static event Action OnAlterationDetected; - - [Obsolete("Please use DataFromAnotherDeviceDetected event instead.", false)] - public static event Action OnPossibleForeignSavesDetected; - - /// - /// Allows reacting on saves alteration. May be helpful for banning potential cheaters. - /// - /// Fires only once. - public static event Action NotGenuineDataDetected; - - /// - /// Allows reacting on detection of possible saves from some other device. - /// - /// May be helpful to ban potential cheaters, trying to use someone's purchased in-app goods for example.
- /// May fire on same device in case cheater manipulates saved data in some special way.
- /// Fires only once. - /// - /// \htmlonlyNOTE:\endhtmlonly May be called if same device ID was changed (pretty rare case though). - public static event Action DataFromAnotherDeviceDetected; - - /// - /// Allows saving original PlayerPrefs values while migrating to ObscuredPrefs. - /// - /// In such case, original value still will be readable after switching from PlayerPrefs to - /// ObscuredPrefs and it should be removed manually as it became unneeded.
- /// Original PlayerPrefs value will be automatically removed after read by default. - public static bool preservePlayerPrefs = false; - - /// - /// Controls DeviceLock feature settings. Read more at #DeviceLockSettings docs. - /// - public static DeviceLockSettings DeviceLockSettings { get; } = new DeviceLockSettings(); - - [Obsolete("Please use DeviceLockSettings.DeviceLockLevel property instead.", false)] - public static DeviceLockLevel lockToDevice - { - get => DeviceLockSettings.Level; - set => DeviceLockSettings.Level = value; - } - - [Obsolete("Please use DeviceLockSettings.DeviceLockTamperingSensitivity property instead.", false)] - public static bool readForeignSaves - { - get => DeviceLockSettings.Sensitivity <= DeviceLockTamperingSensitivity.Low; - - set => DeviceLockSettings.Sensitivity = value ? DeviceLockTamperingSensitivity.Low : DeviceLockTamperingSensitivity.Normal; - } - - [Obsolete("Please use DeviceLockSettings.DeviceLockTamperingSensitivity property instead.", false)] - public static bool emergencyMode - { - get => DeviceLockSettings.Sensitivity <= DeviceLockTamperingSensitivity.Disabled; - set => DeviceLockSettings.Sensitivity = value ? DeviceLockTamperingSensitivity.Disabled : DeviceLockTamperingSensitivity.Normal; - } - - [Obsolete("Please use DeviceIdHolder.ForceLockToDeviceInit() instead.", false)] - public static void ForceLockToDeviceInit() - { - DeviceIdHolder.ForceLockToDeviceInit(); - } - - /// - /// Allows to set the raw encrypted key and value. - /// - public static void SetRawValue(string encryptedKey, string encryptedValue) - { - SetStringPref(encryptedKey, encryptedValue); - } - - /// - /// Allows to get the raw encrypted key and value for the specified key. - /// - /// True if key was found and false otherwise. - public static bool GetRawValue(string key, out string encryptedKey, out string encryptedValue) - { - encryptedValue = null; - encryptedKey = EncryptKey(key); - - if (!PlayerPrefs.HasKey(encryptedKey)) - { - return false; - } - - encryptedValue = PlayerPrefs.GetString(encryptedKey); - return true; - } - - /// - /// Returns true if key exists in the ObscuredPrefs or in regular PlayerPrefs. - /// - public static bool HasKey(string key) - { - return PlayerPrefs.HasKey(key) || - PlayerPrefs.HasKey(EncryptKey(key)) || -#pragma warning disable CS0618 // Type or member is obsolete - PlayerPrefs.HasKey(EncryptKeyWithACTkV1Algorithm(key, cryptoKeyObsolete)); -#pragma warning restore CS0618 // Type or member is obsolete - } - - /// - /// Removes key and its corresponding value from the ObscuredPrefs and regular PlayerPrefs. - /// - public static void DeleteKey(string key) - { - PlayerPrefs.DeleteKey(EncryptKey(key)); - if (!preservePlayerPrefs) PlayerPrefs.DeleteKey(key); - } - - /// - /// Removes saved crypto key. Use only when you wish to completely remove all obscured prefs! - /// - /// \htmlonlyWARNING:\endhtmlonly Any existing obscured prefs will be lost after this action. - public static void DeleteCryptoKey() - { - PlayerPrefs.DeleteKey(PrefsKey); - - generatedCryptoKey = null; - DeviceIdHolder.ResetHash(); - } - - /// - /// Removes all keys and values from the preferences, including anything saved with regular PlayerPrefs. Use with caution! - /// - /// \htmlonlyWARNING:\endhtmlonly Please use this method to remove all prefs instead of PlayerPrefs.DeleteAll() to properly clear internals and avoid any data loss when saving new obscured prefs after DeleteAll() call. - public static void DeleteAll() - { - PlayerPrefs.DeleteAll(); - - generatedCryptoKey = null; - DeviceIdHolder.ResetHash(); - } - - /// - /// Writes all modified preferences to disk. - /// - /// By default, Unity writes preferences to disk on Application Quit.
- /// In case when the game crashes or otherwise prematurely exits, you might want to write the preferences at sensible 'checkpoints' in your game.
- /// This function will write to disk potentially causing a small hiccup, therefore it is not recommended to call during actual game play. - public static void Save() - { - try - { - PlayerPrefs.Save(); - } - catch (PlayerPrefsException e) - { -#if UNITY_WEBGL - Debug.LogError($"{LogPrefix}Couldn't save PlayerPrefs, looks like WebGL PlayerPrefs size exceeds 1 MB limit!"); -#endif - Debug.LogException(e); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport("Couldn't save PlayerPrefs for unknown reason!", e); - } - } - - /// - /// Sets the value of the preference identified by key. - /// - /// \htmlonlyWARNING:\endhtmlonly Not all types are supported, see ::StorageDataType for list of supported types. - public static void Set(string key, T value) - { - if (key == null) - throw new ArgumentNullException(nameof(key), $"{LogPrefix}You've passed null as key for type {typeof(T)}!"); - - if (value == null) - throw new ArgumentNullException(nameof(value),$"{LogPrefix}You've passed null as value for type {typeof(T)}!"); - - SetStringPref(EncryptKey(key), EncryptValue(key, value)); - } - - /// - /// Returns the value corresponding to key in the preference file if it exists. - /// If it doesn't exist, it will return defaultValue. - /// - /// \htmlonlyWARNING:\endhtmlonly Not all types are supported, see ::StorageDataType for list of supported types. - public static T Get(string key, T defaultValue = default) - { - if (key == null) - throw new ArgumentNullException(nameof(key)); - - var encryptedKey = EncryptKey(key); - - if (!PlayerPrefs.HasKey(encryptedKey)) - { - if (PlayerPrefs.HasKey(key)) - { - return ReadFromRegularPrefs(key, defaultValue); - } - MigrateFromACTkV1Internal(key, cryptoKeyObsolete); - } - - return DecryptValue(key, encryptedKey, defaultValue); - } - - private static T ReadFromRegularPrefs(string key, T defaultValue) - { - T unencrypted = defaultValue; - - var type = StorageDataTypeClassifier.GetStorageDataType(); - - if (type == StorageDataType.Int32) - { - unencrypted = (T)(object)PlayerPrefs.GetInt(key, (int)(object)defaultValue); - } - else if (type == StorageDataType.Single) - { - unencrypted = (T)(object)PlayerPrefs.GetFloat(key, (float)(object)defaultValue); - } - else if (type == StorageDataType.String) - { - unencrypted = (T)(object)PlayerPrefs.GetString(key, defaultValue as string); - } - - if (!preservePlayerPrefs) - { - if (type == StorageDataType.Int32 || - type == StorageDataType.Single || - type == StorageDataType.String) - { - Set(key, unencrypted); - } - - PlayerPrefs.DeleteKey(key); - } - return unencrypted; - } - - private static void SetStringPref(string encryptedKey, string encryptedValue) - { - try - { - PlayerPrefs.SetString(encryptedKey, encryptedValue); - } - catch (PlayerPrefsException e) - { -#if UNITY_WEBGL - Debug.LogError($"{LogPrefix}Couldn't write PlayerPrefs value, looks like WebGL PlayerPrefs size exceeds 1 MB limit!"); -#endif - Debug.LogException(e); - } - } - - /// - /// Use to migrate ACTk v1.* prefs to the newer format. - /// - /// Prefs key you wish to migrate. - /// Custom crypto key you used for ObscuredPrefs, if any. - /// Don't use this argument to utilize default key from ACTk v1. - /// True if migration was successful, false otherwise. - public static bool MigrateFromACTkV1(string key, string cryptoKey = "e806f6") - { - return MigrateFromACTkV1Internal(key, cryptoKey); - } - - /// - /// Use to encrypt ACTkv1's value key for later use with SetRawValue to let it migrate. - /// - /// Prefs key. - /// Crypto key you used with ACTk v1, if any. - /// Prefs key, encrypted with old ACTk v1 encryption. - public static string EncryptKeyWithACTkV1Algorithm(string key, string cryptoKey = "e806f6") - { - return Base64Utils.ToBase64(ObscuredString.EncryptDecryptObsolete(key, cryptoKey)); - } - - private static void SavesTampered() - { -#pragma warning disable 618 - if ((NotGenuineDataDetected != null || OnAlterationDetected != null) && !alterationReported) - { - alterationReported = true; - NotGenuineDataDetected?.Invoke(); - OnAlterationDetected?.Invoke(); - } -#pragma warning restore 618 - } - - private static void PossibleForeignSavesDetected() - { -#pragma warning disable 618 - if ((DataFromAnotherDeviceDetected != null || OnPossibleForeignSavesDetected != null) && !foreignSavesReported) - { - foreignSavesReported = true; - DataFromAnotherDeviceDetected?.Invoke(); - OnPossibleForeignSavesDetected?.Invoke(); - } -#pragma warning restore 618 - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.cs.meta deleted file mode 100644 index 6713245..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Storage/Prefs/ObscuredPrefs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6bf8f5de6da8c8e49a2a9db7717a3624 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time.meta deleted file mode 100644 index a680a9c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6de18cf7b50ad184991cf3d8042a9a5c -folderAsset: yes -timeCreated: 1556318424 -licenseType: Store -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time/SpeedHackProofTime.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time/SpeedHackProofTime.cs deleted file mode 100644 index 443660b..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time/SpeedHackProofTime.cs +++ /dev/null @@ -1,278 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Time -{ - using Common; - using Detectors; - using UnityEngine; - using UnityEngine.SceneManagement; - using Utils; - - /// - /// Speed-hack resistant %Time.* alternative. - /// Does proxies to the regular %Time.* APIs until actual speed hack is detected. - /// - /// Requires running \ref CodeStage.AntiCheat.Detectors.SpeedHackDetector "SpeedHackDetector" to operate properly. Make sure to start SpeedHackDetector before calling Init().
- /// Uses Unity's %Time.* APIs until speed hack is detected and switches to the speed-hack resistant time since then. - /// May be unreliable in WebGL and other sandboxed environments. - [AddComponentMenu("")] - [DisallowMultipleComponent] - public class SpeedHackProofTime : KeepAliveBehaviour - { - private static bool inited; - private static bool speedHackDetected; - - private static float reliableTime; - private static float reliableDeltaTime; - private static float reliableUnscaledTime; - private static float reliableUnscaledDeltaTime; - private static float reliableRealtimeSinceStartup; - private static float reliableTimeSinceLevelLoad; - - private static bool warningShot; - - private long currentReliableTicks; - private long lastFrameReliableTicks; - private long reliableTicksDelta; - - #region Unity Events - - private void Update() - { - if (!speedHackDetected) - { - UpdateTimeValuesFromUnityTime(); - } - else - { - currentReliableTicks = TimeUtils.GetReliableTicks(); - reliableTicksDelta = currentReliableTicks - lastFrameReliableTicks; - - UpdateReliableTimeValues(); - } - } - - #endregion - - /// - /// Call to add to the scene and force internal initialization. Gets called automatically when necessary if not initialized. - /// - /// Make sure to call it after you setup and run \ref CodeStage.AntiCheat.Detectors.SpeedHackDetector "SpeedHackDetector". - public static void Init() - { - inited = GetOrCreateInstance.InitInternal(); - } - - /// - /// Call to remove from scene and clean internal resources. - /// - public static void Dispose() - { - inited = false; - - if (Instance == null) - { - return; - } - - var detectorInstance = SpeedHackDetector.Instance; - if (detectorInstance != null) - { - detectorInstance.CheatDetected -= Instance.OnSpeedHackDetected; - } - - Destroy(Instance.gameObject); - } - - /// - /// Speed-hack resistant analogue on Unity's %Time.time API. - /// - public static float time - { - get - { - if (!inited) - { - Init(); - } - - return speedHackDetected ? reliableTime : Time.time; - } - } - - /// - /// Speed-hack resistant analogue on Unity's %Time.unscaledTime API. - /// - public static float unscaledTime - { - get - { - if (!inited) - { - Init(); - } - - return speedHackDetected ? reliableUnscaledTime : Time.unscaledTime; - } - } - - /// - /// Speed-hack resistant analogue on Unity's %Time.deltaTime API. - /// - public static float deltaTime - { - get - { - if (!inited) - { - Init(); - } - - return speedHackDetected ? reliableDeltaTime : Time.deltaTime; - } - } - - /// - /// Speed-hack resistant analogue on Unity's %Time.unscaledDeltaTime API. - /// - public static float unscaledDeltaTime - { - get - { - if (!inited) - { - Init(); - } - - return speedHackDetected ? reliableUnscaledDeltaTime : Time.unscaledDeltaTime; - } - } - - /// - /// Speed-hack resistant analogue on Unity's %Time.realtimeSinceStartup API. - /// - public static float realtimeSinceStartup - { - get - { - if (!inited) - { - Init(); - } - - return speedHackDetected ? reliableRealtimeSinceStartup : Time.realtimeSinceStartup; - } - } - - /// - /// Speed-hack resistant analogue on Unity's %Time.timeSinceLevelLoad API. - /// - public static float timeSinceLevelLoad - { - get - { - if (!inited) - { - Init(); - } - - return speedHackDetected ? reliableTimeSinceLevelLoad : Time.timeSinceLevelLoad; - } - } - -#if UNITY_EDITOR - // making sure it will reset statics even if domain reload is disabled - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void SubsystemRegistration() - { - inited = false; - speedHackDetected = false; - reliableTime = 0; - reliableDeltaTime = 0; - reliableUnscaledTime = 0; - reliableUnscaledDeltaTime = 0; - reliableRealtimeSinceStartup = 0; - reliableTimeSinceLevelLoad = 0; - warningShot = false; - Instance = null; - } -#endif - - private bool InitInternal() - { - var detectorInstance = SpeedHackDetector.Instance; - if (detectorInstance == null) - { - if (!warningShot) - { - Debug.LogWarning(ACTk.LogPrefix + - "Can't initialize SpeedHackProofTime class since it requires running SpeedHackDetector instance which was not found. " + - "Did you started SpeedHackDetector before using SpeedHackProofTime?\n" + - "SpeedHackProofTime will use unreliable vanilla Time.* APIs until you start SpeedHackDetector."); - warningShot = true; - } - - return false; - } - - if (!detectorInstance.IsRunning) - { - if (!warningShot) - { - Debug.LogWarning(ACTk.LogPrefix + - "Can't initialize SpeedHackProofTime class since it requires running SpeedHackDetector instance but only idle instance was found. " + - "Did you started SpeedHackDetector before using SpeedHackProofTime?\n" + - "SpeedHackProofTime will use unreliable vanilla Time.* APIs until you start SpeedHackDetector."); - warningShot = true; - } - - return false; - } - - detectorInstance.CheatDetected += OnSpeedHackDetected; - return true; - } - - private void UpdateTimeValuesFromUnityTime() - { - reliableTime = Time.time; - reliableDeltaTime = Time.deltaTime; - - reliableUnscaledTime = Time.unscaledTime; - reliableUnscaledDeltaTime = Time.unscaledDeltaTime; - - reliableTimeSinceLevelLoad = Time.timeSinceLevelLoad; - reliableRealtimeSinceStartup = Time.realtimeSinceStartup; - } - - private void UpdateReliableTimeValues() - { - lastFrameReliableTicks = currentReliableTicks; - - reliableUnscaledDeltaTime = (float)reliableTicksDelta / TimeUtils.TicksPerSecond; - reliableDeltaTime = reliableUnscaledDeltaTime * Time.timeScale; - - reliableTime += reliableDeltaTime; - reliableUnscaledTime += reliableUnscaledDeltaTime; - reliableRealtimeSinceStartup += reliableUnscaledDeltaTime; - reliableTimeSinceLevelLoad += reliableDeltaTime; - } - - private void OnSpeedHackDetected() - { - speedHackDetected = true; - lastFrameReliableTicks = TimeUtils.GetReliableTicks(); - } - - protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) - { - base.OnSceneLoaded(scene, mode); - - reliableTimeSinceLevelLoad = 0; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time/SpeedHackProofTime.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time/SpeedHackProofTime.cs.meta deleted file mode 100644 index 7a6b1e6..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Time/SpeedHackProofTime.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 412e16d0fa167194389bfb6445d52a7d -timeCreated: 1556318424 -licenseType: Store -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils.meta deleted file mode 100644 index d9dc971..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b0fc418f659fbf140875f58cbcdf714f -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AndroidRoutines.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AndroidRoutines.cs deleted file mode 100644 index 85cbd06..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AndroidRoutines.cs +++ /dev/null @@ -1,47 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -#if UNITY_ANDROID - -using System; -using CodeStage.AntiCheat.Common; -using UnityEngine; - -namespace CodeStage.AntiCheat.Utils -{ - internal static class AndroidRoutines - { - private const string RoutinesClassPath = "net.codestage.actk.androidnative.ACTkAndroidRoutines"; - - private static readonly Lazy RoutinesClass = new Lazy(InitJavaClass); - - public static long GetSystemNanoTime() - { - return RoutinesClass.Value?.CallStatic("GetSystemNanoTime") ?? DateTime.UtcNow.Ticks; - } - - public static string GetPackageInstallerName() - { - return RoutinesClass.Value?.CallStatic("GetPackageInstallerName"); - } - - private static AndroidJavaClass InitJavaClass() - { - try - { - return new AndroidJavaClass(RoutinesClassPath); - } - catch (Exception e) - { - ACTk.PrintExceptionForSupport($"Couldn't create instance of the {nameof(AndroidJavaClass)}: {RoutinesClassPath}!\n" + - "Please make sure you are not obfuscating public ACTk's Java Plugin classes.", e); - } - return null; - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AndroidRoutines.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AndroidRoutines.cs.meta deleted file mode 100644 index 8cb01cb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AndroidRoutines.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a1c0ad8ceca64396819c4c567ee0c78f -timeCreated: 1681999141 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AppEventsDispatcher.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AppEventsDispatcher.cs deleted file mode 100644 index 4fd48eb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AppEventsDispatcher.cs +++ /dev/null @@ -1,49 +0,0 @@ -#region copyright -// ------------------------------------------------------- -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------- -#endregion - -namespace CodeStage.AntiCheat.Utils -{ - using UnityEngine; - - internal class AppEventsDispatcher : MonoBehaviour - { - public delegate void ApplicationFocusEventHandler(bool hasFocus); - public delegate void ApplicationPauseEventHandler(bool pauseStatus); - - public event ApplicationFocusEventHandler ApplicationFocused; - public event ApplicationPauseEventHandler ApplicationPaused; - - private static AppEventsDispatcher instance; - public static AppEventsDispatcher Instance - { - get - { - if (instance == null) - { - instance = new GameObject("[ACTk] " + nameof(AppEventsDispatcher)).AddComponent(); - } - - return instance; - } - } - - private void Awake() - { - gameObject.hideFlags = HideFlags.HideInHierarchy; - DontDestroyOnLoad(transform.root.gameObject); - } - - private void OnApplicationFocus(bool hasFocus) - { - ApplicationFocused?.Invoke(hasFocus); - } - - private void OnApplicationPause(bool pauseStatus) - { - ApplicationPaused?.Invoke(pauseStatus); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AppEventsDispatcher.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AppEventsDispatcher.cs.meta deleted file mode 100644 index e62fc69..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/AppEventsDispatcher.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 80ad1116523d402784d923a4c7b71cdd -timeCreated: 1649619416 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/Base64Utils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/Base64Utils.cs deleted file mode 100644 index bf2074d..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/Base64Utils.cs +++ /dev/null @@ -1,40 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Utils -{ - using System; - - internal static class Base64Utils - { - public static string FromBase64ToString(string value) - { - return StringUtils.BytesToString(Convert.FromBase64String(value)); - } - - public static char[] FromBase64ToChars(string value) - { - return StringUtils.BytesToChars(Convert.FromBase64String(value)); - } - - public static string ToBase64(string value) - { - if (string.IsNullOrEmpty(value)) - throw new ArgumentNullException(nameof(value)); - - return Convert.ToBase64String(StringUtils.StringToBytes(value)); - } - - public static string ToBase64(char[] value) - { - if (value == null) - throw new ArgumentNullException(nameof(value)); - - return Convert.ToBase64String(StringUtils.CharsToBytes(value)); - } - - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/Base64Utils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/Base64Utils.cs.meta deleted file mode 100644 index e4af372..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/Base64Utils.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3a63abd32feb4085af3cd6e18e162b0c -timeCreated: 1556986892 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/CryptoUtils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/CryptoUtils.cs deleted file mode 100644 index b501e63..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/CryptoUtils.cs +++ /dev/null @@ -1,98 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Utils -{ - using System; - using System.IO; - using System.Security.Cryptography; - - internal static class CryptoUtils - { - private const int BufferSize = 81920; - private const byte Iterations = 10; - - private const byte AesSaltLengthBytes = 16; - private const byte AesKeyLengthBytes = 16; - - private const byte Rc2SaltLengthBytes = 8; - private const byte Rc2KeyLengthBytes = 7; - - public static void EncryptAes(Stream input, Stream output, byte[] password) - { - EncryptInternal(input, output, password, AesKeyLengthBytes); - } - - public static void DecryptAes(Stream input, Stream output, byte[] password) - { - DecryptInternal(input, output, password, AesKeyLengthBytes, AesSaltLengthBytes); - } - - public static void EncryptRc2(Stream input, Stream output, byte[] password) - { - EncryptInternal(input, output, password, Rc2KeyLengthBytes); - } - - public static void DecryptRc2(Stream input, Stream output, byte[] password) - { - DecryptInternal(input, output, password, Rc2KeyLengthBytes, Rc2SaltLengthBytes); - } - - private static void EncryptInternal(Stream input, Stream output, byte[] password, byte keyLength) where T : SymmetricAlgorithm, new() - { - using (var crypto = new T()) - { - crypto.GenerateIV(); - var salt = crypto.IV; - - using (var key = new Rfc2898DeriveBytes(password, salt, Iterations)) - { - crypto.Key = key.GetBytes(keyLength); - } - - output.Write(salt, 0, salt.Length); - - using (var encryptor = crypto.CreateEncryptor()) - { - using (var cryptoStream = new CryptoStream(output, encryptor, CryptoStreamMode.Write)) - { - input.CopyTo(cryptoStream, BufferSize); - } - } - } - } - - private static void DecryptInternal(Stream input, Stream output, byte[] password, byte keyLength, byte saltLength) where T : SymmetricAlgorithm, new() - { - try - { - using (var crypto = new T()) - { - var salt = new byte[saltLength]; - input.Read(salt, 0, saltLength); - crypto.IV = salt; - - using (var key = new Rfc2898DeriveBytes(password, salt, Iterations)) - { - crypto.Key = key.GetBytes(keyLength); - } - - using(var decryptor = crypto.CreateDecryptor()) - { - using (var cryptoStream = new CryptoStream(input, decryptor, CryptoStreamMode.Read)) - { - cryptoStream.CopyTo(output, BufferSize); - } - } - } - } - catch (Exception e) - { - throw new CryptographicException("Something went wrong while trying to decrypt data!", e); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/CryptoUtils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/CryptoUtils.cs.meta deleted file mode 100644 index 26dbf41..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/CryptoUtils.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f8b626810c114798800a9bb7c101e0a0 -timeCreated: 1620002701 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NonValidatingCertificateHandler.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NonValidatingCertificateHandler.cs deleted file mode 100644 index 2efae0c..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NonValidatingCertificateHandler.cs +++ /dev/null @@ -1,19 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using UnityEngine.Networking; - -namespace CodeStage.AntiCheat.Utils -{ - internal class NonValidatingCertificateHandler : CertificateHandler - { - // using this to bypass possible ssl errors, i.e. due way too wrong time - protected override bool ValidateCertificate(byte[] certificateData) - { - return true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NonValidatingCertificateHandler.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NonValidatingCertificateHandler.cs.meta deleted file mode 100644 index 280b91e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NonValidatingCertificateHandler.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e30989f05f4c4f648ac37eb1393e20e7 -timeCreated: 1657655872 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NumUtils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NumUtils.cs deleted file mode 100644 index 1daf6be..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NumUtils.cs +++ /dev/null @@ -1,18 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; - -namespace CodeStage.AntiCheat.Utils -{ - internal static class NumUtils - { - public static bool CompareFloats(float f1, float f2, float epsilon = float.Epsilon) - { - return f1.Equals(f2) || Math.Abs(f1 - f2) < epsilon; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NumUtils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NumUtils.cs.meta deleted file mode 100644 index c4de776..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/NumUtils.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7e877a2da4bf4ace8b8d92b9e3a3daf3 -timeCreated: 1667738122 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ProgressExtensionMethods.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ProgressExtensionMethods.cs deleted file mode 100644 index 1b06403..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ProgressExtensionMethods.cs +++ /dev/null @@ -1,28 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using CodeStage.AntiCheat.Genuine.CodeHash; - -namespace CodeStage.AntiCheat.Utils -{ - internal static class ProgressExtensionMethods - { - public static void ReportPercent(this IProgress progress, ref int latestPercent, int filesChecked, long count, string currentFile) - { - if (progress == null) - return; - - var progressPercent = (float)filesChecked / count; - var intPercent = (int)Math.Floor(progressPercent * 100); - if (latestPercent < intPercent) - { - latestPercent = intPercent; - progress.Report(FilesProgress.Step(latestPercent, currentFile)); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ProgressExtensionMethods.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ProgressExtensionMethods.cs.meta deleted file mode 100644 index 0ce4f4e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ProgressExtensionMethods.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8acb09078aef4ba98ac831c94944e1a2 -timeCreated: 1682620618 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/RandomUtils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/RandomUtils.cs deleted file mode 100644 index d25ded0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/RandomUtils.cs +++ /dev/null @@ -1,82 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Utils -{ - internal static class RandomUtils - { - public static string GenerateRandomString(int length) - { - var stringChars = new char[length]; - GenerateCharArrayKey(ref stringChars); - - return new string(stringChars); - } - - internal static byte GenerateByteKey() - { - return (byte)ThreadSafeRandom.Next(100, 255); - } - - internal static sbyte GenerateSByteKey() - { - return (sbyte)ThreadSafeRandom.Next(100, 127); - } - - internal static char GenerateCharKey() - { - return (char)ThreadSafeRandom.Next(10000, 60000); - } - - internal static short GenerateShortKey() - { - return (short)ThreadSafeRandom.Next(10000, short.MaxValue); - } - - internal static ushort GenerateUShortKey() - { - return (ushort)ThreadSafeRandom.Next(10000, ushort.MaxValue); - } - - internal static int GenerateIntKey() - { - return ThreadSafeRandom.Next(1000000000, int.MaxValue); - } - - internal static uint GenerateUIntKey() - { - return (uint)GenerateIntKey(); - } - - internal static long GenerateLongKey() - { -#if !ACTK_US_EXPORT_COMPATIBLE - return ThreadSafeRandom.NextLong(1000000000000000000, long.MaxValue); -#else - return GenerateIntKey(); -#endif - } - - internal static ulong GenerateULongKey() - { - return (ulong)GenerateLongKey(); - } - - internal static void GenerateCharArrayKey(ref char[] arrayToFill) - { - if (arrayToFill == null) - { - arrayToFill = new char[7]; - } - else if (arrayToFill.Length < 7) - { - arrayToFill = new char[7]; - } - - ThreadSafeRandom.NextChars(arrayToFill); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/RandomUtils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/RandomUtils.cs.meta deleted file mode 100644 index a2822e5..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/RandomUtils.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 961e7678dbb74bf1aac1f220ce9f4ad3 -timeCreated: 1558131800 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/StringUtils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/StringUtils.cs deleted file mode 100644 index 63d15b9..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/StringUtils.cs +++ /dev/null @@ -1,58 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Utils -{ - using System.Text; - - /// - /// Contains few utility methods for string operations used by ACTk. - /// - /// Not intended for usage from user code, - /// touch at your peril since API can change and break backwards compatibility! - public static class StringUtils - { - private static readonly char[] HexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; - - public static byte[] CharsToBytes(char[] input) - { - return Encoding.UTF8.GetBytes(input); - } - - public static byte[] StringToBytes(string input) - { - return input == null ? null : Encoding.UTF8.GetBytes(input); - } - - public static char[] BytesToChars(byte[] input) - { - return Encoding.UTF8.GetChars(input); - } - - public static string BytesToString(byte[] input) - { - return Encoding.UTF8.GetString(input); - } - - public static string BytesToString(byte[] input, int index, int count) - { - return Encoding.UTF8.GetString(input, index, count); - } - - public static string HashBytesToHexString(byte[] input) - { - var hexChars = new char[input.Length * 2]; - for (var i = 0; i < input.Length; i++) - { - var v = (input[i] ^ 144) & 0xFF; - hexChars[i * 2] = HexArray[(uint)v >> 4]; - hexChars[i * 2 + 1] = HexArray[v & 0x0F]; - } - - return new string(hexChars); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/StringUtils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/StringUtils.cs.meta deleted file mode 100644 index 5876983..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/StringUtils.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 94dadaebdbbc4a90997d87b8b9ce7c41 -timeCreated: 1558133276 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeDisposablesPool.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeDisposablesPool.cs deleted file mode 100644 index 894b6e4..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeDisposablesPool.cs +++ /dev/null @@ -1,41 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -using System; -using System.Collections.Concurrent; - -namespace CodeStage.AntiCheat.Utils -{ - public class ThreadSafeDisposablesPool where T : IDisposable, new() - { - private readonly ConcurrentBag objects; - private readonly Func objectGenerator; - - public ThreadSafeDisposablesPool(Func objectGenerator) - { - this.objectGenerator = objectGenerator ?? throw new ArgumentNullException(nameof(objectGenerator)); - objects = new ConcurrentBag(); - } - - public T Get() - { - return objects.TryTake(out T item) ? item : objectGenerator(); - } - - public void Release(T item) - { - objects.Add(item); - } - - public void Dispose() - { - while (objects.TryTake(out T item)) - { - item.Dispose(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeDisposablesPool.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeDisposablesPool.cs.meta deleted file mode 100644 index 9943129..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeDisposablesPool.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 36a7cddae1a24aacb514e029fed03fa5 -timeCreated: 1682495385 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeRandom.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeRandom.cs deleted file mode 100644 index db7717a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeRandom.cs +++ /dev/null @@ -1,148 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -namespace CodeStage.AntiCheat.Utils -{ - using System; - - /// - /// Random utility which can be used from background threads. - /// - public static class ThreadSafeRandom - { - private static readonly Random Global = new Random(); - - [ThreadStatic] - private static Random local; - - /// - /// Generates random int number within specified range. - /// - /// Minimal value, inclusive. - /// Maximum value, exclusive. - /// Random value in specified range. - public static int Next(int minInclusive, int maxExclusive) - { - var inst = local; - - if (inst != null) - { - return inst.Next(minInclusive, maxExclusive); - } - - int seed; - - lock (Global) - { - seed = Global.Next(); - } - - local = inst = new Random(seed); - return inst.Next(minInclusive, maxExclusive); - } - - /// - /// Generates random long number within specified range. - /// - /// Minimal value, inclusive. - /// Maximum value, exclusive. - /// Random value in specified range. - public static long NextLong(long minInclusive, long maxExclusive) - { - var inst = local; - - if (inst != null) - { - return NextLong(inst, minInclusive, maxExclusive); - } - - int seed; - - lock (Global) - { - seed = Global.Next(); - } - - local = inst = new Random(seed); - return NextLong(inst, minInclusive, maxExclusive); - } - - /// - /// Fills passed buffer with random bytes. - /// - /// Buffer filled with random bytes. - public static void NextBytes(byte[] buffer) - { - if (buffer == null) - throw new ArgumentNullException(nameof(buffer)); - - var inst = local; - - if (inst != null) - { - inst.NextBytes(buffer); - return; - } - - int seed; - - lock (Global) - { - seed = Global.Next(); - } - - local = inst = new Random(seed); - inst.NextBytes(buffer); - } - - /// - /// Fills passed buffer with random char values. - /// - /// Buffer filled with random char values. - public static void NextChars(char[] buffer) - { - if (buffer == null) - throw new ArgumentNullException(nameof(buffer)); - - var inst = local; - - if (inst != null) - { - NextChars(inst, buffer); - return; - } - - int seed; - - lock (Global) - { - seed = Global.Next(); - } - - local = inst = new Random(seed); - NextChars(inst, buffer); - } - - private static long NextLong(Random random, long minInclusive, long maxExclusive) - { - var result = (long)random.Next((int)(minInclusive >> 32), (int)(maxExclusive >> 32)); - result <<= 32; - result |= (uint)random.Next((int)minInclusive, (int)maxExclusive); - return result; - } - - private static void NextChars(Random random, char[] buffer) - { - for (var i = 0; i < buffer.Length; ++i) - { - // capping to byte value here to not exceed - // 56 bit crypto keys length requirement by - // Apple to avoid cryptography declaration - buffer[i] = (char) (random.Next() % 256); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeRandom.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeRandom.cs.meta deleted file mode 100644 index 8acf5f2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/ThreadSafeRandom.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8e4d27a9c75b48ca82b4eee37273f1b2 -timeCreated: 1552380891 \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/TimeUtils.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/TimeUtils.cs deleted file mode 100644 index c965f1e..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/TimeUtils.cs +++ /dev/null @@ -1,92 +0,0 @@ -#region copyright -// ------------------------------------------------------ -// Copyright (C) Dmitriy Yukhanov [https://codestage.net] -// ------------------------------------------------------ -#endregion - -#if UNITY_WEBGL && !UNITY_EDITOR -#define ACTK_WEBGL_BUILD -#endif - -namespace CodeStage.AntiCheat.Utils -{ - using System; - using UnityEngine; - - internal static class TimeUtils - { - public const long TicksPerSecond = TimeSpan.TicksPerMillisecond * 1000; - - /// - /// Gets speed hacks unbiased current time ticks. - /// - /// Reliable current time in ticks. - public static long GetReliableTicks() - { - long ticks = 0; - -#if !UNITY_EDITOR -#if UNITY_ANDROID - ticks = TryReadTicksFromAndroidRoutine(); -#elif ACTK_WEBGL_BUILD - ticks = TryReadTicksFromWebGLRoutine(); -#endif -#endif - if (ticks == 0) - ticks = DateTime.UtcNow.Ticks; - - return ticks; - } - - public static long GetEnvironmentTicks() - { - return Environment.TickCount * TimeSpan.TicksPerMillisecond; - } - - public static long GetRealtimeTicks() - { - return (long)(Time.realtimeSinceStartup * TicksPerSecond); - } - - public static long GetDspTicks() - { -#if UNITY_AUDIO_MODULE - return (long)(AudioSettings.dspTime * TicksPerSecond); -#else - return 0; -#endif - } - -#if UNITY_ANDROID - private static long TryReadTicksFromAndroidRoutine() - { - long result = 0; - - try - { - // getting time in nanoseconds from the native Android timer - // since some random fixed and JVM initialization point - // (it even may be a future so value could be negative) - result = AndroidRoutines.GetSystemNanoTime(); - result /= 100; - } - catch (Exception e) - { - Common.ACTk.PrintExceptionForSupport("Couldn't call static method from the Android Routines Class!", e); - } - - return result; - } - -#elif ACTK_WEBGL_BUILD - [System.Runtime.InteropServices.DllImport("__Internal")] - private static extern double GetUTCTicks(); - - private static long TryReadTicksFromWebGLRoutine() - { - var ticks = (long)GetUTCTicks(); - return ticks < 0 ? 0 : ticks; - } -#endif - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/TimeUtils.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/TimeUtils.cs.meta deleted file mode 100644 index 44140a3..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/TimeUtils.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c07c3153d9ad3cd48b72fc51968c3760 -timeCreated: 1556312318 -licenseType: Store -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/xxHash.cs b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/xxHash.cs deleted file mode 100644 index fa44fb8..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/xxHash.cs +++ /dev/null @@ -1,195 +0,0 @@ -/* -xxHashSharp - A pure C# implementation of xxhash -Copyright (C) 2014, Seok-Ju, Yun. (https://github.com/noricube/xxHashSharp) -Specific optimization, Stream version and inlining by Dmitriy Yukhanov (https://codestage.net) -Original C Implementation Copyright (C) 2012-2014, Yann Collet. (https://code.google.com/p/xxhash/) -BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -namespace CodeStage.AntiCheat.Utils -{ - using System.IO; - - /// - /// A little bit changed xxHashSharp implementation. - /// Original Copyright (C) 2014, Seok-Ju, Yun. (https://github.com/noricube/xxHashSharp) - /// - /// Not intended for usage from user code, - /// touch at your peril since API can change and break backwards compatibility! - public static class xxHash - { - private const uint PRIME32_1 = 2654435761U; - private const uint PRIME32_2 = 2246822519U; - private const uint PRIME32_3 = 3266489917U; - private const uint PRIME32_4 = 668265263U; - private const uint PRIME32_5 = 374761393U; - - public static uint CalculateHash(byte[] buf, int len, uint seed) - { - uint h32; - int index = 0; - - if (len >= 16) - { - int limit = len - 16; - uint v1 = seed + PRIME32_1 + PRIME32_2; - uint v2 = seed + PRIME32_2; - uint v3 = seed; - uint v4 = seed - PRIME32_1; - - do - { - uint read_value = (uint)(buf[index++] | buf[index++] << 8 | buf[index++] << 16 | buf[index++] << 24); - v1 += read_value * PRIME32_2; - v1 = (v1 << 13) | (v1 >> 19); - v1 *= PRIME32_1; - - read_value = (uint)(buf[index++] | buf[index++] << 8 | buf[index++] << 16 | buf[index++] << 24); - v2 += read_value * PRIME32_2; - v2 = (v2 << 13) | (v2 >> 19); - v2 *= PRIME32_1; - - read_value = (uint)(buf[index++] | buf[index++] << 8 | buf[index++] << 16 | buf[index++] << 24); - v3 += read_value * PRIME32_2; - v3 = (v3 << 13) | (v3 >> 19); - v3 *= PRIME32_1; - - read_value = (uint)(buf[index++] | buf[index++] << 8 | buf[index++] << 16 | buf[index++] << 24); - v4 += read_value * PRIME32_2; - v4 = (v4 << 13) | (v4 >> 19); - v4 *= PRIME32_1; - - } while (index <= limit); - - h32 = ((v1 << 1) | (v1 >> 31)) + ((v2 << 7) | (v2 >> 25)) + ((v3 << 12) | (v3 >> 20)) + ((v4 << 18) | (v4 >> 14)); - } - else - { - h32 = seed + PRIME32_5; - } - - h32 += (uint)len; - - while (index <= len - 4) - { - h32 += (uint)(buf[index++] | buf[index++] << 8 | buf[index++] << 16 | buf[index++] << 24) * PRIME32_3; - h32 = ((h32 << 17) | (h32 >> 15)) * PRIME32_4; - } - - while (index < len) - { - h32 += buf[index] * PRIME32_5; - h32 = ((h32 << 11) | (h32 >> 21)) * PRIME32_1; - index++; - } - - h32 ^= h32 >> 15; - h32 *= PRIME32_2; - h32 ^= h32 >> 13; - h32 *= PRIME32_3; - h32 ^= h32 >> 16; - - return h32; - } - - public static uint CalculateHash(Stream buf, long len, uint seed) - { - uint h32; - var index = 0; - buf.Position = 0; - - if (len >= 16) - { - var limit = len - 16; - var v1 = seed + PRIME32_1 + PRIME32_2; - var v2 = seed + PRIME32_2; - var v3 = seed; - var v4 = seed - PRIME32_1; - - do - { - var read_value = (uint)(buf.ReadByte() | buf.ReadByte() << 8 | buf.ReadByte() << 16 | buf.ReadByte() << 24); - index += 4; - - v1 += read_value * PRIME32_2; - v1 = (v1 << 13) | (v1 >> 19); - v1 *= PRIME32_1; - - read_value = (uint)(buf.ReadByte() | buf.ReadByte() << 8 | buf.ReadByte() << 16 | buf.ReadByte() << 24); - index += 4; - - v2 += read_value * PRIME32_2; - v2 = (v2 << 13) | (v2 >> 19); - v2 *= PRIME32_1; - - read_value = (uint)(buf.ReadByte() | buf.ReadByte() << 8 | buf.ReadByte() << 16 | buf.ReadByte() << 24); - index += 4; - v3 += read_value * PRIME32_2; - v3 = (v3 << 13) | (v3 >> 19); - v3 *= PRIME32_1; - - read_value = (uint)(buf.ReadByte() | buf.ReadByte() << 8 | buf.ReadByte() << 16 | buf.ReadByte() << 24); - index += 4; - v4 += read_value * PRIME32_2; - v4 = (v4 << 13) | (v4 >> 19); - v4 *= PRIME32_1; - - } while (index <= limit); - - h32 = ((v1 << 1) | (v1 >> 31)) + ((v2 << 7) | (v2 >> 25)) + ((v3 << 12) | (v3 >> 20)) + ((v4 << 18) | (v4 >> 14)); - } - else - { - h32 = seed + PRIME32_5; - } - - h32 += (uint)len; - - while (index <= len - 4) - { - h32 += (uint)(buf.ReadByte() | buf.ReadByte() << 8 | buf.ReadByte() << 16 | buf.ReadByte() << 24) * PRIME32_3; - index += 4; - h32 = ((h32 << 17) | (h32 >> 15)) * PRIME32_4; - } - - while (index < len) - { - h32 += (byte)buf.ReadByte() * PRIME32_5; - h32 = ((h32 << 11) | (h32 >> 21)) * PRIME32_1; - index++; - } - - h32 ^= h32 >> 15; - h32 *= PRIME32_2; - h32 ^= h32 >> 13; - h32 *= PRIME32_3; - h32 ^= h32 >> 16; - - buf.Position = 0; - - return h32; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/xxHash.cs.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/xxHash.cs.meta deleted file mode 100644 index 997afa2..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Scripts/Utils/xxHash.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ca55307c6e2ac774987295514b80aa65 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders.meta deleted file mode 100644 index 9f2e0b0..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 01bd3305f71f4544aa9db9079f88e4ce -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders/WallHackTexture.shader b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders/WallHackTexture.shader deleted file mode 100644 index 2af6a6a..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders/WallHackTexture.shader +++ /dev/null @@ -1,45 +0,0 @@ -Shader "Hidden/ACTk/WallHackTexture" { - Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - } - - SubShader { - Tags { "RenderType"="Opaque" "Queue" = "Transparent" } - LOD 100 - Fog { Mode Off } - Pass { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #include "UnityCG.cginc" - - struct appdata_t { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD0; - }; - - struct v2f { - float4 vertex : SV_POSITION; - half2 texcoord : TEXCOORD0; - }; - - sampler2D _MainTex; - float4 _MainTex_ST; - - v2f vert (appdata_t v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); - return o; - } - - fixed4 frag (v2f i) : SV_Target - { - fixed4 col = tex2D(_MainTex, i.texcoord); - return col; - } - ENDCG - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders/WallHackTexture.shader.meta b/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders/WallHackTexture.shader.meta deleted file mode 100644 index 9ab7aeb..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Runtime/Shaders/WallHackTexture.shader.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: daa473204a35ad242922f896f206d931 -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/CodeStage/AntiCheatToolkit/Third-Party Notices.txt b/Assets/Plugins/CodeStage/AntiCheatToolkit/Third-Party Notices.txt deleted file mode 100644 index ca3a5fd..0000000 --- a/Assets/Plugins/CodeStage/AntiCheatToolkit/Third-Party Notices.txt +++ /dev/null @@ -1,5 +0,0 @@ -Asset uses these third-party software: -- xxHashSharp under BSD 2-Clause License - - used both in Runtime and Editor -- SharpZipLib under MIT License - - used only in Editor \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3.meta b/Assets/Plugins/Easy Save 3.meta deleted file mode 100644 index 91a974d..0000000 --- a/Assets/Plugins/Easy Save 3.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aa1065870cf1e3447a67b5af3f2026a5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Change Log.meta b/Assets/Plugins/Easy Save 3/Change Log.meta deleted file mode 100644 index d3a1e9a..0000000 --- a/Assets/Plugins/Easy Save 3/Change Log.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3115cc2dd2d49d742b3cfe0b237788ce -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Change Log/Change Log.txt b/Assets/Plugins/Easy Save 3/Change Log/Change Log.txt deleted file mode 100644 index e3aa722..0000000 --- a/Assets/Plugins/Easy Save 3/Change Log/Change Log.txt +++ /dev/null @@ -1,268 +0,0 @@ -3.5.20 -- Added support for Nullable types. -- Resolved issue where a Debug.Log call was not stripped from the release package. - -3.5.19 -- NEW: Added Save Slots functionality (see https://docs.moodkie.com/easy-save-3/es3-guides/creating-save-slots/). -- All dependency Texture2Ds of a SpriteAtlas will be automatically excluded from reference managers. -- Added option to Set Reference ID in context menus, allowing people to add or change a reference to use a specific reference ID. -- Resolved issue where ES3.GetFiles would not work with some types of relative path. -- Resolved issue where CharacterController isn't always re-enabled after loading. -- Resolved issue where excluding references from a manager would not persist in specific situations. - -3.5.18 -- Non-functional changes (Asset Store metadata changes) - -3.5.17 -- Changed referencing so that in most cases it will find any reference manager if it can't find one in the relevant scene and outputting a warning when this happens. - -3.5.16 -- Moved methods in ES3.cs inside of DISABLE_ENCRYPTION define so they are also stripped accordingly. - -3.5.15 -- Resolved issue where a scene not in the build list could cause the Prefabs window to fail to open. - -3.5.14 -- Resolved issue on some versions of Unity where the Editor would throw a harmless MissingReferenceException after removing an Easy Save 3 Manager. - -3.5.13 -- Resolved issue where adding a manager to scene or enabling Auto Save would throw a NullReferenceException. - -3.5.12 -- References in DontDestroyOnLoad are now added to the first available reference manager rather than requiring it's own manager. - -3.5.11 -- GameObjects and Components are now added to their scene's reference manager when using additive scenes. -- Resolved issue where enums were incorrectly generated in ES3Types due to the type list not being initialized intermittently. -- Resolved harmless bug where an ArgumentException is thrown when trying to add scene which has already been added to scene manager. - -3.5.10 -- Resolved issue where loading a value with a dervied type using caching would cause it to be loaded as it's parent type. - -3.5.9 -- Added support for Unity 6. - -3.5.8 -- Separated Add References to Mgr into Add References to Mgr and Add Dependencies to Mgr. -- Resolved issue where references were added to manager when Auto Add References was disabled as Component was created in scene. -- Resolved issue in some cases where Optimize would not remove cached references to deleted objects. -- Resolved issue where creating an ES3Type for an object which has generic collection field with an element of the same type as itself would cause a stack overflow in certain edge cases. - -3.5.7 -- Removed legacy dependency-gathering code which requires the UnityEngine.UI library. -- Resolved issues where ES3UserTypes aren't added to the reference manager on occasion. -- Reference managers are now no longer merged when using additive scenes. -- Worked around bug at Unity's end causing the Auto Save window to throw errors on Unity 2021. -- Resolved issue where ES3Prefab would throw an ArgumentException for writing the same item in the localToGlobal Dictionary. -- Resolved issue where saving primitives using PlayMaker actions with caching would cause a format error. -- Worked around issue with PlayMaker where assigning NULL to a GameObject invalidates the type of the FsmVariable. -- Made a change to ES3Cloud so that an error is manually sent when misconfigured servers reject POST parameters but continue to execute the PHP script. -- Resolved issue where priority of built-in types conflicted with user-generated types. - -3.5.6 -- ES3GameObject Component is now automatically moved to end of Components List to ensure that it's loaded after the Components it references. -- Resolved merge issue where cached data was being stored with it's generic type rather than actual type. -- Resolved issue where private members of inherited types wouldn't be saved in specific circumstances. - -3.5.5 -- References are now gathered when saving a scene and when changes are made in a scene, not when entering playmode. -- Added option to refresh reference managers in all scenes (Tools > Easy Save 3 > Refresh References for All Scenes). -- Added option to exclude references from being added to the manager (right-click > Easy Save 3 > Exclude Reference(s) from Manager). -- Added GetColumnLength and GetRowLength methods to ES3Spreadsheet. -- Resolved issue where enums would cause a FormatException when they were fields of a class with an ES3Type. -- Worked around Unity bug where initialisation events are sometimes not called when importing Easy Save. -- Worked around Unity bug where GetDirectoryName fails to work with a path to a file. -- Auto Saves are now processed in order of their position in the hierarchy. -- Resolved issue where members would be serialized twice when it was marked as ES3Serializable in both concrete and base classes. -- Worked around Unity bug where Unity would throw an error when trying to set a scripting define symbol for Stadia. -- Accounted for change in 2022.3 LTS where Unity have fixed a typo in their Editor API ("ToolbarSeachTextField") - -3.5.4 -- You can now enable Assembly Definition Files for Easy Save by going to Tools > Easy Save 3 > Enable Assembly Definition Files. -- Accounted for edge case where ES3File would be merged rather than overwritten, preventing keys from being deleted from the stored file. -- Resolved issue where reference collection can cause an InvalidOperationException (Collection was modified). -- Worked around bug with Unity Runner Template which prevented Easy Save types from loading. -- overrideSprite is no longer saved when saving UI.Image as Unity now returns the Sprite rather than null when this is unassigned. -- Resolved issue where Auto Save's events sometimes did not update when changing the active scene in the Editor. -- Resolved issue where saving a non-prefab instance GameObject with multiple Components would only save one of those Components. - -3.5.3 -- Attempting to save a Material with a RenderTexture will now throw a warning indicating that the RenderTexture won't be saved. -- Added filtering by tag in the Auto Save window by prefixing 'tag:' to the search query. - -3.5.2 -- Resolved issue where RectTransform was loaded incorrectly as parent is deserialized before anchoredPosition. -- Removed warning regarding Transform parents being set using the accessor rather than the SetParent method. -- ES3.CopyFile now automatically creates the target directory if it doesn't exist. -- Added an option to encrypt/compress raw cached data if the setting is defined for the cached file (postprocessRawCachedData). -- 'Add References to Manager' now permanently adds prefabs to the manager if 'Auto Add Prefabs to Manager' is enabled. -- Assembly names are now in alphabetical order so changes in order aren't registered as a change in version control. -- Using 'Add References to Manager' on a folder now adds all supported assets in that folder to the reference manager. - -3.5.1 -- Reverted changes to LoadRaw methods when using Cache as it caused regression issues. - -3.5.0 -- Added support for NativeArray. -- Managed case where ES3.EncryptBytes/DecryptBytes encountered an encoding issue. -- Worked around Unity bug where invalid assembly list would cause issues when exceptions are disabled. -- Worked around bug at Unity's end where unloaded scenes are returned by their methods. -- Resolved issue where scripting define symbols were overwritten on older versions of Unity. -- Worked around bug where inertia tensor value is rejected even when set as it's default upon loading. -- Most Material properties can now be saved, including custom properties. -- When saving a parent GameObject, children automatically have their parent set to the parent GameObject rather than loading this value by reference. -- Support added for Tuples. -- Added overload for AppendRaw which accepts a string and a filename. -- Worked around Unity bug where EventType.Layout isn't called when moving tabs for first time, causing Types pane recent types to be uninitialised. -- Worked around Unity bug which infrequently prevented Auto Save changes from persisting. -- Added ES3.Compress and ES3.Decompress methods. -- Performing 'Add Reference(s) to Manager' for a Texture2D will also add it's Sprite if one is present. -- Classes without parameterless constructors can now be serialised (note that their constructor will not be called). -- Resolved issue where an unloaded scene warning was thrown when scene is open but manually marked as unloaded in the Editor. - -3.4.2 -- Resolved issue where Unity Visual Scripting defines were not present on some versions of Unity. - -3.4.1 -- Added support for Particle System Bursts -- Resolved issue where Auto Save would sometimes save all Components regardless of settings. -- Resolved issue where Auto Save icon would not highlight when fields are selected. -- Structs with private properties or fields can now be serialized. -- Loading a blank string from a spreadsheet now returns a blank string rather than null. -- The reference manager will only collect references up to 3 levels deep to improve performance. -- System.Random support has been dropped due to Unity's implementation changing, making it non-serializable. -- ES3Ref is no longer stored twice for ScriptableObjects. -- Added support for Numerics.BigInteger. -- Internal fields of the ES3AutoSave Component are no longer displayed in the Editor. -- If a reference ID for a Component exists, it now ignores the GameObject ID so that a new GO instance is not created. -- Added a Get Streaming Assets Path action for Playmaker. -- Added non-generic versions of the ES3Spreadsheet methods to work around issue with Bolt. -- Worked around issue with Bolt where it would crash if you have two methods with the same parameters but one is generic. -- Resolved issue where Components marked as destroyed but not yet destroyed would cause unexpected behaviour. -- Auto Save will now work for additive scenes. -- Resolved issue where reference manager wasn't automatically updated when scene was open additively prior to runtime. -- Support added for Unity Visual Scripting. - -3.4.0 -- Caching now works seamlessly between Cloud and Auto Save. -- Added Save Multiple and Load Multiple actions to enable saving multiple specific variables at once. -- Added extra overloads to the ES3.LoadString method. -- Guids are now natively supported. -- Transform now stores the sibling index. -- Getting a timestamp for a file in cache which doesn't exist now returns a zero timestamp. -- Resolved issues where enums would sometiimes not serialize correctly when creating an ES3Type script for a class. -- Resolved issue where DownloadTimestamp PlayMaker action would download the wrong data. -- Resolved issue where reflection does not recognise a collection of a nested type as a nested type. -- Resolved issue where ES3Cloud was merged with the debug branch. -- Resolved issue where Sprites with atlased Textures would save an incorrect Rect. -- Resolved issue where ES3Spreadsheet was serializing primitives as objects when using PlayMaker actions. - -3.3.2f7 -- Type data is now stored when using ES3.Serialize. -- Worked around issue where Unity would return an incorrect number of assemblies. - -3.3.2f6 -- ES3Spreadsheet now correctly serializes object types into a CSV file. -- Resolved issue where an object[] containing primitive types could not be loaded in some situations. -- Worked around issue where PlayMaker wouldn't initialize variable before it's value was reset. -- Created a workaround for some situations where Unity creates new instances of ScriptableObjects in Assets at runtime. -- Resolved issue where Base-64 encoding option would not work with newline option in PlayMaker SaveRaw action. - -3.3.2f5 -- Resolved issue where scripts were not overwritten by Asset Store importer, causing Easy Save to be unstable. - -3.3.2f4 -- Resolved issue where Save action for PlayMaker could return NullReferenceException due to using the wrong ES3.Save override. -- Worked around IL2CPP bug where reflection would not find particular ES3Types on iOS -- Resolved issue where trying to store an empty/unassigned PlayMaker object would throw a NulReferenceException. -- Keys of a type which no longer exists in the project are now automatically removed -- Abstract types used in an ES3Type will now work as intended - -3.3.2f3 -- Added GameObject variables to Auto Save -- Resolved issue where Sprites would be loaded with the incorrect pivot. -- Resolved issue where Stacks were loaded in reverse. -- Added a 'quality' field to the ES3.SaveImage method to allow the quality to be specified when saving JPEGs. - -3.3.2f2 -- Added method which allows raw bytes to be uploaded via ES3Cloud. -- Worked around issue where File IO was called on platforms which don't support it -- Accounted for situations where Component should evaluate to null but doesn't -- Updated PlayMaker actions to work around issue where global variables sometimes go missing -- Objects with the NotEditable hideFlags can now be stored by reference -- Worked around Unity bug where it fails to deserialize data when Prefab mode is open -- Resolved issue where global 'Save GameObject Children' settings can take precedence over Auto Save settings -- 'Enable Easy Save for Prefab' context menu item now works when multiple objects are selected. - -3.3.2f1 -- Resolved issue where Components on prefabs would sometimes not be added to the reference manager. -- Resolved issue where reference ID was read unnecesserily, causing format exception. -- Resolved issue where child prefabs would not be recognised by manager. - -3.3.1p12 -- Resolved case where certain references would not be added to manager. - -3.3.1f11 -- Fixed issue where using ES3.CacheFile with an encrypted file could fail. -- Fixed issue where Directory.GetFiles cannot process a full path on certain configurations. -- Accounted for case where HideFlags are changed during build process. -- Added a timeout parameter to the ES3Cloud constructor. -- ES3.Serialize and ES3.Deserialize now work with encryption and compression - -3.3.1f10 -- Full support for projects which use multiple scenes at once. -- Added ES3.Encrypt and ES3.Decrypt methods. -- Supported saving the active state and FsmVariables of PlayMaker FSMs. -- Added edge case for SkinnedMeshRenderers which use LODs to ensure that all meshes and Materials are added to the reference manager. -- Ensured that Auto Update References setting is ackowledged when first adding manager to scene. -- Moved menu items into Tools/Easy Save 3 menu. -- Using LoadInto will now assign the loaded reference ID to the object you're loading into. - -3.3.1f9 -- It's not possible to add an ES3ReferenceMgr to your scene directly, ensuring that initialisation code is performed. -- Compressed files can now be cached. -- Ability to only add prefabs directly referenced by your scene to the manager. - -3.3.1f8 -- Caching is now enabled by default for Auto Save, significantly improving performance. -- Added ES3.LoadString method so you do not need to provide all parameters to use the defaultValue overload. -- Resolved case where SaveAll would not correctly save some types of array. -- Resolved case where global references would not be acknowledged. - -3.3.1f7 -- Serialization depth limit has been raised to account for projects with deep hierearchies -- Fixed issue where Easy Save 3 Manager could not be found for scenes which had not been saved. -- Resolved issue where Add Reference(s) to Manager would not dirty scene when Auto Update References was disabled. -- Improved Editor performance by accounting for situations where post-processing events would be called multiple times. - -3.3.1f6 -- Internal fields of the UnityEngine.Object class are hidden in the Types pane as they are not serialisable. -- Accounted for edge case where unassigned script is returned by GameObject.GetComponents(). -- ES3Settings constructor now accepts any settings enum (e.g. ES3.Location). -- No longer throws warning when multiple scenes are open. - -3.3.1f5 -- Updated PlayMaker actions. -- Provided workaround for issue where IL2CPP stripper removes methods which are marked to not be stripped. -- Performance updates. - -3.3.1f4 -- Improved performance when gathering references for reference manager. - -3.3.1f3 -- Added Cache as a storage location, providing a much simpler way of caching data. -- References can now be added by right-clicking the object and going to Easy Save 3 > Add Reference to Manager. -- Floats and doubles are now stored with full precision. -- Assorted bug fixes. - -3.3.1f2 -- Added compression, reducing file size by 85% on average when enabled -- JSON is now pretty printed (formatted) by default -- Added attributes to control serialisation -- Private fields in inherited classes are now stored -- Added search capabilities to the Auto Save window -- The way in which GameObjects is saved is now more flexible -- The reference manager is now updated whenever playmode is entered -- Null values in the global manager are now automatically removed -- Fixed issue where default settings were not applied properly -- Fixed issue where ES3Types would be stored in Easy Save root rather than in Assets/Easy Save 3/ \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor.meta b/Assets/Plugins/Easy Save 3/Editor.meta deleted file mode 100644 index 4ee985c..0000000 --- a/Assets/Plugins/Easy Save 3/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 600dbc665993148f7b59ae7356fe862e -folderAsset: yes -timeCreated: 1474041532 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/AddES3Prefab.cs b/Assets/Plugins/Easy Save 3/Editor/AddES3Prefab.cs deleted file mode 100644 index 9277e27..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/AddES3Prefab.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using ES3Internal; -using System.Linq; -using UnityEngine.SceneManagement; - -namespace ES3Editor -{ - public class AddES3Prefab : Editor - { - [MenuItem("GameObject/Easy Save 3/Enable Easy Save for Prefab(s)", false, 1001)] - [MenuItem("Assets/Easy Save 3/Enable Easy Save for Prefab(s)", false, 1001)] - public static void Enable() - { - if (Selection.gameObjects == null || Selection.gameObjects.Length == 0) - return; - - foreach (var obj in Selection.gameObjects) - { - // Don't add the Component to a GameObject which already has it. - if (obj == null || (obj.GetComponent() != null)) - continue; - - var go = obj; - - #if UNITY_2018_3_OR_NEWER - if (PrefabUtility.GetPrefabInstanceStatus(go) != PrefabInstanceStatus.NotAPrefab) - { - go = (GameObject)PrefabUtility.GetCorrespondingObjectFromSource(go); - if (go == null) - continue; - } - #else - if(PrefabUtility.GetPrefabType(go) != PrefabType.Prefab) - { - go = (GameObject)PrefabUtility.GetPrefabParent(go); - if(go == null) - continue; - } - #endif - - var es3Prefab = Undo.AddComponent(go); - es3Prefab.GeneratePrefabReferences(); - - var mgr = ES3ReferenceMgr.GetManagerFromScene(SceneManager.GetActiveScene()); - if (mgr != null) - { - mgr.AddPrefab(es3Prefab); - EditorUtility.SetDirty(mgr); - } - } - } - - [MenuItem("GameObject/Easy Save 3/Enable Easy Save for Prefab(s)", true, 1001)] - [MenuItem("Assets/Easy Save 3/Enable Easy Save for Prefab(s)", true, 1001)] - public static bool Validate() - { - return Selection.gameObjects != null && Selection.gameObjects.Length > 0; - } - } - - public class RemoveES3Prefab : Editor - { - [MenuItem("GameObject/Easy Save 3/Disable Easy Save for Prefab(s)", false, 1001)] - [MenuItem("Assets/Easy Save 3/Disable Easy Save for Prefab(s)", false, 1001)] - public static void Enable() - { - if (Selection.gameObjects == null || Selection.gameObjects.Length == 0) - return; - - foreach (var obj in Selection.gameObjects) - { - var es3prefab = obj.GetComponent(); - if (es3prefab != null) - Undo.DestroyObjectImmediate(es3prefab); - } - } - - [MenuItem("GameObject/Easy Save 3/Disable Easy Save for Prefab(s)", true, 1001)] - [MenuItem("Assets/Easy Save 3/Disable Easy Save for Prefab(s)", true, 1001)] - public static bool Validate() - { - return Selection.gameObjects != null && Selection.gameObjects.Length > 0; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/AddES3Prefab.cs.meta b/Assets/Plugins/Easy Save 3/Editor/AddES3Prefab.cs.meta deleted file mode 100644 index 745029b..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/AddES3Prefab.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 337c3be705d1942b3bf318b5b29aa7cb -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/AutoSaveWindow.cs b/Assets/Plugins/Easy Save 3/Editor/AutoSaveWindow.cs deleted file mode 100644 index ffb2ff3..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/AutoSaveWindow.cs +++ /dev/null @@ -1,369 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using ES3Internal; -using UnityEngine.SceneManagement; -using UnityEditor.SceneManagement; - -namespace ES3Editor -{ - [System.Serializable] - public class AutoSaveWindow : SubWindow - { - public bool showAdvancedSettings = false; - - public ES3AutoSaveMgr mgr = null; - - private HierarchyItem[] hierarchy = null; - public HierarchyItem selected = null; - - private Vector2 hierarchyScrollPosition = Vector2.zero; - - private bool sceneOpen = true; - - private string searchTerm = ""; - - public AutoSaveWindow(EditorWindow window) : base("Auto Save", window) - { - EditorSceneManager.activeSceneChangedInEditMode += ChangedActiveScene; - } - - private void ChangedActiveScene(Scene current, Scene next) - { - mgr = null; - Init(); - } - - public override void OnGUI() - { - Init(); - - if(mgr == null) - { - EditorGUILayout.Space(); - if (GUILayout.Button("Enable Auto Save for this scene")) - mgr = ES3Postprocessor.AddManagerToScene().GetComponent(); - else - return; - } - - var style = EditorStyle.Get; - - using (var changeCheck = new EditorGUI.ChangeCheckScope()) - { - using (var vertical = new EditorGUILayout.VerticalScope(style.areaPadded)) - { - //GUILayout.Label("Settings for current scene", style.heading); - mgr.saveEvent = (ES3AutoSaveMgr.SaveEvent)EditorGUILayout.EnumPopup("Save Event", mgr.saveEvent); - mgr.loadEvent = (ES3AutoSaveMgr.LoadEvent)EditorGUILayout.EnumPopup("Load Event", mgr.loadEvent); - - EditorGUILayout.Space(); - - showAdvancedSettings = EditorGUILayout.Foldout(showAdvancedSettings, "Show Advanced Settings"); - if (showAdvancedSettings) - { - EditorGUI.indentLevel++; - mgr.key = EditorGUILayout.TextField("Key", mgr.key); - ES3SettingsEditor.Draw(mgr.settings); - EditorGUI.indentLevel--; - } - } - - // Display the menu. - using (var horizontal = new EditorGUILayout.HorizontalScope()) - { - if (GUILayout.Button("Scene", sceneOpen ? style.menuButtonSelected : style.menuButton)) - { - sceneOpen = true; - OnFocus(); - } - if (GUILayout.Button("Prefabs", sceneOpen ? style.menuButton : style.menuButtonSelected)) - { - sceneOpen = false; - OnFocus(); - } - } - - //EditorGUILayout.HelpBox("Select the Components you want to be saved.\nTo maximise performance, only select the Components with variables which need persisting.", MessageType.None, true); - - if (hierarchy == null || hierarchy.Length == 0) - { - EditorGUILayout.LabelField("Right-click a prefab and select 'Easy Save 3 > Enable Easy Save for Scene' to enable Auto Save for it.\n\nYour scene will also need to reference this prefab for it to be recognised.", style.area); - return; - } - - using (var scrollView = new EditorGUILayout.ScrollViewScope(hierarchyScrollPosition, style.areaPadded)) - { - hierarchyScrollPosition = scrollView.scrollPosition; - - using (new EditorGUILayout.HorizontalScope(GUILayout.Width(200))) - { - var searchTextFieldSkin = GUI.skin.FindStyle("ToolbarSearchTextField"); - if (searchTextFieldSkin == null) - searchTextFieldSkin = GUI.skin.FindStyle("ToolbarSeachTextField"); - - var searchButtonSkin = GUI.skin.FindStyle("ToolbarSearchCancelButton"); - if (searchButtonSkin == null) - searchButtonSkin = GUI.skin.FindStyle("ToolbarSeachCancelButton"); - - searchTerm = GUILayout.TextField(searchTerm, searchTextFieldSkin); - if (GUILayout.Button("", searchButtonSkin)) - { - // Remove focus if cleared - searchTerm = ""; - GUI.FocusControl(null); - } - } - - EditorGUILayout.Space(); - EditorGUILayout.Space(); - - foreach (var go in hierarchy) - if (go != null) - go.DrawHierarchy(searchTerm.ToLowerInvariant()); - } - if (changeCheck.changed) - EditorUtility.SetDirty(mgr); - } - } - - public void Init() - { - if (mgr == null) - foreach (var thisMgr in Resources.FindObjectsOfTypeAll()) - if (thisMgr != null && thisMgr.gameObject.scene == SceneManager.GetActiveScene()) - mgr = thisMgr; - - if (hierarchy == null) - OnFocus(); - } - - public override void OnFocus() - { - - GameObject[] parentObjects; - if (sceneOpen) - parentObjects = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects(); - else // Prefabs - { - var mgr = ES3ReferenceMgr.GetManagerFromScene(SceneManager.GetActiveScene(), false); - var prefabs = mgr.prefabs; - parentObjects = new GameObject[prefabs.Count]; - for (int i = 0; i < prefabs.Count; i++) - if(prefabs[i] != null) - parentObjects[i] = prefabs[i].gameObject; - } - hierarchy = new HierarchyItem[parentObjects.Length]; - for (int i = 0; i < parentObjects.Length; i++) - if(parentObjects[i] != null) - hierarchy[i] = new HierarchyItem(parentObjects[i].transform, null, this); - } - - public class HierarchyItem - { - private ES3AutoSave autoSave; - private Transform t; - private Component[] components = null; - // Immediate children of this GameObject - private HierarchyItem[] children = new HierarchyItem[0]; - private bool showComponents = false; - //private AutoSaveWindow window; - - public HierarchyItem(Transform t, HierarchyItem parent, AutoSaveWindow window) - { - this.autoSave = t.GetComponent(); - this.t = t; - this.components = t.GetComponents(); - - children = new HierarchyItem[t.childCount]; - for (int i = 0; i < t.childCount; i++) - children[i] = new HierarchyItem(t.GetChild(i), this, window); - - //this.window = window; - } - - public void MergeDown(ES3AutoSave autoSave) - { - if (this.autoSave != autoSave) - { - if (this.autoSave != null) - { - autoSave.componentsToSave.AddRange(autoSave.componentsToSave); - Object.DestroyImmediate(this.autoSave); - } - this.autoSave = autoSave; - } - - foreach (var child in children) - MergeDown(autoSave); - } - - public void DrawHierarchy(string searchTerm) - { - bool containsSearchTerm = false; - - if (t != null) - { - // Filter by tag if it's prefixed by "tag:" - if (searchTerm.StartsWith("tag:") && t.tag.ToLowerInvariant().Contains(searchTerm.Remove(0,4))) - containsSearchTerm = true; - // Else filter by name - else - containsSearchTerm = t.name.ToLowerInvariant().Contains(searchTerm); - - if (containsSearchTerm) - { - GUIContent saveIcon; - EditorGUIUtility.SetIconSize(new Vector2(16, 16)); - - if (HasSelectedComponentsOrFields()) - saveIcon = new GUIContent(t.name, EditorStyle.Get.saveIconSelected, "There are Components on this GameObject which will be saved."); - else - saveIcon = new GUIContent(t.name, EditorStyle.Get.saveIconUnselected, "No Components on this GameObject will be saved"); - - GUIStyle style = GUI.skin.GetStyle("Foldout"); - if (Selection.activeTransform == t) - { - style = new GUIStyle(style); - style.fontStyle = FontStyle.Bold; - } - - var open = EditorGUILayout.Foldout(showComponents, saveIcon, style); - if (open) - { - // Ping the GameObject if this was previously closed - if (showComponents != open) - EditorGUIUtility.PingObject(t.gameObject); - DrawComponents(); - } - showComponents = open; - - EditorGUI.indentLevel += 1; - } - } - - // Draw children - if (children != null) - foreach (var child in children) - if (child != null) - child.DrawHierarchy(searchTerm); - - if (containsSearchTerm) - EditorGUI.indentLevel -= 1; - } - - public void DrawComponents() - { - EditorGUI.indentLevel += 3; - using (var scope = new EditorGUILayout.VerticalScope()) - { - bool toggle; - toggle = EditorGUILayout.ToggleLeft("active", autoSave != null ? autoSave.saveActive : false); - if ((autoSave = (toggle && autoSave == null) ? t.gameObject.AddComponent() : autoSave) != null) - ApplyBool("saveActive", toggle); - - toggle = EditorGUILayout.ToggleLeft("hideFlags", autoSave != null ? autoSave.saveHideFlags : false); - if ((autoSave = (toggle && autoSave == null) ? t.gameObject.AddComponent() : autoSave) != null) - ApplyBool("saveHideFlags", toggle); - - toggle = EditorGUILayout.ToggleLeft("layer", autoSave != null ? autoSave.saveLayer : false); - if ((autoSave = (toggle && autoSave == null) ? t.gameObject.AddComponent() : autoSave) != null) - ApplyBool("saveLayer", toggle); - - toggle = EditorGUILayout.ToggleLeft("name", autoSave != null ? autoSave.saveName : false); - if ((autoSave = (toggle && autoSave == null) ? t.gameObject.AddComponent() : autoSave) != null) - ApplyBool("saveName", toggle); - - toggle = EditorGUILayout.ToggleLeft("tag", autoSave != null ? autoSave.saveTag : false); - if ((autoSave = (toggle && autoSave == null) ? t.gameObject.AddComponent() : autoSave) != null) - ApplyBool("saveTag", toggle); - - foreach (var component in components) - { - if (component == null) - continue; - - using (var horizontalScope = new EditorGUILayout.HorizontalScope()) - { - bool saveComponent = false; - if (autoSave != null) - saveComponent = autoSave.componentsToSave.Contains(component); - - var newValue = EditorGUILayout.ToggleLeft(EditorGUIUtility.ObjectContent(component, component.GetType()), saveComponent); - // If the checkbox has changed, we want to save or not save a Component - if (newValue != saveComponent) - { - if (autoSave == null) - { - autoSave = Undo.AddComponent(t.gameObject); - var so = new SerializedObject(autoSave); - so.FindProperty("saveChildren").boolValue = false; - so.ApplyModifiedProperties(); - } - // If we've unchecked the box, remove the Component from the array. - if (newValue == false) - { - var so = new SerializedObject(autoSave); - var prop = so.FindProperty("componentsToSave"); - var index = autoSave.componentsToSave.IndexOf(component); - prop.DeleteArrayElementAtIndex(index); - so.ApplyModifiedProperties(); - } - // Else, add it to the array. - else - { - var so = new SerializedObject(autoSave); - var prop = so.FindProperty("componentsToSave"); - prop.arraySize++; - prop.GetArrayElementAtIndex(prop.arraySize - 1).objectReferenceValue = component; - so.ApplyModifiedProperties(); - } - } - if (GUILayout.Button(EditorGUIUtility.IconContent("_Popup"), new GUIStyle("Label"))) - ES3Window.InitAndShowTypes(component.GetType()); - } - } - } - - /*if(autoSave != null && isDirty) - { - EditorUtility.SetDirty(autoSave); - if (PrefabUtility.IsPartOfPrefabInstance(autoSave)) - PrefabUtility.RecordPrefabInstancePropertyModifications(autoSave.gameObject); - }*/ - - if (autoSave != null && (autoSave.componentsToSave == null || autoSave.componentsToSave.Count == 0) && !autoSave.saveActive && !autoSave.saveChildren && !autoSave.saveHideFlags && !autoSave.saveLayer && !autoSave.saveName && !autoSave.saveTag) - { - Undo.DestroyObjectImmediate(autoSave); - autoSave = null; - } - EditorGUI.indentLevel -= 3; - } - - public void ApplyBool(string propertyName, bool value) - { - var so = new SerializedObject(autoSave); - so.FindProperty(propertyName).boolValue = value; - so.ApplyModifiedProperties(); - } - - public bool HasSelectedComponentsOrFields() - { - if (autoSave == null) - return false; - - - foreach (var component in components) - if (component != null && autoSave.componentsToSave.Contains(component)) - return true; - - if (autoSave.saveActive || autoSave.saveHideFlags || autoSave.saveLayer || autoSave.saveName || autoSave.saveTag) - return true; - - return false; - } - } - } - -} diff --git a/Assets/Plugins/Easy Save 3/Editor/AutoSaveWindow.cs.meta b/Assets/Plugins/Easy Save 3/Editor/AutoSaveWindow.cs.meta deleted file mode 100644 index 9958209..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/AutoSaveWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6065cc5492e9f49728674de9a0c1fe84 -timeCreated: 1519132286 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ChangeReferenceID.cs b/Assets/Plugins/Easy Save 3/Editor/ChangeReferenceID.cs deleted file mode 100644 index 534010e..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ChangeReferenceID.cs +++ /dev/null @@ -1,93 +0,0 @@ -using UnityEngine; -using UnityEditor; -using UnityEngine.SceneManagement; - -namespace ES3Internal -{ - public class SetReferenceID : EditorWindow - { - private long id = 0; - public UnityEngine.Object obj; - - [MenuItem("GameObject/Easy Save 3/Set Reference ID..", false, 33)] - [MenuItem("Assets/Easy Save 3/Set Reference ID..", false, 33)] - - public static void ShowWindow() - { - var selected = Selection.GetFiltered(SelectionMode.TopLevel); - - if (selected == null || selected.Length == 0) - EditorUtility.DisplayDialog("Could not set reference ID", "No reference was selected to set the ID of.", "Ok"); - else if (selected.Length > 1) - EditorUtility.DisplayDialog("Could not set reference ID", "Multiple references are selected. Please select a single reference.", "Ok"); - else - EditorWindow.GetWindow("Set Reference ID").obj = selected[0]; - } - - [MenuItem("CONTEXT/Component/Easy Save 3/Set Reference ID..", false, 33)] - public static void ShowWindowContext(MenuCommand command) - { - EditorWindow.GetWindow("Set Reference ID").obj = command.context; - } - - private void OnGUI() - { - GUILayout.Label("Enter new reference ID:", EditorStyles.boldLabel); - id = EditorGUILayout.LongField("Reference ID", id); - - if (GUILayout.Button("Apply")) - { - int setCount = 0; - - string sceneName = null; - - // If this is a scene object, only set the reference ID for the manager in the scene it belongs to. - if (!EditorUtility.IsPersistent(obj)) - { - if (obj is GameObject go) - sceneName = go.scene.name; - else if (obj is Component c) - sceneName = c.gameObject.scene.name; - } - - for (int i = 0; i < SceneManager.sceneCount; i++) - { - var loadedScene = SceneManager.GetSceneAt(i); - - if (loadedScene != null && loadedScene.IsValid()) - { - if (sceneName != null && loadedScene.name != sceneName) - continue; - - var mgr = ES3ReferenceMgr.GetManagerFromScene(loadedScene, false); - if (mgr != null) - { - Undo.RecordObject(mgr, "Changed reference ID in manager"); - mgr.Remove(obj); - mgr.Add(obj, id); - setCount++; - } - } - } - - if (setCount == 0) - { - this.Close(); - EditorUtility.DisplayDialog("Could not set reference ID", "No open scenes contain reference managers. Add a reference manager by going to Tools > Easy Save 3 > Add Manager to Scene.", "Ok"); - } - - this.Close(); - EditorUtility.DisplayDialog($"Reference ID successfully changed", $"Reference ID changed to {id} in {setCount} managers.", "Ok"); - } - } - - [MenuItem("GameObject/Easy Save 3/Set Reference ID..", true, 33)] - [MenuItem("Assets/Easy Save 3/Set Reference ID..", true, 33)] - private static bool CanSetReference() - { - var selected = Selection.GetFiltered(SelectionMode.TopLevel); - - return selected != null && selected.Length == 1 && ES3ReferenceMgr.Current != null; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/ChangeReferenceID.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ChangeReferenceID.cs.meta deleted file mode 100644 index ca83970..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ChangeReferenceID.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c119866c01ca0044a7e5e08b8d22692 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Asmdefs.unitypackage b/Assets/Plugins/Easy Save 3/Editor/ES3Asmdefs.unitypackage deleted file mode 100644 index 004dad8..0000000 Binary files a/Assets/Plugins/Easy Save 3/Editor/ES3Asmdefs.unitypackage and /dev/null differ diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Asmdefs.unitypackage.meta b/Assets/Plugins/Easy Save 3/Editor/ES3Asmdefs.unitypackage.meta deleted file mode 100644 index 550f254..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3Asmdefs.unitypackage.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: de41a70ead12af544a4e99a925b269d2 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveEditor.cs deleted file mode 100644 index a6786f4..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveEditor.cs +++ /dev/null @@ -1,21 +0,0 @@ -using UnityEditor; -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace ES3Internal -{ - [CustomEditor(typeof(ES3AutoSave))] - public class ES3AutoSaveEditor : Editor - { - public override void OnInspectorGUI() - { - if (target == null) - return; - - if (GUILayout.Button("Manage Auto Save Settings")) - ES3Editor.ES3Window.InitAndShowAutoSave(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveEditor.cs.meta deleted file mode 100644 index 6b4bf60..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 54ded3aeb20a94008a877da330bfc45f -timeCreated: 1519132285 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveMgrEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveMgrEditor.cs deleted file mode 100644 index 854e218..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveMgrEditor.cs +++ /dev/null @@ -1,20 +0,0 @@ -using UnityEditor; -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace ES3Internal -{ - [CustomEditor(typeof(ES3AutoSaveMgr))] - public class ES3AutoSaveMgrEditor : Editor - { - public override void OnInspectorGUI() - { - EditorGUILayout.HelpBox("This manages the saving and loading of GameObjects which have the Auto Save component attached to them.\n\nIf there are no Auto Save components in your scene, this component will do nothing.", MessageType.Info); - if(GUILayout.Button("Settings...")) - ES3Editor.ES3Window.InitAndShowAutoSave(); - } - } - -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveMgrEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveMgrEditor.cs.meta deleted file mode 100644 index 8983ad6..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3AutoSaveMgrEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f440317f3fd444daf83c27a3381af17c -timeCreated: 1519132300 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ClassTypeTemplate.txt b/Assets/Plugins/Easy Save 3/Editor/ES3ClassTypeTemplate.txt deleted file mode 100644 index 83318c1..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ClassTypeTemplate.txt +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute([propertyNames])] - public class ES3UserType_[es3TypeSuffix] : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3UserType_[es3TypeSuffix]() : base(typeof([fullType])){ Instance = this; priority = 1; } - - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = ([fullType])obj; - [writes] - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = ([fullType])obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - [reads] - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new [fullType](); - ReadObject(reader, instance); - return instance; - } - } - - - public class ES3UserType_[es3TypeSuffix]Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3UserType_[es3TypeSuffix]Array() : base(typeof([fullType][]), ES3UserType_[es3TypeSuffix].Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ClassTypeTemplate.txt.meta b/Assets/Plugins/Easy Save 3/Editor/ES3ClassTypeTemplate.txt.meta deleted file mode 100644 index 0861d16..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ClassTypeTemplate.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cc3cada215f0d417a8fa879651f22f84 -timeCreated: 1483698819 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ComponentTypeTemplate.txt b/Assets/Plugins/Easy Save 3/Editor/ES3ComponentTypeTemplate.txt deleted file mode 100644 index 9953ea5..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ComponentTypeTemplate.txt +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute([propertyNames])] - public class ES3UserType_[es3TypeSuffix] : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3UserType_[es3TypeSuffix]() : base(typeof([fullType])){ Instance = this; priority = 1;} - - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = ([fullType])obj; - [writes] - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = ([fullType])obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - [reads] - default: - reader.Skip(); - break; - } - } - } - } - - - public class ES3UserType_[es3TypeSuffix]Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3UserType_[es3TypeSuffix]Array() : base(typeof([fullType][]), ES3UserType_[es3TypeSuffix].Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ComponentTypeTemplate.txt.meta b/Assets/Plugins/Easy Save 3/Editor/ES3ComponentTypeTemplate.txt.meta deleted file mode 100644 index 3b08a42..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ComponentTypeTemplate.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b74f7ff5e731846249f9e22ab7afedfb -timeCreated: 1483698819 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3EditorStyle.cs b/Assets/Plugins/Easy Save 3/Editor/ES3EditorStyle.cs deleted file mode 100644 index fa5e9b4..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3EditorStyle.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections; -using UnityEngine; -using UnityEditor; - -namespace ES3Editor -{ - public class EditorStyle - { - private static EditorStyle style = null; - - public GUIStyle area; - public GUIStyle areaPadded; - - public GUIStyle menuButton; - public GUIStyle menuButtonSelected; - public GUIStyle smallSquareButton; - - public GUIStyle heading; - public GUIStyle subheading; - public GUIStyle subheading2; - - public GUIStyle boldLabelNoStretch; - - public GUIStyle link; - - public GUIStyle toggle; - - public Texture2D saveIconSelected; - public Texture2D saveIconUnselected; - - public static EditorStyle Get { get{ if(style == null) style = new EditorStyle(); return style; } } - - public EditorStyle() - { - // An area with padding. - area = new GUIStyle(); - area.padding = new RectOffset(10, 10, 10, 10); - area.wordWrap = true; - - // An area with more padding. - areaPadded = new GUIStyle(); - areaPadded.padding = new RectOffset(20, 20, 20, 20); - areaPadded.wordWrap = true; - - // Unselected menu button. - menuButton = new GUIStyle(EditorStyles.toolbarButton); - menuButton.fontStyle = FontStyle.Normal; - menuButton.fontSize = 14; - menuButton.fixedHeight = 24; - - // Selected menu button. - menuButtonSelected = new GUIStyle(menuButton); - menuButtonSelected.fontStyle = FontStyle.Bold; - - // Main Headings - heading = new GUIStyle(EditorStyles.label); - heading.fontStyle = FontStyle.Bold; - heading.fontSize = 24; - - subheading = new GUIStyle(heading); - subheading.fontSize = 18; - - subheading2 = new GUIStyle(heading); - subheading2.fontSize = 14; - - boldLabelNoStretch = new GUIStyle(EditorStyles.label); - boldLabelNoStretch.stretchWidth = false; - boldLabelNoStretch.fontStyle = FontStyle.Bold; - - link = new GUIStyle(); - link.fontSize = 16; - if(EditorGUIUtility.isProSkin) - link.normal.textColor = new Color (0.262f, 0.670f, 0.788f); - else - link.normal.textColor = new Color (0.129f, 0.129f, 0.8f); - - toggle = new GUIStyle(EditorStyles.toggle); - toggle.stretchWidth = false; - - saveIconSelected = AssetDatabase.LoadAssetAtPath(ES3Settings.PathToEasySaveFolder() + "Editor/es3Logo16x16.png"); - saveIconUnselected = AssetDatabase.LoadAssetAtPath(ES3Settings.PathToEasySaveFolder() + "Editor/es3Logo16x16-bw.png"); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3EditorStyle.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3EditorStyle.cs.meta deleted file mode 100644 index 62aeda3..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3EditorStyle.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f556addc6753344019137cbc45d2c4ff -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3EditorUtility.cs b/Assets/Plugins/Easy Save 3/Editor/ES3EditorUtility.cs deleted file mode 100644 index 126d436..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3EditorUtility.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using System.IO; -using System.Linq; -using ES3Internal; - -public class ES3EditorUtility : Editor -{ - public static void DisplayLink(string label, string url) - { - var style = ES3Editor.EditorStyle.Get; - if(GUILayout.Button(label, style.link)) - Application.OpenURL(url); - - var buttonRect = GUILayoutUtility.GetLastRect(); - buttonRect.width = style.link.CalcSize(new GUIContent(label)).x; - - EditorGUIUtility.AddCursorRect(buttonRect, MouseCursor.Link); - } - - public static bool IsPrefabInAssets(UnityEngine.Object obj) - { - #if UNITY_2018_3_OR_NEWER - return PrefabUtility.IsPartOfPrefabAsset(obj); - #else - return (PrefabUtility.GetPrefabType(obj) == PrefabType.Prefab); - #endif - } - - /* - * Gets all children and components from a GameObject or GameObjects. - * We create our own method for this because EditorUtility.CollectDeepHierarchy isn't thread safe in the Editor. - */ - public static IEnumerable CollectDeepHierarchy(IEnumerable gos) - { - var deepHierarchy = new HashSet(); - foreach (var go in gos) - { - deepHierarchy.Add(go); - deepHierarchy.UnionWith(go.GetComponents()); - foreach (Transform t in go.transform) - deepHierarchy.UnionWith( CollectDeepHierarchy( new GameObject[] { t.gameObject } ) ); - } - return deepHierarchy; - } - - [MenuItem("Tools/Easy Save 3/Getting Started...", false, 0)] - public static void DisplayGettingStarted() - { - Application.OpenURL("https://docs.moodkie.com/easy-save-3/getting-started/"); - } - - [MenuItem("Tools/Easy Save 3/Manual...", false, 0)] - public static void DisplayManual() - { - Application.OpenURL("https://docs.moodkie.com/product/easy-save-3/"); - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3EditorUtility.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3EditorUtility.cs.meta deleted file mode 100644 index f0d8af7..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3EditorUtility.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 501719249e8124990973182985feaeb8 -timeCreated: 1519132285 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3GameObjectEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3GameObjectEditor.cs deleted file mode 100644 index 08dc8b0..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3GameObjectEditor.cs +++ /dev/null @@ -1,46 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace ES3Internal -{ - [CustomEditor(typeof(ES3GameObject))] - public class ES3GameObjectEditor : Editor - { - public override void OnInspectorGUI() - { - if (target == null) - return; - - var es3Go = (ES3GameObject)target; - - EditorGUILayout.HelpBox("This Component allows you to choose which Components are saved when this GameObject is saved using code.", MessageType.Info); - - if (es3Go.GetComponent() != null) - { - EditorGUILayout.HelpBox("This Component cannot be used on GameObjects which are already managed by Auto Save.", MessageType.Error); - return; - } - - foreach (var component in es3Go.GetComponents()) - { - var markedToBeSaved = es3Go.components.Contains(component); - var newMarkedToBeSaved = EditorGUILayout.Toggle(component.GetType().Name, markedToBeSaved); - - if(markedToBeSaved && !newMarkedToBeSaved) - { - Undo.RecordObject(es3Go, "Marked Component to save"); - es3Go.components.Remove(component); - } - - if (!markedToBeSaved && newMarkedToBeSaved) - { - Undo.RecordObject(es3Go, "Unmarked Component to save"); - es3Go.components.Add(component); - } - } - - if (es3Go.components.RemoveAll(t => t == null) > 0) - Undo.RecordObject(es3Go, "Removed null Component from ES3GameObject"); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3GameObjectEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3GameObjectEditor.cs.meta deleted file mode 100644 index 6fe8ba3..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3GameObjectEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b7d54ef20554e354eb3c0d40d2a6debe -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3GlobalReferencesEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3GlobalReferencesEditor.cs deleted file mode 100644 index d11c5c6..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3GlobalReferencesEditor.cs +++ /dev/null @@ -1,91 +0,0 @@ -#if !ES3GLOBAL_DISABLED -using UnityEditor; -using UnityEngine; -using UnityEngine.SceneManagement; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace ES3Internal -{ - [CustomEditor(typeof(ES3Internal.ES3GlobalReferences))] - [System.Serializable] - public class ES3GlobalReferencesEditor : Editor - { - private bool isDraggingOver = false; - private bool openReferences = false; - - private ES3Internal.ES3GlobalReferences _globalRefs = null; - private ES3Internal.ES3GlobalReferences globalRefs - { - get - { - if (_globalRefs == null) - _globalRefs = (ES3Internal.ES3GlobalReferences)serializedObject.targetObject; - return _globalRefs; - } - } - - public override void OnInspectorGUI() - { - EditorGUILayout.HelpBox("This stores references to objects in Assets, allowing them to be referenced with the same ID between scenes.", MessageType.Info); - - if (EditorGUILayout.Foldout(openReferences, "References") != openReferences) - { - openReferences = !openReferences; - if (openReferences == true) - openReferences = EditorUtility.DisplayDialog("Are you sure?", "Opening this list will display every reference in the manager, which for larger projects can cause the Editor to freeze\n\nIt is strongly recommended that you save your project before continuing.", "Open References", "Cancel"); - } - - // Make foldout drag-and-drop enabled for objects. - if (GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition)) - { - Event evt = Event.current; - - switch (evt.type) - { - case EventType.DragUpdated: - case EventType.DragPerform: - isDraggingOver = true; - break; - case EventType.DragExited: - isDraggingOver = false; - break; - } - - if (isDraggingOver) - { - DragAndDrop.visualMode = DragAndDropVisualMode.Copy; - - if (evt.type == EventType.DragPerform) - { - DragAndDrop.AcceptDrag(); - Undo.RecordObject(globalRefs, "Add References to Easy Save 3 Reference List"); - foreach (UnityEngine.Object obj in DragAndDrop.objectReferences) - globalRefs.GetOrAdd(obj); - // Return now because otherwise we'll change the GUI during an event which doesn't allow it. - return; - } - } - } - - if (openReferences) - { - EditorGUI.indentLevel++; - - foreach (var kvp in globalRefs.refId) - { - EditorGUILayout.BeginHorizontal(); - - EditorGUILayout.ObjectField(kvp.Key, typeof(UnityEngine.Object), true); - EditorGUILayout.LongField(kvp.Value); - - EditorGUILayout.EndHorizontal(); - } - - EditorGUI.indentLevel--; - } - } - } -} -#endif diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3GlobalReferencesEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3GlobalReferencesEditor.cs.meta deleted file mode 100644 index 0203979..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3GlobalReferencesEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 286fb0c3863779e4d96bc682edb324ce -timeCreated: 1519132283 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3InspectorInfoEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3InspectorInfoEditor.cs deleted file mode 100644 index efea1d9..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3InspectorInfoEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEngine.SceneManagement; -using System; -using System.Collections; - -[CustomEditor(typeof(ES3InspectorInfo))] -public class ES3InspectorInfoEditor : Editor -{ - public override void OnInspectorGUI() - { - EditorGUILayout.HelpBox(((ES3InspectorInfo)target).message, MessageType.Info); - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3InspectorInfoEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3InspectorInfoEditor.cs.meta deleted file mode 100644 index 2bb545f..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3InspectorInfoEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b344d685b614044aebf5285c5f59f52d -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3PlayMakerEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3PlayMakerEditor.cs deleted file mode 100644 index f69c850..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3PlayMakerEditor.cs +++ /dev/null @@ -1,803 +0,0 @@ -#if PLAYMAKER_1_8_OR_NEWER - -using UnityEngine; -using UnityEditor; -using HutongGames.PlayMaker; -using HutongGames.PlayMaker.Actions; -using HutongGames.PlayMakerEditor; -using System.Text.RegularExpressions; - -namespace ES3PlayMaker -{ - #region Base Actions - - public abstract class BaseEditor : CustomActionEditor - { - bool showErrorHandling = false; - - public abstract void DrawGUI(); - - public override bool OnGUI() - { - DrawGUI(); - - EditorGUILayout.Separator(); - - showErrorHandling = EditorGUILayout.Foldout(showErrorHandling, "Error Handling"); - if (showErrorHandling) - { - EditorGUI.indentLevel++; - EditField("errorEvent"); - EditField("errorMessage"); - EditorGUI.indentLevel--; - } - - return GUI.changed; - } - - // Displays the FsmVar field without the unnecessary Type field. - protected void FsmVarField(string fieldName) - { - if (target == null || target.State == null) - return; - - var fsmVar = (FsmVar)ES3Internal.ES3Reflection.GetField(target.GetType(), fieldName).GetValue(target); - - if (fsmVar == null) - { - fsmVar = new FsmVar(); - ES3Internal.ES3Reflection.GetField(target.GetType(), fieldName).SetValue(target, fsmVar); - } - - EditorGUILayout.BeginHorizontal(); - var label = Regex.Replace(fieldName, @"\p{Lu}", m => " " + m.Value.ToLowerInvariant()); - EditorGUILayout.PrefixLabel(char.ToUpperInvariant(label[0]) + label.Substring(1)); - - var localVariables = target.Fsm.Variables.GetAllNamedVariablesSorted(); - var globalVariables = FsmVariables.GlobalVariables.GetAllNamedVariablesSorted(); - - var variableNames = new string[localVariables.Length + globalVariables.Length]; - int selected = -1; - - for(int i=0; i= localVariables.Length ? globalVariables[i - localVariables.Length] : localVariables[i]; - variableNames[i] = i >= localVariables.Length ? "Globals/"+variable.Name : variable.Name; - if (fsmVar.NamedVar == variable) - selected = i; - } - - var newSelected = EditorGUILayout.Popup(selected, variableNames); - - - EditorGUILayout.EndHorizontal(); - - if (newSelected == -1) - return; - - if (selected != newSelected) - { - if (newSelected >= localVariables.Length) - fsmVar.NamedVar = globalVariables[newSelected - localVariables.Length]; - else - fsmVar.NamedVar = localVariables[newSelected]; - } - } - } - - public abstract class SettingsEditor : BaseEditor - { - public override bool OnGUI() - { - base.OnGUI(); - return DrawSettingsEditor(); - } - - public bool DrawSettingsEditor() - { - var action = target as ES3PlayMaker.SettingsAction; - if (action == null) - return false; - action.overrideDefaultSettings.Value = EditorGUILayout.ToggleLeft("Override Default Settings", action.overrideDefaultSettings.Value); - - if (action.overrideDefaultSettings.Value) - { - EditorGUI.indentLevel++; - - EditField("path"); - EditField("location"); - EditField("encryptionType"); - EditField("encryptionPassword"); - EditField("compressionType"); - EditField("directory"); - EditField("format"); - EditField("bufferSize"); - - EditorGUI.indentLevel--; - EditorGUILayout.Space(); - } - return GUI.changed; - } - } - - public abstract class KeyValueSettingsEditor : SettingsEditor - { - public override bool OnGUI() - { - EditField("key"); - EditField("value"); - - base.OnGUI(); - - return GUI.changed; - } - - public override void DrawGUI(){} - } - - public abstract class ES3FileActionEditor : BaseEditor - { - public override bool OnGUI() - { - EditField("fsmES3File"); - - base.OnGUI(); - - var action = target as ES3PlayMaker.ES3FileAction; - if (action == null) - return false; - - return GUI.changed; - } - } -#endregion - -#if !PLAYMAKER_1_9_OR_NEWER -#region Save Actions - - /*[CustomActionEditor(typeof(ES3PlayMaker.Save))] - public class SaveEditor : KeyValueSettingsEditor{}*/ - - /*[CustomActionEditor(typeof(ES3PlayMaker.SaveMultiple))] - public class SaveMultipleEditor : SettingsEditor - { - public override bool OnGUI() - { - return base.OnGUI(); - } - - public override void DrawGUI() - { - DrawDefaultInspector(); - } - }*/ - - [CustomActionEditor(typeof(ES3PlayMaker.SaveAll))] - public class SaveAllEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("key"); - EditField("saveFsmVariables"); - EditField("saveGlobalVariables"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.SaveRaw))] - public class SaveRawEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("str"); - EditField("useBase64Encoding"); - EditField("appendNewline"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.AppendRaw))] - public class AppendRawEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("str"); - EditField("useBase64Encoding"); - EditField("appendNewline"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.SaveImage))] - public class SaveImageEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("imagePath"); - EditField("texture2D"); - EditField("quality"); - } - } - -#endregion - -#region Load Actions - - [CustomActionEditor(typeof(ES3PlayMaker.Load))] - public class LoadEditor : KeyValueSettingsEditor - { - public override void DrawGUI() - { - EditorGUILayout.Space(); - EditField("defaultValue"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.LoadInto))] - public class LoadIntoEditor : KeyValueSettingsEditor{} - - [CustomActionEditor(typeof(ES3PlayMaker.LoadAll))] - public class LoadAllEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("key"); - EditField("loadFsmVariables"); - EditField("loadGlobalVariables"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.LoadAudio))] - public class LoadAudioEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("audioFilePath"); - EditField("audioClip"); -#if UNITY_2018_3_OR_NEWER - EditField("audioType"); -#endif - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.LoadImage))] - public class LoadImageEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("imagePath"); - EditField("texture2D"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.LoadRawString))] - public class LoadRawStringEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("str"); - EditField("useBase64Encoding"); - } - } - -#endregion - -#region Exists Actions - - [CustomActionEditor(typeof(ES3PlayMaker.KeyExists))] - public class KeyExistsEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("key"); - EditField("exists"); - EditorGUILayout.Separator(); - EditField("existsEvent"); - EditField("doesNotExistEvent"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.FileExists))] - public class FileExistsEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - EditField("exists"); - EditorGUILayout.Separator(); - EditField("existsEvent"); - EditField("doesNotExistEvent"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.DirectoryExists))] - public class DirectoryExistsEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("directoryPath"); - EditField("exists"); - EditorGUILayout.Separator(); - EditField("existsEvent"); - EditField("doesNotExistEvent"); - } - } - -#endregion - -#region Delete Actions - - [CustomActionEditor(typeof(ES3PlayMaker.DeleteKey))] - public class DeleteKeyEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("key"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.DeleteFile))] - public class DeleteFileEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.DeleteDirectory))] - public class DeleteDirectoryEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("directoryPath"); - } - } - -#endregion - -#region Backup Actions - - [CustomActionEditor(typeof(ES3PlayMaker.CreateBackup))] - public class CreateBackupEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.RestoreBackup))] - public class RestoreBackupEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - EditField("backupWasRestored"); - } - } - -#endregion - -#region Key, File and Directory methods - - [CustomActionEditor(typeof(ES3PlayMaker.RenameFile))] - public class RenameFileEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("oldFilePath"); - EditField("newFilePath"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.CopyFile))] - public class CopyFileEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("oldFilePath"); - EditField("newFilePath"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.CopyDirectory))] - public class CopyDirectoryEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("oldDirectoryPath"); - EditField("newDirectoryPath"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.GetKeys))] - public class GetKeysEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - EditField("keys"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.GetKeyCount))] - public class GetKeyCountEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - EditField("keyCount"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.GetFiles))] - public class GetFilesEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("directoryPath"); - EditField("files"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.GetDirectories))] - public class GetDirectoriesEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("directoryPath"); - EditField("directories"); - } - } - -#endregion - -#region ES3File Actions - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileCreate))] - public class ES3FileCreateEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("fsmES3File"); - EditField("filePath"); - EditField("syncWithFile"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileSync))] - public class ES3FileSyncEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("fsmES3File"); - } - } - - /*[CustomActionEditor(typeof(ES3PlayMaker.ES3FileSave))] - public class ES3FileSaveEditor : SaveEditor - { - public override void DrawGUI() - { - EditField("fsmES3File"); - base.DrawGUI(); - } - }*/ - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileLoad))] - public class ES3FileLoadEditor : LoadEditor - { - public override void DrawGUI() - { - EditField("fsmES3File"); - base.DrawGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileLoadInto))] - public class ES3FileLoadIntoEditor : LoadIntoEditor - { - public override void DrawGUI() - { - base.DrawGUI(); - EditField("fsmES3File"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileDeleteKey))] - public class ES3FileDeleteKeyEditor : DeleteKeyEditor - { - public override void DrawGUI() - { - base.DrawGUI(); - EditField("fsmES3File"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileKeyExists))] - public class ES3FileKeyExistsEditor : KeyExistsEditor - { - public override void DrawGUI() - { - EditField("fsmES3File"); - base.DrawGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileGetKeys))] - public class ES3FileGetKeysEditor : ES3FileActionEditor - { - public override void DrawGUI() - { - EditField("keys"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileClear))] - public class ES3FileClearEditor : BaseEditor - { - public override void DrawGUI() - { - EditField("fsmES3File"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3FileSize))] - public class ES3FileSizeEditor : BaseEditor - { - public override void DrawGUI() - { - EditField("size"); - EditField("fsmES3File"); - } - } - - -#endregion - -#region ES3Cloud Actions -#if !DISABLE_WEB - - public abstract class ES3CloudEditor : SettingsEditor - { - protected abstract void DrawChildGUI(); - - public override void DrawGUI() - { - EditField("url"); - EditField("apiKey"); - EditorGUILayout.Space(); - DrawChildGUI(); - EditorGUILayout.Space(); - EditField("errorCode"); - } - } - - public abstract class ES3CloudUserEditor : ES3CloudEditor - { - public bool showUser = false; - - protected override void DrawChildGUI() - { - if((showUser = EditorGUILayout.Foldout(showUser, "User (optional)"))) - { - EditorGUI.indentLevel++; - EditField("user"); - EditField("password"); - EditorGUI.indentLevel--; - } - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudSync))] - public class ES3CloudSyncEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("path"); - base.DrawChildGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadFile))] - public class ES3CloudDownloadFileEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("path"); - base.DrawChildGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadES3File))] - public class ES3CloudDownloadES3FileEditor : BaseEditor - { - public bool showUser = false; - public override void DrawGUI() - { - EditField("fsmES3File"); - EditField("url"); - EditField("apiKey"); - EditField("errorCode"); - if ((showUser = EditorGUILayout.Foldout(showUser, "User (optional)"))) - { - EditorGUI.indentLevel++; - EditField("user"); - EditField("password"); - EditorGUI.indentLevel--; - } - } - } - - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudUploadFile))] - public class ES3CloudUploadFileEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("path"); - base.DrawChildGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudUploadES3File))] - public class ES3CloudUploadES3FileEditor : BaseEditor - { - public bool showUser = false; - public override void DrawGUI() - { - EditField("fsmES3File"); - EditField("url"); - EditField("apiKey"); - EditField("errorCode"); - if((showUser = EditorGUILayout.Foldout(showUser, "User (optional)"))) - { - EditorGUI.indentLevel++; - EditField("user"); - EditField("password"); - EditorGUI.indentLevel--; - } - } - } - - - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDeleteFile))] - public class ES3CloudDeleteFileEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("path"); - base.DrawChildGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudRenameFile))] - public class ES3CloudRenameFileEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("path"); - EditField("newFilename"); - base.DrawChildGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadFilenames))] - public class ES3CloudDownloadFilenamesEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("filenames"); - EditField("searchPattern"); - base.DrawChildGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudSearchFilenames))] - public class ES3CloudSearchFilenamesEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("filenames"); - EditField("searchPattern"); - base.DrawChildGUI(); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadTimestamp))] - public class ES3CloudDownloadTimestampEditor : ES3CloudUserEditor - { - protected override void DrawChildGUI() - { - EditField("path"); - EditField("timestamp"); - base.DrawChildGUI(); - } - } - -#endif - -#endregion - -#region ES3SpreadsheetActions - - - [CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetCreate))] - public class ES3SpreadsheetCreateEditor : BaseEditor - { - public override void DrawGUI() - { - EditField("fsmES3Spreadsheet"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetSetCell))] - public class ES3SpreadsheetSetCellEditor : BaseEditor - { - public override void DrawGUI() - { - EditField("fsmES3Spreadsheet"); - EditField("col"); - EditField("row"); - EditField("value"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetGetCell))] - public class ES3SpreadsheetGetCellEditor : BaseEditor - { - public override void DrawGUI() - { - EditField("fsmES3Spreadsheet"); - EditField("col"); - EditField("row"); - EditField("value"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetLoad))] - public class ES3SpreadsheetLoadEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("fsmES3Spreadsheet"); - EditField("filePath"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetSave))] - public class ES3SpreadsheetSaveEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("fsmES3Spreadsheet"); - EditField("filePath"); - EditField("append"); - } - } - -#endregion - -#region Caching - - [CustomActionEditor(typeof(ES3PlayMaker.CacheFile))] - public class CacheFileEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - } - } - - [CustomActionEditor(typeof(ES3PlayMaker.StoreCachedFile))] - public class StoreCachedFileEditor : SettingsEditor - { - public override void DrawGUI() - { - EditField("filePath"); - } - } - -#endregion -#endif -} -#endif diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3PlayMakerEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3PlayMakerEditor.cs.meta deleted file mode 100644 index 4b91200..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3PlayMakerEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 61838eb75b8164d699b0f54416e0f0bc -timeCreated: 1497347459 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Postprocessor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3Postprocessor.cs deleted file mode 100644 index 5788d48..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3Postprocessor.cs +++ /dev/null @@ -1,269 +0,0 @@ -using UnityEngine; -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEditor.SceneManagement; -using UnityEngine.SceneManagement; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using ES3Internal; - - -/* - * ---- How Postprocessing works for the reference manager ---- - * - When the manager is first added to the scene, all top-level dependencies are added to the manager (AddManagerToScene). - * - When the manager is first added to the scene, all prefabs with ES3Prefab components are added to the manager (AddManagerToScene). - * - All GameObjects and Components in the scene are added to the reference manager when we enter Playmode or the scene is saved (PlayModeStateChanged, OnWillSaveAssets -> AddGameObjectsAndComponentstoManager). - * - When a UnityEngine.Object field of a Component is modified, the new UnityEngine.Object reference is added to the reference manager (PostProcessModifications) - * - All prefabs with ES3Prefab Components are added to the reference manager when we enter Playmode or the scene is saved (PlayModeStateChanged, OnWillSaveAssets -> AddGameObjectsAndComponentstoManager). - * - Local references for prefabs are processed whenever a prefab with an ES3Prefab Component is deselected (SelectionChanged -> ProcessGameObject) - */ -[InitializeOnLoad] -public class ES3Postprocessor : UnityEditor.AssetModificationProcessor -{ - public static GameObject lastSelected = null; - - - // This constructor is also called once when playmode is activated and whenever recompilation happens - // because we have the [InitializeOnLoad] attribute assigned to the class. - static ES3Postprocessor() - { -#if UNITY_2020_2_OR_NEWER - ObjectChangeEvents.changesPublished += Changed; -#endif - ObjectFactory.componentWasAdded += ComponentWasAdded; - - // Open the Easy Save 3 window the first time ES3 is installed. - //ES3Editor.ES3Window.OpenEditorWindowOnStart(); - - EditorApplication.playModeStateChanged -= PlayModeStateChanged; - EditorApplication.playModeStateChanged += PlayModeStateChanged; - - EditorSceneManager.sceneOpened += OnSceneOpened; - } - - #region Reference Updating - - private static void PlayModeStateChanged(PlayModeStateChange state) - { - if (state == PlayModeStateChange.ExitingEditMode) - UpdateAssembliesContainingES3Types(); - } - - private static void OnSceneOpened(Scene scene, OpenSceneMode mode) - { - if (mode == OpenSceneMode.AdditiveWithoutLoading || Application.isPlaying) - return; - - if (ES3Settings.defaultSettingsScriptableObject.autoUpdateReferences && ES3Settings.defaultSettingsScriptableObject.updateReferencesWhenSceneIsOpened) - RefreshScene(scene); - } - - private static void RefreshReferences(bool isEnteringPlayMode = false) - { - /*if (refreshed) // If we've already refreshed, do nothing. - return;*/ - - if (ES3Settings.defaultSettingsScriptableObject.autoUpdateReferences) - for (int i = 0; i < SceneManager.sceneCount; i++) - RefreshScene(SceneManager.GetSceneAt(i)); - //refreshed = true; - } - - static void RefreshScene(Scene scene, bool isEnteringPlayMode = false) - { - if (scene != null && scene.isLoaded) - { - var mgr = (ES3ReferenceMgr)ES3ReferenceMgr.GetManagerFromScene(scene, false); - if (mgr != null) - mgr.RefreshDependencies(isEnteringPlayMode); - } - } - - static void ComponentWasAdded(Component c) - { - var scene = c.gameObject.scene; - - if (!scene.isLoaded) - return; - - var mgr = (ES3ReferenceMgr)ES3ReferenceMgr.GetManagerFromScene(scene, false); - - if (mgr != null && ES3Settings.defaultSettingsScriptableObject.autoUpdateReferences && ES3Settings.defaultSettingsScriptableObject.updateReferencesWhenSceneChanges) - mgr.AddDependencies(c); - } - -#if UNITY_2020_2_OR_NEWER - static void Changed(ref ObjectChangeEventStream stream) - { - if (EditorApplication.isUpdating || Application.isPlaying || !ES3Settings.defaultSettingsScriptableObject.autoUpdateReferences || !ES3Settings.defaultSettingsScriptableObject.updateReferencesWhenSceneChanges) - return; - - for (int i = 0; i < stream.length; i++) - { - var eventType = stream.GetEventType(i); - int[] instanceIds; - Scene scene; - - if (eventType == ObjectChangeKind.ChangeGameObjectOrComponentProperties) - { - ChangeGameObjectOrComponentPropertiesEventArgs evt; - stream.GetChangeGameObjectOrComponentPropertiesEvent(i, out evt); - instanceIds = new int[] { evt.instanceId }; - scene = evt.scene; - } - else if (eventType == ObjectChangeKind.CreateGameObjectHierarchy) - { - CreateGameObjectHierarchyEventArgs evt; - stream.GetCreateGameObjectHierarchyEvent(i, out evt); - instanceIds = new int[] { evt.instanceId }; - scene = evt.scene; - } - /*else if (eventType == ObjectChangeKind.ChangeAssetObjectProperties) - { - ChangeAssetObjectPropertiesEventArgs evt; - stream.GetChangeAssetObjectPropertiesEvent(i, out evt); - instanceIds = new int[] { evt.instanceId }; - }*/ - else if (eventType == ObjectChangeKind.UpdatePrefabInstances) - { - UpdatePrefabInstancesEventArgs evt; - stream.GetUpdatePrefabInstancesEvent(i, out evt); - instanceIds = evt.instanceIds.ToArray(); - scene = evt.scene; - } - else - continue; - - var mgr = (ES3ReferenceMgr)ES3ReferenceMgr.GetManagerFromScene(scene, false); - - if (mgr == null) - return; - - foreach (var id in instanceIds) - { - try - { - var obj = EditorUtility.InstanceIDToObject(id); - - if (obj == null) - continue; - - mgr.AddDependencies(obj); - } - catch { } - } - } - } -#endif - - /*public static void PlayModeStateChanged(PlayModeStateChange state) - { - // Add all GameObjects and Components to the reference manager before we enter play mode. - if (state == PlayModeStateChange.ExitingEditMode && ES3Settings.defaultSettingsScriptableObject.autoUpdateReferences) - RefreshReferences(true); - }*/ - - public static string[] OnWillSaveAssets(string[] paths) - { - // Don't refresh references when the application is playing. - if (!EditorApplication.isUpdating && !Application.isPlaying) - { - if(ES3Settings.defaultSettingsScriptableObject.autoUpdateReferences && ES3Settings.defaultSettingsScriptableObject.updateReferencesWhenSceneIsSaved) - RefreshReferences(); - UpdateAssembliesContainingES3Types(); - } - return paths; - } - - #endregion - - - private static void UpdateAssembliesContainingES3Types() - { - var assemblies = UnityEditor.Compilation.CompilationPipeline.GetAssemblies(); - - if (assemblies == null || assemblies.Length == 0) - return; - - var defaults = ES3Settings.defaultSettingsScriptableObject; - var currentAssemblyNames = defaults.settings.assemblyNames; - - var assemblyNames = new List(); - - foreach (var assembly in assemblies) - { - // Don't include Editor assemblies. - if (assembly.flags.HasFlag(UnityEditor.Compilation.AssemblyFlags.EditorAssembly)) - continue; - - // Assemblies beginning with 'com.' are assumed to be internal. - if (assembly.name.StartsWith("com.")) - continue; - - // If this assembly begins with 'Unity', but isn't created from an Assembly Definition File, skip it. - if (assembly.name.StartsWith("Unity")) - { - bool isAssemblyDefinition = true; - - foreach (string sourceFile in assembly.sourceFiles) - { - if (!sourceFile.StartsWith("Assets/")) - { - isAssemblyDefinition = false; - break; - } - } - - if (!isAssemblyDefinition) - continue; - } - - assemblyNames.Add(assembly.name); - } - - // If there are no assembly names, - if (assemblyNames.Count == 0) - return; - - // Sort it alphabetically so that the order isn't constantly changing, which can affect version control. - assemblyNames.Sort(); - - // Only update if the list has changed. - for (int i = 0; i < assemblyNames.Count; i++) - { - if (currentAssemblyNames.Length != assemblyNames.Count || currentAssemblyNames[i] != assemblyNames[i]) - { - defaults.settings.assemblyNames = assemblyNames.ToArray(); - EditorUtility.SetDirty(defaults); - break; - } - } - } - - public static GameObject AddManagerToScene() - { - GameObject mgr = null; - - var mgrComponent = ES3ReferenceMgr.GetManagerFromScene(SceneManager.GetActiveScene(), false); - if (mgrComponent != null) - mgr = mgrComponent.gameObject; - - if (mgr == null) - mgr = new GameObject("Easy Save 3 Manager"); - - if (mgr.GetComponent() == null) - { - var refMgr = mgr.AddComponent(); - - if (!Application.isPlaying && ES3Settings.defaultSettingsScriptableObject.autoUpdateReferences) - refMgr.RefreshDependencies(); - } - - if (mgr.GetComponent() == null) - mgr.AddComponent(); - - Undo.RegisterCreatedObjectUndo(mgr, "Enabled Easy Save for Scene"); - return mgr; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Postprocessor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3Postprocessor.cs.meta deleted file mode 100644 index f6726e4..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3Postprocessor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4256380692bcb4e57bdc0a5e13956389 -timeCreated: 1474041535 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3PrefabEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3PrefabEditor.cs deleted file mode 100644 index 03bed84..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3PrefabEditor.cs +++ /dev/null @@ -1,50 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEngine.SceneManagement; -using System; -using System.Collections; -using ES3Internal; - -[CustomEditor(typeof(ES3Prefab))] -[System.Serializable] -public class ES3PrefabEditor : Editor -{ - bool showAdvanced = false; - bool openLocalRefs = false; - - public override void OnInspectorGUI() - { - var es3Prefab = (ES3Prefab)serializedObject.targetObject; - EditorGUILayout.HelpBox("Easy Save is enabled for this prefab, and can be saved and loaded with the ES3 methods.", MessageType.None); - - - showAdvanced = EditorGUILayout.Foldout(showAdvanced, "Advanced Settings"); - if(showAdvanced) - { - EditorGUI.indentLevel++; - es3Prefab.prefabId = EditorGUILayout.LongField("Prefab ID", es3Prefab.prefabId); - EditorGUILayout.LabelField("Reference count", es3Prefab.localRefs.Count.ToString()); - EditorGUI.indentLevel--; - - openLocalRefs = EditorGUILayout.Foldout(openLocalRefs, "localRefs"); - if (openLocalRefs) - { - EditorGUI.indentLevel++; - - EditorGUILayout.LabelField("It is not recommended to manually modify these."); - - foreach (var kvp in es3Prefab.localRefs) - { - EditorGUILayout.BeginHorizontal(); - - EditorGUILayout.ObjectField(kvp.Key, typeof(UnityEngine.Object), false); - EditorGUILayout.LongField(kvp.Value); - - EditorGUILayout.EndHorizontal(); - } - - EditorGUI.indentLevel--; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3PrefabEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3PrefabEditor.cs.meta deleted file mode 100644 index f0d7c5e..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3PrefabEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9d25610c9233c4cdfa5a0744c9956f5c -timeCreated: 1519132292 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ReferenceMgrEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3ReferenceMgrEditor.cs deleted file mode 100644 index 714c32b..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ReferenceMgrEditor.cs +++ /dev/null @@ -1,296 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEngine.SceneManagement; -using System; -using System.Collections; -using System.Collections.Generic; - -[CustomEditor(typeof(ES3ReferenceMgr))] -[System.Serializable] -public class ES3ReferenceMgrEditor : Editor -{ - private bool isDraggingOver = false; - private bool openReferences = false; - - private ES3ReferenceMgr _mgr = null; - private ES3ReferenceMgr mgr - { - get - { - if (_mgr == null) - _mgr = (ES3ReferenceMgr)serializedObject.targetObject; - return _mgr; - } - } - - public override void OnInspectorGUI() - { - EditorGUILayout.HelpBox("This allows Easy Save to maintain references to objects in your scene.\n\nIt is automatically updated when you enter Playmode or build your project.", MessageType.Info); - - if (EditorGUILayout.Foldout(openReferences, "References") != openReferences) - { - openReferences = !openReferences; - if (openReferences == true) - openReferences = EditorUtility.DisplayDialog("Are you sure?", "Opening this list will display every reference in the manager, which for larger projects can cause the Editor to freeze\n\nIt is strongly recommended that you save your project before continuing.", "Open References", "Cancel"); - } - - // Make foldout drag-and-drop enabled for objects. - if (GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition)) - { - Event evt = Event.current; - - switch (evt.type) - { - case EventType.DragUpdated: - case EventType.DragPerform: - isDraggingOver = true; - break; - case EventType.DragExited: - isDraggingOver = false; - break; - } - - if (isDraggingOver) - { - DragAndDrop.visualMode = DragAndDropVisualMode.Copy; - - if (evt.type == EventType.DragPerform) - { - DragAndDrop.AcceptDrag(); - Undo.RecordObject(mgr, "Add References to Easy Save 3 Reference List"); - foreach (UnityEngine.Object obj in DragAndDrop.objectReferences) - mgr.Add(obj); - // Return now because otherwise we'll change the GUI during an event which doesn't allow it. - return; - } - } - } - - if (openReferences) - { - EditorGUI.indentLevel++; - - foreach (var kvp in mgr.idRef) - { - EditorGUILayout.BeginHorizontal(); - - var value = EditorGUILayout.ObjectField(kvp.Value, typeof(UnityEngine.Object), true); - var key = EditorGUILayout.LongField(kvp.Key); - - EditorGUILayout.EndHorizontal(); - - if (value != kvp.Value || key != kvp.Key) - { - Undo.RecordObject(mgr, "Change Easy Save 3 References"); - // If we're deleting a value, delete it. - if (value == null) - mgr.Remove(key); - // Else, update the ID. - else - mgr.ChangeId(kvp.Key, key); - // Break, as removing or changing Dictionary items will make the foreach out of sync. - break; - } - } - - EditorGUI.indentLevel--; - } - - mgr.openPrefabs = EditorGUILayout.Foldout(mgr.openPrefabs, "ES3Prefabs"); - if (mgr.openPrefabs) - { - EditorGUI.indentLevel++; - - foreach (var prefab in mgr.prefabs) - { - EditorGUILayout.BeginHorizontal(); - - EditorGUILayout.ObjectField(prefab, typeof(UnityEngine.Object), true); - - EditorGUILayout.EndHorizontal(); - } - - EditorGUI.indentLevel--; - } - - var sp = serializedObject.FindProperty("excludeObjects"); - EditorGUILayout.PropertyField(sp); - serializedObject.ApplyModifiedProperties(); - - EditorGUILayout.LabelField("Reference count", mgr.refId.Count.ToString()); - EditorGUILayout.LabelField("Prefab count", mgr.prefabs.Count.ToString()); - - if (GUILayout.Button("Refresh")) - { - mgr.RefreshDependencies(); - } - - if (GUILayout.Button("Optimize")) - { - mgr.Optimize(); - } - } - - [MenuItem("GameObject/Easy Save 3/Add Dependencies to Manager", false, 33)] - [MenuItem("Assets/Easy Save 3/Add Dependencies to Manager", false, 33)] - public static void AddDependenciesToManager() - { - var mgr = ES3ReferenceMgr.GetManagerFromScene(SceneManager.GetActiveScene()); - if (mgr == null) - { - EditorUtility.DisplayDialog("Could not add reference to manager", "This object could not be added to the reference manager because no reference manager exists in this scene. To create one, go to Tools > Easy Save 3 > Add Manager to Scene", "Ok"); - return; - } - - var selected = new HashSet(Selection.GetFiltered(SelectionMode.DeepAssets)); - selected.UnionWith(Selection.GetFiltered(SelectionMode.TopLevel)); - - if (selected == null || selected.Count == 0) - return; - - Undo.RecordObject(mgr, "Update Easy Save 3 Reference Manager"); - - foreach (var obj in selected) - { - if (obj == null) - continue; - - if (obj.GetType() == typeof(GameObject)) - { - var go = (GameObject)obj; - if (ES3EditorUtility.IsPrefabInAssets(go) && go.GetComponent() != null) - mgr.AddPrefab(go.GetComponent()); - } - - ((ES3ReferenceMgr)mgr).AddDependencies(obj); - } - } - - [MenuItem("GameObject/Easy Save 3/Add Reference(s) to Manager", false, 33)] - [MenuItem("Assets/Easy Save 3/Add Reference(s) to Manager", false, 33)] - public static void AddReferencesToManager() - { - var mgr = ES3ReferenceMgr.Current; - if (mgr == null) - { - EditorUtility.DisplayDialog("Could not add reference to manager", "This object could not be added to the reference manager because no reference manager exists in this scene. To create one, go to Tools > Easy Save 3 > Add Manager to Scene", "Ok"); - return; - } - - var selected = Selection.GetFiltered(SelectionMode.TopLevel); - - if (selected == null || selected.Length == 0) - return; - - Undo.RecordObject(mgr, "Update Easy Save 3 Reference Manager"); - - foreach (var obj in selected) - { - if (obj == null) - continue; - - if (obj.GetType() == typeof(GameObject)) - { - var go = (GameObject)obj; - if (ES3EditorUtility.IsPrefabInAssets(go) && go.GetComponent() != null) - mgr.AddPrefab(go.GetComponent()); - } - - ((ES3ReferenceMgr)mgr).Add(obj); - } - } - - [MenuItem("GameObject/Easy Save 3/Add Reference(s) to Manager", true, 33)] - [MenuItem("Assets/Easy Save 3/Add Reference(s) to Manager", true, 33)] - [MenuItem("GameObject/Easy Save 3/Add Dependencies to Manager", true, 33)] - [MenuItem("Assets/Easy Save 3/Add Dependencies to Manager", true, 33)] - private static bool CanAddReferenceToManager() - { - var selected = Selection.GetFiltered(SelectionMode.Deep); - return selected != null && selected.Length > 0 && ES3ReferenceMgr.Current != null; - } - - [MenuItem("GameObject/Easy Save 3/Exclude Reference(s) from Manager", false, 33)] - [MenuItem("Assets/Easy Save 3/Exclude Reference(s) from Manager", false, 33)] - public static void ExcludeReferenceFromManager() - { - var mgr = (ES3ReferenceMgr)ES3ReferenceMgr.Current; - if (mgr == null) - { - EditorUtility.DisplayDialog("Could not exclude reference from manager", "This object could not be excluded from the reference manager because no reference manager exists in this scene. To create one, go to Tools > Easy Save 3 > Add Manager to Scene", "Ok"); - return; - } - - var selected = Selection.GetFiltered(SelectionMode.TopLevel); - - if (selected == null || selected.Length == 0) - return; - - Undo.RecordObject(mgr, "Exclude from Easy Save 3 Reference Manager"); - - foreach (var obj in selected) - { - if (obj == null) - continue; - - mgr.ExcludeObject(obj); - } - - mgr.RemoveNullOrInvalidValues(); - } - - [MenuItem("GameObject/Easy Save 3/Exclude Dependencies from Manager", false, 33)] - [MenuItem("Assets/Easy Save 3/Exclude Dependencies from Manager", false, 33)] - public static void ExcludeDependenciesFromManager() - { - var mgr = (ES3ReferenceMgr)ES3ReferenceMgr.Current; - if (mgr == null) - { - EditorUtility.DisplayDialog("Could not exclude reference from manager", "This object could not be excluded from the reference manager because no reference manager exists in this scene. To create one, go to Tools > Easy Save 3 > Add Manager to Scene", "Ok"); - return; - } - - var selected = Selection.GetFiltered(SelectionMode.TopLevel); - - if (selected == null || selected.Length == 0) - return; - - Undo.RecordObject(mgr, "Exclude from Easy Save 3 Reference Manager"); - - var dependencies = EditorUtility.CollectDependencies(selected); - - foreach (var dependency in dependencies) - mgr.ExcludeObject(dependency); - - mgr.RemoveNullOrInvalidValues(); - } - - [MenuItem("GameObject/Easy Save 3/Exclude Dependencies from Manager", true, 33)] - [MenuItem("Assets/Easy Save 3/Exclude Dependencies from Manager", true, 33)] - [MenuItem("GameObject/Easy Save 3/Exclude Reference(s) from Manager", true, 33)] - [MenuItem("Assets/Easy Save 3/Exclude Reference(s) from Manager", true, 33)] - private static bool CanExcludeReferencesFromManager() - { - var selected = Selection.GetFiltered(SelectionMode.Deep); - return selected != null && selected.Length > 0 && ES3ReferenceMgr.Current != null; - } - - [MenuItem("GameObject/Easy Save 3/Add Manager to Scene", false, 33)] - [MenuItem("Assets/Easy Save 3/Add Manager to Scene", false, 33)] - [MenuItem("Tools/Easy Save 3/Add Manager to Scene", false, 150)] - public static void EnableForScene() - { - if(!SceneManager.GetActiveScene().isLoaded) - EditorUtility.DisplayDialog("Could not add manager to scene", "Could not add Easy Save 3 Manager to scene because there is not currently a scene open.", "Ok"); - Selection.activeObject = ES3Postprocessor.AddManagerToScene(); - } - - [MenuItem("GameObject/Easy Save 3/Add Manager to Scene", true, 33)] - [MenuItem("Assets/Easy Save 3/Add Manager to Scene", true, 33)] - [MenuItem("Tools/Easy Save 3/Add Manager to Scene", true, 150)] - private static bool CanEnableForScene() - { - return ES3ReferenceMgr.GetManagerFromScene(SceneManager.GetActiveScene(), false) == null; - } -} - diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ReferenceMgrEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3ReferenceMgrEditor.cs.meta deleted file mode 100644 index b60a7a3..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ReferenceMgrEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3b43d266ed3464dedaa77757645ad61c -timeCreated: 1519132283 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptableObjectTypeTemplate.txt b/Assets/Plugins/Easy Save 3/Editor/ES3ScriptableObjectTypeTemplate.txt deleted file mode 100644 index c5d9a4b..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptableObjectTypeTemplate.txt +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute([propertyNames])] - public class ES3UserType_[es3TypeSuffix] : ES3ScriptableObjectType - { - public static ES3Type Instance = null; - - public ES3UserType_[es3TypeSuffix]() : base(typeof([fullType])){ Instance = this; priority = 1; } - - - protected override void WriteScriptableObject(object obj, ES3Writer writer) - { - var instance = ([fullType])obj; - [writes] - } - - protected override void ReadScriptableObject(ES3Reader reader, object obj) - { - var instance = ([fullType])obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - [reads] - default: - reader.Skip(); - break; - } - } - } - } - - - public class ES3UserType_[es3TypeSuffix]Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3UserType_[es3TypeSuffix]Array() : base(typeof([fullType][]), ES3UserType_[es3TypeSuffix].Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptableObjectTypeTemplate.txt.meta b/Assets/Plugins/Easy Save 3/Editor/ES3ScriptableObjectTypeTemplate.txt.meta deleted file mode 100644 index 11ad974..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptableObjectTypeTemplate.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3b4ae594e55834c35b197df04c2e81cb -timeCreated: 1483698819 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptingDefineSymbols.cs b/Assets/Plugins/Easy Save 3/Editor/ES3ScriptingDefineSymbols.cs deleted file mode 100644 index 4a21d10..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptingDefineSymbols.cs +++ /dev/null @@ -1,128 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEditor.Build; -using System.Collections.Generic; -using UnityEditor.Compilation; -using System.Reflection; -using System.Linq; -using System; - -[InitializeOnLoad] -public class ES3ScriptingDefineSymbols -{ - static ES3ScriptingDefineSymbols() - { - SetDefineSymbols(); - } - - static void SetDefineSymbols() - { - if (Type.GetType("Unity.VisualScripting.IncludeInSettingsAttribute, Unity.VisualScripting.Core") != null) - SetDefineSymbol("UNITY_VISUAL_SCRIPTING"); - - if (Type.GetType("Ludiq.IncludeInSettingsAttribute, Ludiq.Core.Runtime") != null) - SetDefineSymbol("BOLT_VISUAL_SCRIPTING"); - - if (Type.GetType("TMPro.TextMeshProUGUI, Unity.TextMeshPro") != null) - SetDefineSymbol("ES3_TMPRO"); - - if (Type.GetType("UnityEngine.EventSystems.EventSystem, UnityEngine.UI") != null) - SetDefineSymbol("ES3_UGUI"); - } - - internal static bool HasDefineSymbol(string symbol) - { -#if UNITY_2021_2_OR_NEWER - foreach (var target in GetAllNamedBuildTargets()) - { - string[] defines; - try - { - PlayerSettings.GetScriptingDefineSymbols(target, out defines); - if (defines.Contains(symbol)) - return true; - } - catch { } - } -#else - string definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - var allDefines = new HashSet(definesString.Split(';')); - if (allDefines.Contains(symbol)) - return true; -#endif - return false; - } - - internal static void SetDefineSymbol(string symbol) - { -#if UNITY_2021_2_OR_NEWER - foreach (var target in GetAllNamedBuildTargets()) - { - string[] defines; - try - { - PlayerSettings.GetScriptingDefineSymbols(target, out defines); - if (!defines.Contains(symbol)) - { - ArrayUtility.Add(ref defines, symbol); - PlayerSettings.SetScriptingDefineSymbols(target, defines); - } - } - catch { } - } -#else - string definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - var allDefines = new HashSet(definesString.Split(';')); - if (!allDefines.Contains(symbol)) - PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, string.Join(";", allDefines.Concat(new string[] { symbol }).ToArray())); -#endif - return; - } - - internal static void RemoveDefineSymbol(string symbol) - { -#if UNITY_2021_2_OR_NEWER - foreach (var target in GetAllNamedBuildTargets()) - { - string[] defines; - try - { - PlayerSettings.GetScriptingDefineSymbols(target, out defines); - ArrayUtility.Remove(ref defines, symbol); - PlayerSettings.SetScriptingDefineSymbols(target, defines); - } - catch { } - } -#else - string definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); - definesString.Replace(symbol + ";", ""); // With semicolon - definesString.Replace(symbol, ""); // Without semicolon - PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, definesString); -#endif - return; - } - -#if UNITY_2021_2_OR_NEWER - static List GetAllNamedBuildTargets() - { - var staticFields = typeof(NamedBuildTarget).GetFields(BindingFlags.Public | BindingFlags.Static); - var buildTargets = new List(); - - foreach (var staticField in staticFields) - { - // We exclude 'Unknown' because this can throw errors when used with certain methods. - if (staticField.Name == "Unknown") - continue; - - // A bug at Unity's end means that Stadia can throw an error. - if (staticField.Name == "Stadia") - continue; - - if (staticField.FieldType == typeof(NamedBuildTarget)) - buildTargets.Add((NamedBuildTarget)staticField.GetValue(null)); - } - - return buildTargets; - } -#endif -} diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptingDefineSymbols.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3ScriptingDefineSymbols.cs.meta deleted file mode 100644 index ca2780c..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ScriptingDefineSymbols.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 69b6276384d46d34fb2705f95689e8cc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3SettingsEditor.cs b/Assets/Plugins/Easy Save 3/Editor/ES3SettingsEditor.cs deleted file mode 100644 index 9eef456..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3SettingsEditor.cs +++ /dev/null @@ -1,56 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEngine.SceneManagement; -using System; -using System.Collections; -using ES3Internal; - -namespace ES3Editor -{ - public static class ES3SettingsEditor - { - public static void Draw(ES3SerializableSettings settings) - { - var style = EditorStyle.Get; - - settings.location = (ES3.Location)EditorGUILayout.EnumPopup("Location", settings.location); - // If the location is File, show the Directory. - if(settings.location == ES3.Location.File) - settings.directory = (ES3.Directory)EditorGUILayout.EnumPopup("Directory", settings.directory); - - settings.path = EditorGUILayout.TextField("Default File Path", settings.path); - - EditorGUILayout.Space(); - - settings.encryptionType = (ES3.EncryptionType)EditorGUILayout.EnumPopup("Encryption", settings.encryptionType); - settings.encryptionPassword = EditorGUILayout.TextField("Encryption Password", settings.encryptionPassword); - - EditorGUILayout.Space(); - - settings.compressionType = (ES3.CompressionType)EditorGUILayout.EnumPopup("Compression", settings.compressionType); - - EditorGUILayout.Space(); - - settings.saveChildren = EditorGUILayout.Toggle("Save GameObject Children", settings.saveChildren); - - EditorGUILayout.Space(); - - if(settings.showAdvancedSettings = EditorGUILayout.Foldout(settings.showAdvancedSettings, "Advanced Settings")) - { - EditorGUILayout.BeginVertical(style.area); - - settings.format = (ES3.Format)EditorGUILayout.EnumPopup("Format", settings.format); - if (settings.format == ES3.Format.JSON) - settings.prettyPrint = EditorGUILayout.Toggle(new GUIContent("Pretty print JSON"), settings.prettyPrint); - settings.bufferSize = EditorGUILayout.IntField("Buffer Size", settings.bufferSize); - settings.memberReferenceMode = (ES3.ReferenceMode)EditorGUILayout.EnumPopup("Serialise Unity Object fields", settings.memberReferenceMode); - settings.serializationDepthLimit = EditorGUILayout.IntField("Serialisation Depth", settings.serializationDepthLimit); - settings.postprocessRawCachedData = EditorGUILayout.Toggle(new GUIContent("Postprocess raw cached data"), settings.postprocessRawCachedData); - - EditorGUILayout.Space(); - - EditorGUILayout.EndVertical(); - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3SettingsEditor.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3SettingsEditor.cs.meta deleted file mode 100644 index be6af3c..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3SettingsEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 35659b9a083a341d7bee216c4b71f4bc -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3TypeTemplate.txt b/Assets/Plugins/Easy Save 3/Editor/ES3TypeTemplate.txt deleted file mode 100644 index 30c17ba..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3TypeTemplate.txt +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute([propertyNames])] - public class ES3UserType_[es3TypeSuffix] : ES3Type - { - public static ES3Type Instance = null; - - public ES3UserType_[es3TypeSuffix]() : base(typeof([fullType])){ Instance = this; priority = 1;} - - - public override void Write(object obj, ES3Writer writer) - { - var instance = ([fullType])obj; - [writes] - } - - public override object Read(ES3Reader reader) - { - var instance = new [fullType](); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = ([fullType])obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - [reads] - default: - reader.Skip(); - break; - } - } - } - } - - - public class ES3UserType_[es3TypeSuffix]Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3UserType_[es3TypeSuffix]Array() : base(typeof([fullType][]), ES3UserType_[es3TypeSuffix].Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3TypeTemplate.txt.meta b/Assets/Plugins/Easy Save 3/Editor/ES3TypeTemplate.txt.meta deleted file mode 100644 index 7c86dfe..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3TypeTemplate.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e84ec2bd739f543b0a5cd3c13741f744 -timeCreated: 1483718243 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Type_MaterialTemplate.txt b/Assets/Plugins/Easy Save 3/Editor/ES3Type_MaterialTemplate.txt deleted file mode 100644 index 541952f..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3Type_MaterialTemplate.txt +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3UserType_Material : ES3UnityObjectType - { - public static ES3Type Instance = null; - - public ES3UserType_Material() : base(typeof(UnityEngine.Material)){ Instance = this; priority = 1; } - - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Material)obj; - - writer.WriteProperty("shader", instance.shader); - writer.WriteProperty("renderQueue", instance.renderQueue, ES3Type_int.Instance); - writer.WriteProperty("shaderKeywords", instance.shaderKeywords); - writer.WriteProperty("globalIlluminationFlags", instance.globalIlluminationFlags); - [writes] - } - - protected override object ReadUnityObject(ES3Reader reader) - { - var obj = new Material(Shader.Find("Diffuse")); - ReadUnityObject(reader, obj); - return obj; - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Material)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - case "name": - instance.name = reader.Read(ES3Type_string.Instance); - break; - case "shader": - instance.shader = reader.Read(ES3Type_Shader.Instance); - break; - case "renderQueue": - instance.renderQueue = reader.Read(ES3Type_int.Instance); - break; - case "shaderKeywords": - instance.shaderKeywords = reader.Read(); - break; - case "globalIlluminationFlags": - instance.globalIlluminationFlags = reader.Read(); - break; - [reads] - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Type_MaterialTemplate.txt.meta b/Assets/Plugins/Easy Save 3/Editor/ES3Type_MaterialTemplate.txt.meta deleted file mode 100644 index 5ee9deb..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3Type_MaterialTemplate.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f90b0399488ef42e5bc804122fd99c58 -timeCreated: 1483698819 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ValueTypeTemplate.txt b/Assets/Plugins/Easy Save 3/Editor/ES3ValueTypeTemplate.txt deleted file mode 100644 index 5df924e..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ValueTypeTemplate.txt +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute([propertyNames])] - public class ES3UserType_[es3TypeSuffix] : ES3Type - { - public static ES3Type Instance = null; - - public ES3UserType_[es3TypeSuffix]() : base(typeof([fullType])){ Instance = this; priority = 1;} - - - public override void Write(object obj, ES3Writer writer) - { - var instance = ([fullType])obj; - [writes] - } - - public override object Read(ES3Reader reader) - { - var instance = new [fullType](); - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - [reads] - default: - reader.Skip(); - break; - } - } - return instance; - } - } - - - public class ES3UserType_[es3TypeSuffix]Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3UserType_[es3TypeSuffix]Array() : base(typeof([fullType][]), ES3UserType_[es3TypeSuffix].Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3ValueTypeTemplate.txt.meta b/Assets/Plugins/Easy Save 3/Editor/ES3ValueTypeTemplate.txt.meta deleted file mode 100644 index 067cb04..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3ValueTypeTemplate.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f67742ea0c50242f8af16c3f807b723b -timeCreated: 1483718243 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Window.cs b/Assets/Plugins/Easy Save 3/Editor/ES3Window.cs deleted file mode 100644 index 98d6aca..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3Window.cs +++ /dev/null @@ -1,238 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Linq; - -namespace ES3Editor -{ - public class ES3Window : EditorWindow - { - private SubWindow[] windows = null; - - public SubWindow currentWindow; - - [MenuItem("Window/Easy Save 3", false, 1000)] - [MenuItem("Assets/Easy Save 3/Open Easy Save 3 Window", false, 1000)] - public static void Init() - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if(window != null) - window.Show(); - } - - public static void InitAndShowHome() - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if (window != null) - { - window.Show(); - window.SetCurrentWindow(typeof(HomeWindow)); - } - } - - [MenuItem("Tools/Easy Save 3/Auto Save", false, 100)] - public static void InitAndShowAutoSave() - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if (window != null) - { - window.Show(); - window.SetCurrentWindow(typeof(AutoSaveWindow)); - } - } - - public static void InitAndShowReferences() - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if (window != null) - { - window.Show(); - window.SetCurrentWindow(typeof(ReferencesWindow)); - } - } - - [MenuItem("Tools/Easy Save 3/Types", false, 100)] - public static void InitAndShowTypes() - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if (window != null) - { - window.Show(); - window.SetCurrentWindow(typeof(TypesWindow)); - } - } - - public static void InitAndShowTypes(System.Type type) - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if (window != null) - { - window.Show(); - var typesWindow = (TypesWindow)window.SetCurrentWindow(typeof(TypesWindow)); - typesWindow.SelectType(type); - } - } - - [MenuItem("Tools/Easy Save 3/Settings", false, 100)] - public static void InitAndShowSettings() - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if (window != null) - { - window.Show(); - window.SetCurrentWindow(typeof(SettingsWindow)); - } - } - - [MenuItem("Tools/Easy Save 3/Tools", false, 100)] - public static void InitAndShowTools() - { - // Get existing open window or if none, make a new one: - ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window)); - if (window != null) - { - window.Show(); - window.SetCurrentWindow(typeof(ToolsWindow)); - } - } - - public void InitSubWindows() - { - windows = new SubWindow[]{ - new HomeWindow(this), - new SettingsWindow(this), - new ToolsWindow(this), - new TypesWindow(this), - new AutoSaveWindow(this) - //, new ReferencesWindow(this) - }; - } - - void OnLostFocus() - { - if(currentWindow != null) - currentWindow.OnLostFocus(); - } - - private void OnFocus() - { - if (currentWindow != null) - currentWindow.OnFocus(); - } - - void OnDestroy() - { - if(currentWindow != null) - currentWindow.OnDestroy(); - } - - void OnEnable() - { - if(windows == null) - InitSubWindows(); - // Set the window name and icon. - var icon = AssetDatabase.LoadAssetAtPath(ES3Settings.PathToEasySaveFolder()+"Editor/es3Logo16x16.png"); - titleContent = new GUIContent("Easy Save", icon); - - // Get the last opened window and open it. - if(currentWindow == null) - { - var currentWindowName = EditorPrefs.GetString("ES3Editor.Window.currentWindow", windows[0].name); - for(int i=0; i w.GetType() == type); - EditorPrefs.SetString("ES3Editor.Window.currentWindow", currentWindow.name); - return currentWindow; - } - - // Shows the Easy Save Home window if it's not been disabled. - // This method is called from the Postprocessor. - public static void OpenEditorWindowOnStart() - { - if(EditorPrefs.GetBool("Show ES3 Window on Start", true)) - ES3Window.InitAndShowHome(); - EditorPrefs.SetBool("Show ES3 Window on Start", false); - } - } - - public abstract class SubWindow - { - public string name; - public EditorWindow parent; - public abstract void OnGUI(); - - public SubWindow(string name, EditorWindow parent) - { - this.name = name; - this.parent = parent; - } - - public virtual void OnLostFocus() - { - } - - public virtual void OnFocus() - { - } - - public virtual void OnDestroy() - { - } - - public virtual void OnHierarchyChange() - { - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/ES3Window.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ES3Window.cs.meta deleted file mode 100644 index 0f5ce70..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ES3Window.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a95d98897f1cf4e7288b53b0fd8036c1 -timeCreated: 1519132293 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/EasySave3.asmdef.disabled b/Assets/Plugins/Easy Save 3/Editor/EasySave3.asmdef.disabled deleted file mode 100644 index b50911d..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/EasySave3.asmdef.disabled +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "EasySave3", - "rootNamespace": "", - "references": [ - "Unity.VisualScripting.Core" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/EasySave3.asmdef.disabled.meta b/Assets/Plugins/Easy Save 3/Editor/EasySave3.asmdef.disabled.meta deleted file mode 100644 index 0820efe..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/EasySave3.asmdef.disabled.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6eac6c06328c1ab4dacdf5d40907da6b -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/EasySave3Editor.asmdef.disabled b/Assets/Plugins/Easy Save 3/Editor/EasySave3Editor.asmdef.disabled deleted file mode 100644 index 08e43c1..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/EasySave3Editor.asmdef.disabled +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "EasySave3Editor", - "rootNamespace": "", - "references": [ - "EasySave3" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Editor/EasySave3Editor.asmdef.disabled.meta b/Assets/Plugins/Easy Save 3/Editor/EasySave3Editor.asmdef.disabled.meta deleted file mode 100644 index 5de07cc..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/EasySave3Editor.asmdef.disabled.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5c64090e866862f449075dc1f3e5ab06 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/EnableES3AssemblyDefinitions.cs b/Assets/Plugins/Easy Save 3/Editor/EnableES3AssemblyDefinitions.cs deleted file mode 100644 index e6be747..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/EnableES3AssemblyDefinitions.cs +++ /dev/null @@ -1,23 +0,0 @@ -using UnityEditor; -using System.IO; - -public class EnableES3AssemblyDefinitions : Editor -{ - [MenuItem("Tools/Easy Save 3/Enable Assembly Definition Files", false, 150)] - public static void EnableAsmDef() - { - var pathToEasySaveFolder = ES3Settings.PathToEasySaveFolder(); - File.Delete(pathToEasySaveFolder + "Editor/EasySave3.asmdef.disabled.meta"); - File.Delete(pathToEasySaveFolder + "Editor/EasySave3Editor.asmdef.disabled.meta"); - File.Move(pathToEasySaveFolder + "Editor/EasySave3Editor.asmdef.disabled", pathToEasySaveFolder + "Editor/EasySave3Editor.asmdef"); - File.Move(pathToEasySaveFolder + "Editor/EasySave3.asmdef.disabled", pathToEasySaveFolder + "EasySave3.asmdef"); - AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); - EditorUtility.DisplayDialog("Assembly definition files installed", "Assembly definition files for Easy Save 3 installed.\n\nYou may need to go to 'Assets > Reimport' to apply the changes.", "Done"); - } - - [MenuItem("Tools/Easy Save 3/Enable Assembly Definition Files", true, 150)] - public static bool CanEnableAsmDef() - { - return !File.Exists(ES3Settings.PathToEasySaveFolder() + "EasySave3.asmdef"); - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/EnableES3AssemblyDefinitions.cs.meta b/Assets/Plugins/Easy Save 3/Editor/EnableES3AssemblyDefinitions.cs.meta deleted file mode 100644 index 0144526..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/EnableES3AssemblyDefinitions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f53975dae5ac26947856dd0b0bd3be7e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/HomeWindow.cs b/Assets/Plugins/Easy Save 3/Editor/HomeWindow.cs deleted file mode 100644 index 5e86054..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/HomeWindow.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace ES3Editor -{ - public class HomeWindow : SubWindow - { - Vector2 scrollPos = Vector2.zero; - - public HomeWindow(EditorWindow window) : base("Home", window){} - - public override void OnGUI() - { - - var style = EditorStyle.Get; - - scrollPos = EditorGUILayout.BeginScrollView(scrollPos); - - EditorGUILayout.BeginVertical(style.area); - - GUILayout.Label("Welcome to Easy Save", style.heading); - - EditorGUILayout.BeginVertical(style.area); - GUILayout.Label("New To Easy Save?", style.subheading); - EditorGUILayout.BeginVertical(style.area); - ES3EditorUtility.DisplayLink("• See our Getting Started guide", "http://docs.moodkie.com/easy-save-3/getting-started/"); - EditorGUILayout.EndVertical(); - - GUILayout.Label("Support", style.subheading); - - EditorGUILayout.BeginVertical(style.area); - - ES3EditorUtility.DisplayLink("• Contact us directly", "http://www.moodkie.com/contact/"); - ES3EditorUtility.DisplayLink("• Ask a question in our Easy Save 3 forums", "http://moodkie.com/forum/viewforum.php?f=12"); - ES3EditorUtility.DisplayLink("• Ask a question in the Unity Forum thread","https://forum.unity3d.com/threads/easy-save-the-complete-save-load-asset-for-unity.91040/"); - EditorGUILayout.EndVertical(); - - GUILayout.Label("Documentation and Guides", style.subheading); - - EditorGUILayout.BeginVertical(style.area); - - ES3EditorUtility.DisplayLink("• Documentation", "http://docs.moodkie.com/product/easy-save-3/"); - ES3EditorUtility.DisplayLink("• Guides", "http://docs.moodkie.com/product/easy-save-3/es3-guides/"); - ES3EditorUtility.DisplayLink("• API Scripting Reference", "http://docs.moodkie.com/product/easy-save-3/es3-api/"); - ES3EditorUtility.DisplayLink("• Supported Types", "http://docs.moodkie.com/easy-save-3/es3-supported-types/"); - - - EditorGUILayout.EndVertical(); - - GUILayout.Label("PlayMaker Documentation", style.subheading); - - EditorGUILayout.BeginVertical(style.area); - - ES3EditorUtility.DisplayLink("• Actions", "http://docs.moodkie.com/product/easy-save-3/es3-playmaker/es3-playmaker-actions/"); - ES3EditorUtility.DisplayLink("• Actions Overview", "http://docs.moodkie.com/easy-save-3/es3-playmaker/playmaker-actions-overview/"); - - - EditorGUILayout.EndVertical(); - - EditorGUILayout.EndVertical(); - - EditorGUILayout.EndVertical(); - - EditorGUILayout.EndScrollView(); - - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/HomeWindow.cs.meta b/Assets/Plugins/Easy Save 3/Editor/HomeWindow.cs.meta deleted file mode 100644 index cf019eb..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/HomeWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 394cc2e77038849709526f44f7efdd22 -timeCreated: 1519132283 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ReferencesWindow.cs b/Assets/Plugins/Easy Save 3/Editor/ReferencesWindow.cs deleted file mode 100644 index 57c4441..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ReferencesWindow.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using ES3Internal; - -namespace ES3Editor -{ - public class ReferencesWindow : SubWindow - { - - - public ReferencesWindow(EditorWindow window) : base("References", window){} - - public override void OnGUI() - { - - } - } - -} diff --git a/Assets/Plugins/Easy Save 3/Editor/ReferencesWindow.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ReferencesWindow.cs.meta deleted file mode 100644 index 5e132e9..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ReferencesWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: af2d805793e784eef87fbcdebb11fa35 -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/SettingsWindow.cs b/Assets/Plugins/Easy Save 3/Editor/SettingsWindow.cs deleted file mode 100644 index 0c3e4d6..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/SettingsWindow.cs +++ /dev/null @@ -1,179 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using ES3Internal; - -namespace ES3Editor -{ - public class SettingsWindow : SubWindow - { - public ES3Defaults editorSettings = null; - public ES3SerializableSettings settings = null; - public SerializedObject so = null; - public SerializedProperty referenceFoldersProperty = null; - - Vector2 scrollPos = Vector2.zero; - const string disableGlobalDefineName = "ES3GLOBAL_DISABLED"; - - public SettingsWindow(EditorWindow window) : base("Settings", window){} - - public void OnEnable() - { - - } - - public override void OnGUI() - { - if(settings == null || editorSettings == null) - Init(); - - var style = EditorStyle.Get; - - var labelWidth = EditorGUIUtility.labelWidth; - - - EditorGUI.BeginChangeCheck(); - - using (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPos, style.area)) - { - scrollPos = scrollView.scrollPosition; - - EditorGUIUtility.labelWidth = 160; - - GUILayout.Label("Runtime Settings", style.heading); - - using (new EditorGUILayout.VerticalScope(style.area)) - { - ES3SettingsEditor.Draw(settings); - } - - GUILayout.Label("Debug Settings", style.heading); - - using (new EditorGUILayout.VerticalScope(style.area)) - { - EditorGUIUtility.labelWidth = 100; - - using (new EditorGUILayout.HorizontalScope()) - { - EditorGUILayout.PrefixLabel("Log Info"); - editorSettings.logDebugInfo = EditorGUILayout.Toggle(editorSettings.logDebugInfo); - } - - using (new EditorGUILayout.HorizontalScope()) - { - EditorGUILayout.PrefixLabel("Log Warnings"); - editorSettings.logWarnings = EditorGUILayout.Toggle(editorSettings.logWarnings); - } - - using (new EditorGUILayout.HorizontalScope()) - { - EditorGUILayout.PrefixLabel("Log Errors"); - editorSettings.logErrors = EditorGUILayout.Toggle(editorSettings.logErrors); - } - - EditorGUILayout.Space(); - } - - GUILayout.Label("Editor Settings", style.heading); - - using (new EditorGUILayout.VerticalScope(style.area)) - { - EditorGUIUtility.labelWidth = 170; - - using (new EditorGUILayout.HorizontalScope()) - { - EditorGUILayout.PrefixLabel("Auto Update References"); - editorSettings.autoUpdateReferences = EditorGUILayout.Toggle(editorSettings.autoUpdateReferences); - } - - if (editorSettings.autoUpdateReferences) - { - using (new EditorGUILayout.HorizontalScope()) - { - var content = new GUIContent("-- When changes are made", "Should Easy Save update the reference manager when objects in your scene changes?"); - editorSettings.updateReferencesWhenSceneChanges = EditorGUILayout.Toggle(content, editorSettings.updateReferencesWhenSceneChanges); - } - - using (new EditorGUILayout.HorizontalScope()) - { - var content = new GUIContent("-- When scene is saved", "Should Easy Save update the reference manager when objects in your scene is saved?"); - editorSettings.updateReferencesWhenSceneIsSaved = EditorGUILayout.Toggle(content, editorSettings.updateReferencesWhenSceneIsSaved); - } - - using (new EditorGUILayout.HorizontalScope()) - { - var content = new GUIContent("-- When scene is opened", "Should Easy Save update the reference manager you open a scene in the Editor?"); - editorSettings.updateReferencesWhenSceneIsOpened = EditorGUILayout.Toggle(content, editorSettings.updateReferencesWhenSceneIsOpened); - } - EditorGUILayout.Space(); - } - - using (new EditorGUILayout.HorizontalScope()) - { - so.Update(); - EditorGUILayout.PropertyField(referenceFoldersProperty, true); - so.ApplyModifiedProperties(); - } - EditorGUILayout.Space(); - - /*using (new EditorGUILayout.HorizontalScope()) - { - var content = new GUIContent("Reference depth", "How deep should Easy Save look when gathering references from an object? Higher means deeper."); - EditorGUILayout.PrefixLabel(content); - editorSettings.collectDependenciesDepth = EditorGUILayout.IntField(editorSettings.collectDependenciesDepth); - }*/ - - using (new EditorGUILayout.HorizontalScope()) - { - var content = new GUIContent("Reference timeout (seconds)", "How many seconds should Easy Save taking collecting references for an object before timing out?"); - EditorGUILayout.PrefixLabel(content); - editorSettings.collectDependenciesTimeout = EditorGUILayout.IntField(editorSettings.collectDependenciesTimeout); - } - - using (new EditorGUILayout.HorizontalScope()) - { - EditorGUILayout.PrefixLabel("Use Global References"); - - bool useGlobalReferences = !ES3ScriptingDefineSymbols.HasDefineSymbol(disableGlobalDefineName); - if(EditorGUILayout.Toggle(useGlobalReferences) != useGlobalReferences) - { - // If global references is currently enabled, we want to disable it. - if (!useGlobalReferences) - { - ES3ScriptingDefineSymbols.RemoveDefineSymbol(disableGlobalDefineName); - EditorUtility.DisplayDialog("Global references disabled for build platform", "This will only disable Global References for this build platform. To disable it for other build platforms, open that platform in the Build Settings and uncheck this box again.", "Ok"); - } - // Else we want to enable it. - else - ES3ScriptingDefineSymbols.SetDefineSymbol(disableGlobalDefineName); - } - } - - using (new EditorGUILayout.HorizontalScope()) - { - var content = new GUIContent("Add All Prefabs to Manager", "Should all prefabs with ES3Prefab Components be added to the manager?"); - EditorGUILayout.PrefixLabel(content); - editorSettings.addAllPrefabsToManager = EditorGUILayout.Toggle(editorSettings.addAllPrefabsToManager); - } - - EditorGUILayout.Space(); - } - } - - if (EditorGUI.EndChangeCheck()) - EditorUtility.SetDirty(editorSettings); - - EditorGUIUtility.labelWidth = labelWidth; // Set the label width back to default - } - - public void Init() - { - editorSettings = ES3Settings.defaultSettingsScriptableObject; - settings = editorSettings.settings; - so = new SerializedObject(editorSettings); - referenceFoldersProperty = so.FindProperty("referenceFolders"); - } - } - -} diff --git a/Assets/Plugins/Easy Save 3/Editor/SettingsWindow.cs.meta b/Assets/Plugins/Easy Save 3/Editor/SettingsWindow.cs.meta deleted file mode 100644 index d58da5f..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/SettingsWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 95e7bbc9a5aee44feb088811fb5e7b80 -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/ToolsWindow.cs b/Assets/Plugins/Easy Save 3/Editor/ToolsWindow.cs deleted file mode 100644 index 4518e37..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ToolsWindow.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using System.IO; - -namespace ES3Editor -{ - public class ToolsWindow : SubWindow - { - public ToolsWindow(EditorWindow window) : base("Tools", window){} - - public override void OnGUI() - { - var style = EditorStyle.Get; - - EditorGUILayout.BeginHorizontal(style.area); - - if (GUILayout.Button("Open Persistent Data Path")) - OpenPersistentDataPath(); - - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.BeginHorizontal(style.area); - - if (GUILayout.Button("Clear Persistent Data Path")) - ClearPersistentDataPath(); - - if (GUILayout.Button("Clear PlayerPrefs")) - ClearPlayerPrefs(); - - EditorGUILayout.EndHorizontal(); - } - - [MenuItem("Tools/Easy Save 3/Open Persistent Data Path", false, 200)] - private static void OpenPersistentDataPath() - { - EditorUtility.RevealInFinder(Application.persistentDataPath); - } - - [MenuItem("Tools/Easy Save 3/Clear Persistent Data Path", false, 200)] - private static void ClearPersistentDataPath() - { - if (EditorUtility.DisplayDialog("Clear Persistent Data Path", "Are you sure you wish to clear the persistent data path?\n This action cannot be reversed.", "Clear", "Cancel")) - { - System.IO.DirectoryInfo di = new DirectoryInfo(Application.persistentDataPath); - - foreach (FileInfo file in di.GetFiles()) - file.Delete(); - foreach (DirectoryInfo dir in di.GetDirectories()) - dir.Delete(true); - } - } - - [MenuItem("Tools/Easy Save 3/Clear PlayerPrefs", false, 200)] - private static void ClearPlayerPrefs() - { - if (EditorUtility.DisplayDialog("Clear PlayerPrefs", "Are you sure you wish to clear PlayerPrefs?\nThis action cannot be reversed.", "Clear", "Cancel")) - PlayerPrefs.DeleteAll(); - } - } - - /*public static class OSFileBrowser - { - public static bool IsInMacOS - { - get - { - return UnityEngine.SystemInfo.operatingSystem.IndexOf("Mac OS") != -1; - } - } - - public static bool IsInWinOS - { - get - { - return UnityEngine.SystemInfo.operatingSystem.IndexOf("Windows") != -1; - } - } - - public static void OpenInMac(string path) - { - bool openInsidesOfFolder = false; - - // try mac - string macPath = path.Replace("\\", "/"); // mac finder doesn't like backward slashes - - if ( System.IO.Directory.Exists(macPath) ) // if path requested is a folder, automatically open insides of that folder - { - openInsidesOfFolder = true; - } - - if ( !macPath.StartsWith("\"") ) - { - macPath = "\"" + macPath; - } - - if ( !macPath.EndsWith("\"") ) - { - macPath = macPath + "\""; - } - - string arguments = (openInsidesOfFolder ? "" : "-R ") + macPath; - - try - { - System.Diagnostics.Process.Start("open", arguments); - } - catch ( System.ComponentModel.Win32Exception e ) - { - // tried to open mac finder in windows - // just silently skip error - // we currently have no platform define for the current OS we are in, so we resort to this - e.HelpLink = ""; // do anything with this variable to silence warning about not using it - } - } - - public static void OpenInWin(string path) - { - bool openInsidesOfFolder = false; - - // try windows - string winPath = path.Replace("/", "\\"); // windows explorer doesn't like forward slashes - - if ( System.IO.Directory.Exists(winPath) ) // if path requested is a folder, automatically open insides of that folder - openInsidesOfFolder = true; - - try - { - System.Diagnostics.Process.Start("explorer.exe", (openInsidesOfFolder ? "/root," : "/select,") + "\"" + winPath + "\""); - } - catch ( System.ComponentModel.Win32Exception e ) - { - e.HelpLink = ""; - } - } - - public static void Open(string path) - { - if ( IsInWinOS ) - { - OpenInWin(path); - } - else if ( IsInMacOS ) - { - OpenInMac(path); - } - else // couldn't determine OS - { - OpenInWin(path); - OpenInMac(path); - } - } - }*/ -} diff --git a/Assets/Plugins/Easy Save 3/Editor/ToolsWindow.cs.meta b/Assets/Plugins/Easy Save 3/Editor/ToolsWindow.cs.meta deleted file mode 100644 index c6fbe3f..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/ToolsWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0d6114c1d40624e9e8575e814c45ac1a -timeCreated: 1519132280 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/TypesWindow.cs b/Assets/Plugins/Easy Save 3/Editor/TypesWindow.cs deleted file mode 100644 index 37d83fb..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/TypesWindow.cs +++ /dev/null @@ -1,728 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using System; -using System.Reflection; -using System.Linq; -using ES3Types; -using System.IO; -using ES3Internal; -using System.Text.RegularExpressions; - -namespace ES3Editor -{ - public class TypesWindow : SubWindow - { - TypeListItem[] types = null; - const int recentTypeCount = 5; - List recentTypes = null; - - Vector2 typeListScrollPos = Vector2.zero; - Vector2 typePaneScrollPos = Vector2.zero; - int leftPaneWidth = 300; - - string searchFieldValue = ""; - - int selectedType = -1; - private ES3Reflection.ES3ReflectedMember[] fields = new ES3Reflection.ES3ReflectedMember[0]; - private bool[] fieldSelected = new bool[0]; - - private Texture2D checkmark; - //private Texture2D checkmarkSmall; - - private GUIStyle searchBarStyle; - private GUIStyle searchBarCancelButtonStyle; - private GUIStyle leftPaneStyle; - private GUIStyle typeButtonStyle; - private GUIStyle selectedTypeButtonStyle; - private GUIStyle selectAllNoneButtonStyle; - - private string valueTemplateFile; - private string classTemplateFile; - private string componentTemplateFile; - private string scriptableObjectTemplateFile; - - private bool unsavedChanges = false; - - public TypesWindow(EditorWindow window) : base("Types", window){} - - public override void OnGUI() - { - if(types == null) - Init(); - - EditorGUILayout.BeginHorizontal(); - - EditorGUILayout.BeginVertical(leftPaneStyle); - SearchBar(); - TypeList(); - EditorGUILayout.EndVertical(); - EditorGUILayout.BeginVertical(); - TypePane(); - EditorGUILayout.EndVertical(); - - EditorGUILayout.EndHorizontal(); - } - - private void SearchBar() - { - var style = EditorStyle.Get; - - GUILayout.Label("Enter a type name in the field below\n* Type names are case-sensitive *", style.subheading2); - - EditorGUILayout.BeginHorizontal(); - - // Set control name so we can force a Focus reset for it. - string currentSearchFieldValue = EditorGUILayout.TextField(searchFieldValue, searchBarStyle); - - if(searchFieldValue != currentSearchFieldValue) - { - searchFieldValue = currentSearchFieldValue; - PerformSearch(currentSearchFieldValue); - } - - GUI.SetNextControlName("Clear"); - - if(GUILayout.Button("x", searchBarCancelButtonStyle)) - { - searchFieldValue = ""; - GUI.FocusControl("Clear"); - PerformSearch(""); - } - - EditorGUILayout.EndHorizontal(); - } - - private void RecentTypeList() - { - if(!string.IsNullOrEmpty(searchFieldValue) || recentTypes.Count == 0) - return; - - for(int i=recentTypes.Count-1; i>-1; i--) - TypeButton(recentTypes[i]); - - EditorGUILayout.TextArea("",GUI.skin.horizontalSlider); - - } - - private void TypeList() - { - if(!string.IsNullOrEmpty(searchFieldValue)) - GUILayout.Label("Search Results", EditorStyles.boldLabel); - - typeListScrollPos = EditorGUILayout.BeginScrollView(typeListScrollPos); - - RecentTypeList(); - - if(!string.IsNullOrEmpty(searchFieldValue)) - for(int i = 0; i < types.Length; i++) - TypeButton(i); - - EditorGUILayout.EndScrollView(); - } - - private void TypePane() - { - if(selectedType < 0) - return; - - var style = EditorStyle.Get; - - var typeListItem = types[selectedType]; - var type = typeListItem.type; - - typePaneScrollPos = EditorGUILayout.BeginScrollView(typePaneScrollPos, style.area); - - GUILayout.Label(typeListItem.name, style.subheading); - GUILayout.Label(typeListItem.namespaceName); - - EditorGUILayout.BeginVertical(style.area); - - bool hasParameterlessConstructor = ES3Reflection.HasParameterlessConstructor(type); - bool isComponent = ES3Reflection.IsAssignableFrom(typeof(Component), type); - - string path = GetOutputPath(types[selectedType].type); - // An ES3Type file already exists. - if(File.Exists(path)) - { - if(hasParameterlessConstructor || isComponent) - { - EditorGUILayout.BeginHorizontal(); - if(GUILayout.Button("Reset to Default")) - { - SelectNone(true, true); - AssetDatabase.MoveAssetToTrash("Assets" + path.Remove(0, Application.dataPath.Length)); - SelectType(selectedType); - } - if(GUILayout.Button("Edit ES3Type Script")) - AssetDatabase.OpenAsset(AssetDatabase.LoadMainAssetAtPath("Assets" + path.Remove(0, Application.dataPath.Length))); - EditorGUILayout.EndHorizontal(); - } - else - { - EditorGUILayout.HelpBox("This type has no public parameterless constructors.\n\nTo support this type you will need to modify the ES3Type script to use a specific constructor instead of the parameterless constructor.", MessageType.Info); - if(GUILayout.Button("Click here to edit the ES3Type script")) - AssetDatabase.OpenAsset(AssetDatabase.LoadMainAssetAtPath("Assets" + path.Remove(0, Application.dataPath.Length))); - if (GUILayout.Button("Reset to Default")) - { - SelectAll(true, true); - File.Delete(path); - AssetDatabase.Refresh(); - } - } - } - // No ES3Type file and no fields. - else if(fields.Length == 0) - { - if(!hasParameterlessConstructor && !isComponent) - EditorGUILayout.HelpBox("This type has no public parameterless constructors.\n\nTo support this type you will need to create an ES3Type script and modify it to use a specific constructor instead of the parameterless constructor.", MessageType.Info); - - if(GUILayout.Button("Create ES3Type Script")) - Generate(); - } - // No ES3Type file, but fields are selectable. - else - { - if(!hasParameterlessConstructor && !isComponent) - { - EditorGUILayout.HelpBox("This type has no public parameterless constructors.\n\nTo support this type you will need to select the fields you wish to serialize below, and then modify the generated ES3Type script to use a specific constructor instead of the parameterless constructor.", MessageType.Info); - if(GUILayout.Button("Select all fields and generate ES3Type script")) - { - SelectAll(true, false); - Generate(); - } - } - else - { - if(GUILayout.Button("Create ES3Type Script")) - Generate(); - } - } - - EditorGUILayout.EndVertical(); - - PropertyPane(); - - EditorGUILayout.EndScrollView(); - } - - private void PropertyPane() - { - var style = EditorStyle.Get; - - EditorGUILayout.BeginVertical(style.area); - - GUILayout.Label("Fields", EditorStyles.boldLabel); - - DisplayFieldsOrProperties(true, false); - EditorGUILayout.Space(); - - GUILayout.Label("Properties", EditorStyles.boldLabel); - - DisplayFieldsOrProperties(false, true); - EditorGUILayout.EndVertical(); - } - - private void DisplayFieldsOrProperties(bool showFields, bool showProperties) - { - // Get field and property counts. - int fieldCount = 0; - int propertyCount = 0; - for(int i=0; i 0 || propertyCount > 0) - { - EditorGUILayout.BeginHorizontal(); - - if(GUILayout.Button("Select All", selectAllNoneButtonStyle)) - { - SelectAll(showFields, showProperties); - Generate(); - } - - if(GUILayout.Button("Select None", selectAllNoneButtonStyle)) - { - SelectNone(showFields, showProperties); - Generate(); - } - EditorGUILayout.EndHorizontal(); - } - - for(int i=0; i item.Name == fields[i].Name); - return; - } - - // Get fields and whether they're selected. - var selectedFields = new List(); - var propertyAttributes = es3Type.GetType().GetCustomAttributes(typeof(ES3PropertiesAttribute), false); - if(propertyAttributes.Length > 0) - selectedFields.AddRange(((ES3PropertiesAttribute)propertyAttributes[0]).members); - - fieldSelected = new bool[fields.Length]; - - for(int i=0; i (); - - var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(assembly => !assembly.FullName.Contains("Editor") && assembly.FullName != "ES3" && !assembly.FullName.Contains("ES3")).OrderBy(assembly => assembly.GetName().Name).ToArray(); - - foreach (var assembly in assemblies) - { - var assemblyTypes = assembly.GetTypes(); - - for(int i = 0; i < assemblyTypes.Length; i++) - { - var type = assemblyTypes [i]; - if(type.IsGenericType || type.IsEnum || type.IsNotPublic || type.IsAbstract || type.IsInterface) - continue; - - var typeName = type.Name; - if(typeName.Length >= 3 && typeName [0] == '$' || typeName [0] == '_' || typeName [0] == '<') - continue; - - var typeNamespace = type.Namespace; - var namespaceName = typeNamespace == null ? "" : typeNamespace.ToString(); - - tempTypes.Add(new TypeListItem (type.Name, namespaceName, type, true, HasExplicitES3Type(type))); - } - - } - types = tempTypes.OrderBy(type => type.name).ToArray(); - - // Load types and recent types. - if (recentTypes == null) - { - recentTypes = new List(); - for (int i = 0; i < recentTypeCount; i++) - { - int typeIndex = LoadTypeIndex("TypesWindowRecentType" + i); - if (typeIndex != -1) - recentTypes.Add(typeIndex); - } - SelectType(LoadTypeIndex("TypesWindowSelectedType")); - } - - - PerformSearch(searchFieldValue); - - // Init Assets. - string es3FolderPath = ES3Settings.PathToEasySaveFolder(); - checkmark = AssetDatabase.LoadAssetAtPath(es3FolderPath + "Editor/checkmark.png"); - //checkmarkSmall = AssetDatabase.LoadAssetAtPath(es3FolderPath + "Editor/checkmarkSmall.png"); - - // Init Styles. - searchBarCancelButtonStyle = new GUIStyle(EditorStyles.miniButton); - var cancelButtonSize = EditorStyles.miniTextField.CalcHeight(new GUIContent(""), 20); - searchBarCancelButtonStyle.fixedWidth = cancelButtonSize; - searchBarCancelButtonStyle.fixedHeight = cancelButtonSize; - searchBarCancelButtonStyle.fontSize = 8; - searchBarCancelButtonStyle.padding = new RectOffset(); - searchBarStyle = new GUIStyle(EditorStyles.toolbarTextField); - searchBarStyle.stretchWidth = true; - - typeButtonStyle = new GUIStyle(EditorStyles.largeLabel); - typeButtonStyle.alignment = TextAnchor.MiddleLeft; - typeButtonStyle.stretchWidth = false; - selectedTypeButtonStyle = new GUIStyle(typeButtonStyle); - selectedTypeButtonStyle.fontStyle = FontStyle.Bold; - - leftPaneStyle = new GUIStyle(); - leftPaneStyle.fixedWidth = leftPaneWidth; - leftPaneStyle.clipping = TextClipping.Clip; - leftPaneStyle.padding = new RectOffset(10, 10, 10, 10); - - selectAllNoneButtonStyle = new GUIStyle(EditorStyles.miniButton); - selectAllNoneButtonStyle.stretchWidth = false; - selectAllNoneButtonStyle.margin = new RectOffset(0,0,0,10); - } - - private void Generate() - { - var type = types[selectedType].type; - if(type == null) - { - EditorUtility.DisplayDialog("Type not selected", "Type not selected. Please ensure you select a type", "Ok"); - return; - } - - unsavedChanges = false; - - // Get the serializable fields of this class. - //var fields = ES3Reflection.GetSerializableES3Fields(type); - - // The string that we suffix to the class name. i.e. UnityEngine_UnityEngine_Transform. - string es3TypeSuffix = type.Name; - // The string for the full C#-safe type name. This name must be suitable for going inside typeof(). - string fullType = GetFullTypeName(type); - // The list of WriteProperty calls to write the properties of this type. - string writes = GenerateWrites(); - // The list of case statements and Read calls to read the properties of this type. - string reads = GenerateReads(); - // A comma-seperated string of fields we've supported in this type. - string propertyNames = ""; - - bool first = true; - for(int i=0; i(), instance);\r\n\t\t\t\t\tbreak;", field.Name, fieldTypeName); - else - reads += String.Format("\r\n\t\t\t\t\tcase \"{0}\":\r\n\t\t\t\t\tinstance = ([fullType])reader.SetPrivateField(\"{0}\", reader.Read<{1}>(), instance);\r\n\t\t\t\t\tbreak;", field.Name, fieldTypeName); - } - else - reads += String.Format("\r\n\t\t\t\t\tcase \"{0}\":\r\n\t\t\t\t\t\t{3}.{0} = reader.Read<{1}>({2});\r\n\t\t\t\t\t\tbreak;", field.Name, fieldTypeName, es3TypeParam, instance); - } - return reads; - } - - private string GetOutputPath(Type type) - { - return Application.dataPath + "/Easy Save 3/Types/ES3UserType_"+type.Name+".cs"; - } - - /* Gets the full Type name, replacing any syntax (such as '+') with a dot to make it a valid type name */ - private static string GetFullTypeName(Type type) - { - string typeName = type.ToString(); - - typeName = typeName.Replace('+','.'); - - // If it's a generic type, replace syntax with angled brackets. - int genericArgumentCount = type.GetGenericArguments().Length; - if(genericArgumentCount > 0) - { - return string.Format("{0}<{1}>", type.ToString().Split('`')[0], string.Join(", ", type.GetGenericArguments().Select(x => GetFullTypeName(x)).ToArray())); - } - - return typeName; - } - - /* Whether this type has an explicit ES3Type. For example, ES3ArrayType would return false, but ES3Vector3ArrayType would return true */ - private static bool HasExplicitES3Type(Type type) - { - var es3Type = ES3TypeMgr.GetES3Type(type); - if(es3Type == null) - return false; - // If this ES3Type has a static Instance property, return true. - if(es3Type.GetType().GetField("Instance", BindingFlags.Public | BindingFlags.Static) != null) - return true; - return false; - } - - private static bool HasExplicitES3Type(ES3Type es3Type) - { - if(es3Type == null) - return false; - // If this ES3Type has a static Instance property, return true. - if(es3Type.GetType().GetField("Instance", BindingFlags.Public | BindingFlags.Static) != null) - return true; - return false; - } - - public class TypeListItem - { - public string name; - public string lowercaseName; - public string namespaceName; - public Type type; - public bool showInList; - public bool hasExplicitES3Type; - - public TypeListItem(string name, string namespaceName, Type type, bool showInList, bool hasExplicitES3Type) - { - this.name = name; - this.lowercaseName = name.ToLowerInvariant(); - this.namespaceName = namespaceName; - this.type = type; - this.showInList = showInList; - this.hasExplicitES3Type = hasExplicitES3Type; - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Editor/TypesWindow.cs.meta b/Assets/Plugins/Easy Save 3/Editor/TypesWindow.cs.meta deleted file mode 100644 index 7505034..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/TypesWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 600b987de172f4a82b182077ceb7fffa -timeCreated: 1519132286 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/checkmark.png b/Assets/Plugins/Easy Save 3/Editor/checkmark.png deleted file mode 100644 index cda4c8d..0000000 Binary files a/Assets/Plugins/Easy Save 3/Editor/checkmark.png and /dev/null differ diff --git a/Assets/Plugins/Easy Save 3/Editor/checkmark.png.meta b/Assets/Plugins/Easy Save 3/Editor/checkmark.png.meta deleted file mode 100644 index e4cf356..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/checkmark.png.meta +++ /dev/null @@ -1,124 +0,0 @@ -fileFormatVersion: 2 -guid: 9d92f481545af4a45b06e8fe44778d93 -timeCreated: 1484046036 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: iPhone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: tvOS - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Android - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Tizen - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Samsung TV - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/checkmarkSmall.png b/Assets/Plugins/Easy Save 3/Editor/checkmarkSmall.png deleted file mode 100644 index 46c3c1f..0000000 Binary files a/Assets/Plugins/Easy Save 3/Editor/checkmarkSmall.png and /dev/null differ diff --git a/Assets/Plugins/Easy Save 3/Editor/checkmarkSmall.png.meta b/Assets/Plugins/Easy Save 3/Editor/checkmarkSmall.png.meta deleted file mode 100644 index 32ece54..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/checkmarkSmall.png.meta +++ /dev/null @@ -1,124 +0,0 @@ -fileFormatVersion: 2 -guid: ca44f6eb870d244cfb1c83054a69ffc3 -timeCreated: 1484046036 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: iPhone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: tvOS - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Android - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Tizen - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Samsung TV - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16-bw.png b/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16-bw.png deleted file mode 100644 index 2edf317..0000000 Binary files a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16-bw.png and /dev/null differ diff --git a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16-bw.png.meta b/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16-bw.png.meta deleted file mode 100644 index 94cb944..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16-bw.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 3ae63f85ae558634d83caaf5a332d1ba -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16.png b/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16.png deleted file mode 100644 index ccde047..0000000 Binary files a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16.png and /dev/null differ diff --git a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16.png.meta b/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16.png.meta deleted file mode 100644 index fc64722..0000000 --- a/Assets/Plugins/Easy Save 3/Editor/es3Logo16x16.png.meta +++ /dev/null @@ -1,124 +0,0 @@ -fileFormatVersion: 2 -guid: 4697547d67ec24040b678d7b35835286 -timeCreated: 1495455081 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: iPhone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: tvOS - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Android - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Tizen - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Samsung TV - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/PlayMaker.meta b/Assets/Plugins/Easy Save 3/PlayMaker.meta deleted file mode 100644 index 3ac7941..0000000 --- a/Assets/Plugins/Easy Save 3/PlayMaker.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0a6bee318130749539d0eec8a7b37ccd -folderAsset: yes -timeCreated: 1497259711 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/PlayMaker/ES3PlayMaker.cs b/Assets/Plugins/Easy Save 3/PlayMaker/ES3PlayMaker.cs deleted file mode 100644 index 8d478c7..0000000 --- a/Assets/Plugins/Easy Save 3/PlayMaker/ES3PlayMaker.cs +++ /dev/null @@ -1,1907 +0,0 @@ -#if PLAYMAKER_1_8_OR_NEWER - -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using ES3Internal; -using HutongGames.PlayMaker.Actions; -using HutongGames.PlayMaker; -using System.Linq; -using System; -using Tooltip = HutongGames.PlayMaker.TooltipAttribute; - -public class FsmES3File : ScriptableObject -{ - public ES3File file; -} - -public class FsmES3Spreadsheet : ScriptableObject -{ - public ES3Spreadsheet spreadsheet; -} - -namespace ES3PlayMaker -{ - - #region Base Classes - - public abstract class ActionBase : FsmStateAction - { - [ActionSection("Error handling")] - [Tooltip("This event is triggered if an error occurs.")] - public FsmEvent errorEvent; - [Tooltip("If an error occurs, the error message will be stored in this variable.")] - public FsmString errorMessage; - - public abstract void Enter(); - public abstract void OnReset(); - - public override void OnEnter() - { - try - { - Enter(); - } - catch (System.Exception e) - { - HandleError(e.ToString()); - } - Finish(); - } - - public override void Reset() - { - errorEvent = null; - errorMessage = ""; - OnReset(); - } - - public void HandleError(string msg) - { - errorMessage.Value = msg; - if (errorEvent != null) - Fsm.Event(errorEvent); - else - LogError(msg); - } - } - - public abstract class SettingsAction : ActionBase - { - [ActionSection("Settings")] - public FsmBool overrideDefaultSettings = false; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [Tooltip("The path this ES3Settings object points to, if any.")] - public FsmString path; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [ObjectType(typeof(ES3.Location))] - [Tooltip("The storage location where we wish to store data by default.")] - public FsmEnum location; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [ObjectType(typeof(ES3.EncryptionType))] - [Tooltip("The type of encryption to use when encrypting data, if any.")] - public FsmEnum encryptionType; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [Tooltip("The password to use to encrypt the data if encryption is enabled.")] - public FsmString encryptionPassword; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [ObjectType(typeof(ES3.CompressionType))] - [Tooltip("The type of compression to use when compressing data, if any.")] - public FsmEnum compressionType; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [ObjectType(typeof(ES3.Directory))] - [Tooltip("The default directory in which to store files when using the File save location, and the location which relative paths should be relative to.")] - public FsmEnum directory; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [ObjectType(typeof(ES3.Format))] - [Tooltip("The format we should use when serializing and deserializing data.")] - public FsmEnum format; - [HutongGames.PlayMaker.HideIf("DefaultSettingsOverridden")] - [Tooltip("Any stream buffers will be set to this length in bytes.")] - public FsmInt bufferSize; - - public bool DefaultSettingsOverridden() - { - return !overrideDefaultSettings.Value; - } - - public override void Reset() - { - var settings = new ES3Settings(); - path = settings.path; - location = settings.location; - encryptionType = settings.encryptionType; - compressionType = settings.compressionType; - encryptionPassword = settings.encryptionPassword; - directory = settings.directory; - format = settings.format; - bufferSize = settings.bufferSize; - overrideDefaultSettings = false; - base.Reset(); - } - - public ES3Settings GetSettings() - { - var settings = new ES3Settings(); - if (overrideDefaultSettings.Value) - { - settings.path = path.Value; - settings.location = (ES3.Location)location.Value; - settings.encryptionType = (ES3.EncryptionType)encryptionType.Value; - settings.encryptionPassword = encryptionPassword.Value; - settings.compressionType = (ES3.CompressionType)compressionType.Value; - settings.directory = (ES3.Directory)directory.Value; - settings.format = (ES3.Format)format.Value; - settings.bufferSize = bufferSize.Value; - } - return settings; - } - } - - public abstract class ES3FileAction : ActionBase - { - [Tooltip("The ES3 File we are using, created using the Create ES3 File action.")] - [ObjectType(typeof(FsmES3File))] - [Title("ES3 File")] - [RequiredField] - public FsmObject fsmES3File; - - public ES3File es3File { get { return ((FsmES3File)fsmES3File.Value).file; } } - - public override void Reset() - { - fsmES3File = null; - base.Reset(); - } - } - - public abstract class ES3FileSettingsAction : SettingsAction - { - [Tooltip("The ES3File variable we're using.")] - [ObjectType(typeof(FsmES3File))] - [Title("ES3 File")] - [RequiredField] - public FsmObject fsmES3File; - - public ES3File es3File { get { return ((FsmES3File)fsmES3File.Value).file; } } - - public override void Reset() - { - fsmES3File = null; - base.Reset(); - } - } - - public abstract class ES3SpreadsheetAction : ActionBase - { - [Tooltip("The ES3 Spreadsheet we are using, created using the Create ES3 Spreadsheet action.")] - [ObjectType(typeof(FsmES3Spreadsheet))] - [Title("ES3 Spreadsheet")] - [RequiredField] - public FsmObject fsmES3Spreadsheet; - - public ES3Spreadsheet es3Spreadsheet { get { return ((FsmES3Spreadsheet)fsmES3Spreadsheet.Value).spreadsheet; } } - - public override void Reset() - { - fsmES3Spreadsheet = null; - base.Reset(); - } - } - - public abstract class ES3SpreadsheetSettingsAction : SettingsAction - { - [Tooltip("The ES3Spreadsheet variable we're using.")] - [ObjectType(typeof(FsmES3Spreadsheet))] - [Title("ES3 Spreadsheet")] - [RequiredField] - public FsmObject fsmES3Spreadsheet; - - public ES3Spreadsheet es3Spreadsheet { get { return ((FsmES3Spreadsheet)fsmES3Spreadsheet.Value).spreadsheet; } } - - public override void Reset() - { - fsmES3Spreadsheet = null; - base.Reset(); - } - } - - #endregion - - #region Save Actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Saves the value to a file with the given key.")] - public class Save : SettingsAction - { - [Tooltip("The unique key we want to use to identity the data we are saving.")] - public FsmString key; - [Tooltip("The value we want to save.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - - public override void OnReset() - { - key = "key"; - value = null; - } - - public override void Enter() - { - value.UpdateValue(); - - if (value.Type == VariableType.Array) - ES3.Save(key.Value, new PMDataWrapper(value.arrayValue.Values), GetSettings()); - else - ES3.Save(key.Value, value.GetValue(), GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Saves multiple values to a file with the given keys.")] - public class SaveMultiple : SettingsAction - { - [RequiredField] - [CompoundArray("Count", "Key", "Value")] - public FsmString[] keys; - [Tooltip("The value we want to save.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar[] variables; - - public override void OnReset() - { - keys = null; - variables = null; - } - - public override void Enter() - { - for (int i = 0; i < variables.Length; i++) - { - var key = keys[i]; - var value = variables[i]; - value.UpdateValue(); - - if (value.Type == VariableType.Array) - ES3.Save(key.Value, new PMDataWrapper(value.arrayValue.Values), GetSettings()); - else - ES3.Save(key.Value, value.GetValue(), GetSettings()); - } - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Saves all FsmVariables in this FSM to a file with the given key.")] - public class SaveAll : SettingsAction - { - [Tooltip("The unique key we want to use to identity the data we are saving.")] - public FsmString key; - - [Tooltip("Save the local variables accessible in this FSM?")] - public FsmBool saveFsmVariables = true; - [Tooltip("Save the global variables accessible in all FSMs?")] - public FsmBool saveGlobalVariables = true; - - public override void OnReset() - { - key = "key"; - } - - public override void Enter() - { - ES3.Save(key.Value, new PMDataWrapper(Fsm, saveFsmVariables.Value, saveGlobalVariables.Value), GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Saves a byte array as a file, overwriting any existing files.")] - public class SaveRaw : SettingsAction - { - [Tooltip("The string we want to save as a file.")] - public FsmString str; - [Tooltip("Whether to encode this string using Base-64 encoding. This will override any default encoding settings.")] - public FsmBool useBase64Encoding; - [Tooltip("Adds a newline to the end of the file.")] - public FsmBool appendNewline; - - public override void OnReset() - { - str = ""; - useBase64Encoding = false; - appendNewline = false; - } - - public override void Enter() - { - if (useBase64Encoding.Value) - ES3.SaveRaw(System.Convert.FromBase64String(str.Value + (appendNewline.Value ? "\n" : "")), GetSettings()); - else - ES3.SaveRaw(str.Value + (appendNewline.Value ? "\n" : ""), GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Appends a string to the end of a file.")] - public class AppendRaw : SettingsAction - { - [Tooltip("The string we want to append to a file.")] - public FsmString str; - [Tooltip("Whether to encode this string using Base-64 encoding. This will override any default encoding settings.")] - public FsmBool useBase64Encoding; - [Tooltip("If checked, a newline will be added after the data.")] - public FsmBool appendNewline; - - public override void OnReset() - { - str = ""; - useBase64Encoding = false; - appendNewline = false; - } - - public override void Enter() - { - if (useBase64Encoding.Value) - ES3.AppendRaw(System.Convert.FromBase64String(str.Value) + (appendNewline.Value ? "\n" : ""), GetSettings()); - else - ES3.AppendRaw(str.Value + (appendNewline.Value ? "\n" : ""), GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Saves a Texture2D as a PNG or a JPG, depending on the file extension of the supplied image path.")] - public class SaveImage : SettingsAction - { - [Tooltip("The relative or absolute path of the PNG or JPG file we want to store our image to.")] - public FsmString imagePath; - [Tooltip("The Texture2D we want to save as an image.")] - [ObjectType(typeof(Texture2D))] - public FsmTexture texture2D; - [Tooltip("The quality of the image when saving JPGs, from 1 to 100. Default is 75.")] - public FsmInt quality; - - public override void OnReset() - { - imagePath = "image.png"; - texture2D = null; - quality = 75; - } - - public override void Enter() - { - ES3.SaveImage((Texture2D)texture2D.Value, quality.Value, imagePath.Value, GetSettings()); - } - } - - #endregion - - #region Load Actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads a value from a file with the given key.")] - public class Load : SettingsAction - { - [Tooltip("The unique key which identifies the data we're loading.")] - public FsmString key; - [Tooltip("The variable we want to use to store our loaded data.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - [Tooltip("Optional: A value to return if the key does not exist.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar defaultValue; - - public override void OnReset() - { - key = "key"; - value = null; - defaultValue = null; - } - - public override void Enter() - { - defaultValue.UpdateValue(); - bool useDefaultVal = defaultValue.GetValue() != null && !defaultValue.IsNone; - - - if (value.Type == VariableType.Array) - { - if (useDefaultVal) - value.SetValue(ES3.Load(key.Value, new PMDataWrapper(defaultValue.arrayValue.Values), GetSettings()).array); - else - value.SetValue(ES3.Load(key.Value, GetSettings()).array); - } - else - { - if (useDefaultVal) - value.SetValue(ES3.Load(key.Value, defaultValue.GetValue(), GetSettings())); - else - value.SetValue(ES3.Load(key.Value, GetSettings())); - } - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads multiple values from a file with the given keys.")] - public class LoadMultiple : SettingsAction - { - [RequiredField] - [CompoundArray("Count", "Key", "Value")] - public FsmString[] keys; - [Tooltip("The variables we want to load into.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar[] variables; - - public override void OnReset() - { - keys = null; - variables = null; - } - - public override void Enter() - { - for (int i = 0; i < variables.Length; i++) - { - var key = keys[i]; - var value = variables[i]; - - if (value.Type == VariableType.Array) - value.SetValue(ES3.Load(key.Value, GetSettings()).array); - else - value.SetValue(ES3.Load(key.Value, GetSettings())); - } - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads a value from a file with the given key into an existing object, rather than creating a new instance.")] - public class LoadInto : SettingsAction - { - [Tooltip("The unique key which identifies the data we're loading.")] - public FsmString key; - [Tooltip("The object we want to load our data into.")] - [RequiredField] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - - public override void OnReset() - { - key = "key"; - value = null; - } - - public override void Enter() - { - value.UpdateValue(); - if (value.IsNone || value.GetValue() == null) - HandleError("The 'Load Into' action requires an object to load the data into, but none was specified in the 'Value' field."); - else - { - ES3.LoadInto(key.Value, value.GetValue(), GetSettings()); - - if (value.Type == VariableType.Array) - HandleError("It's not possible to use LoadInto with arrays in PlayMaker as they are not strictly typed. Consider using Load instead."); - else - value.SetValue(ES3.Load(key.Value, GetSettings())); - } - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads all FsmVariables in this FSM to a file with the given key.")] - public class LoadAll : SettingsAction - { - [Tooltip("The key we used to save the data we're loading.")] - public FsmString key; - - [Tooltip("Load the local variables accessible in this FSM?")] - public FsmBool loadFsmVariables = true; - [Tooltip("Load the global variables accessible in all FSMs?")] - public FsmBool loadGlobalVariables = true; - - public override void OnReset() - { - key = "key"; - } - - public override void Enter() - { - ES3.Load(key.Value, GetSettings()).ApplyVariables(Fsm, loadFsmVariables.Value, loadGlobalVariables.Value); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads an entire file as a string.")] - public class LoadRawString : SettingsAction - { - [Tooltip("The variable we want to store our loaded string in.")] - public FsmString str; - [Tooltip("Whether or not the data we're loading is Base-64 encoded. Usually this should be left unchecked.")] - public FsmBool useBase64Encoding; - - public override void OnReset() - { - str = null; - useBase64Encoding = false; - } - - public override void Enter() - { - if (useBase64Encoding.Value) - str.Value = System.Convert.ToBase64String(ES3.LoadRawBytes(GetSettings())); - else - str.Value = ES3.LoadRawString(GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads a JPG or PNG image file as a Texture2D.")] - public class LoadImage : SettingsAction - { - [Tooltip("The relative or absolute path of the JPG or PNG image file we want to load.")] - public FsmString imagePath; - [Tooltip("The variable we want to use to store our loaded texture.")] - public FsmTexture texture2D; - - public override void OnReset() - { - imagePath = "image.png"; - texture2D = null; - } - - public override void Enter() - { - texture2D.Value = ES3.LoadImage(imagePath.Value, GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads an audio file as an AudioClip.")] - public class LoadAudio : SettingsAction - { - [Tooltip("The relative or absolute path of the audio file we want to load.")] - public FsmString audioFilePath; - [ObjectType(typeof(AudioClip))] - [Tooltip("The variable we want to use to store our loaded AudioClip.")] - public FsmObject audioClip; - -#if UNITY_2018_3_OR_NEWER - [Tooltip("The type of AudioClip we're loading.")] - [ObjectType(typeof(AudioType))] - public FsmEnum audioType; -#endif - - public override void OnReset() - { - audioFilePath = "audio.wav"; - audioClip = null; -#if UNITY_2018_3_OR_NEWER - audioType = AudioType.MPEG; -#endif - } - - public override void Enter() - { - audioClip.Value = ES3.LoadAudio(audioFilePath.Value, -#if UNITY_2018_3_OR_NEWER - (AudioType)audioType.Value, -#endif - GetSettings()); - } - } - - - #endregion - - #region Exists Actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Checks whether a key exists in a file.")] - public class KeyExists : SettingsAction - { - [Tooltip("The key we want to check the existence of.")] - public FsmString key; - [Tooltip("Whether the key exists. This is set after the action runs.")] - public FsmBool exists; - - [Tooltip("This event is triggered if the key exists.")] - public FsmEvent existsEvent; - [Tooltip("This event is triggered if the key does not exist.")] - public FsmEvent doesNotExistEvent; - - public override void OnReset() - { - key = "key"; - exists = false; - existsEvent = null; - doesNotExistEvent = null; - } - - public override void Enter() - { - exists.Value = ES3.KeyExists(key.Value, GetSettings()); - - Fsm.Event(exists.Value ? existsEvent : doesNotExistEvent); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Checks whether a file exists in a directory.")] - public class FileExists : SettingsAction - { - [Tooltip("The file we want to check the existence of")] - public FsmString filePath; - [Tooltip("Whether the file exists. This is set after the action runs.")] - public FsmBool exists; - - [Tooltip("This event is triggered if the file exists.")] - public FsmEvent existsEvent; - [Tooltip("This event is triggered if the file does not exist.")] - public FsmEvent doesNotExistEvent; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - exists = false; - existsEvent = null; - doesNotExistEvent = null; - } - - public override void Enter() - { - exists.Value = ES3.FileExists(filePath.Value, GetSettings()); - - Fsm.Event(exists.Value ? existsEvent : doesNotExistEvent); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Checks whether a directory exists in another directory")] - public class DirectoryExists : SettingsAction - { - [Tooltip("The directory we want to check the existence of.")] - public FsmString directoryPath; - [Tooltip("Whether the directory exists. This is set after the action runs.")] - public FsmBool exists; - - [Tooltip("This event is triggered if the directory exists.")] - public FsmEvent existsEvent; - [Tooltip("This event is triggered if the directory does not exist.")] - public FsmEvent doesNotExistEvent; - - public override void OnReset() - { - directoryPath = ""; - exists = false; - existsEvent = null; - doesNotExistEvent = null; - } - - public override void Enter() - { - exists.Value = ES3.DirectoryExists(directoryPath.Value, GetSettings()); - - Fsm.Event(exists.Value ? existsEvent : doesNotExistEvent); - } - } - - #endregion - - #region Delete Actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Deletes a key from a file.")] - public class DeleteKey : SettingsAction - { - [Tooltip("The key we want to delete.")] - public FsmString key; - - public override void OnReset() - { - key = "key"; - } - - public override void Enter() - { - ES3.DeleteKey(key.Value, GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Deletes a file.")] - public class DeleteFile : SettingsAction - { - [Tooltip("The relative or absolute path of the file we want to delete.")] - public FsmString filePath; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - } - - public override void Enter() - { - ES3.DeleteFile(filePath.Value, GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Deletes a directory and it's contents.")] - public class DeleteDirectory : SettingsAction - { - [Tooltip("The relative or absolute path of the directory we want to delete.")] - public FsmString directoryPath; - - public override void OnReset() - { - directoryPath = ""; - } - - public override void Enter() - { - ES3.DeleteDirectory(directoryPath.Value, GetSettings()); - } - } - - #endregion - - #region Backup Actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Creates a backup of a file which can be restored using the Restore Backup action.")] - public class CreateBackup : SettingsAction - { - [Tooltip("The relative or absolute path of the file we want to backup.")] - public FsmString filePath; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - } - - public override void Enter() - { - ES3.CreateBackup(filePath.Value, GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Restores a backup of a file created using the Create Backup action.")] - public class RestoreBackup : SettingsAction - { - [Tooltip("The relative or absolute path of the file we want to restore the backup of.")] - public FsmString filePath; - [Tooltip("True if a backup was restored, or False if no backup could be found.")] - public FsmBool backupWasRestored; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - backupWasRestored = false; - } - - public override void Enter() - { - backupWasRestored.Value = ES3.RestoreBackup(filePath.Value, GetSettings()); - } - } - - #endregion - - #region Key, File and Directory Methods - - [ActionCategory("Easy Save 3")] - [Tooltip("Renames a file.")] - public class RenameFile : SettingsAction - { - [Tooltip("The relative or absolute path of the file we want to rename from.")] - public FsmString oldFilePath; - [Tooltip("The relative or absolute path of the file we want to rename to.")] - public FsmString newFilePath; - - public override void OnReset() - { - oldFilePath = "SaveFile.es3"; - newFilePath = ""; - } - - public override void Enter() - { - ES3.RenameFile(oldFilePath.Value, newFilePath.Value, GetSettings(), GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Copies a file.")] - public class CopyFile : SettingsAction - { - [Tooltip("The relative or absolute path of the file we want to copy.")] - public FsmString oldFilePath; - [Tooltip("The relative or absolute path of the file we want to create.")] - public FsmString newFilePath; - - public override void OnReset() - { - oldFilePath = "SaveFile.es3"; - newFilePath = ""; - } - - public override void Enter() - { - ES3.CopyFile(oldFilePath.Value, newFilePath.Value, GetSettings(), GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Copies a directory.")] - public class CopyDirectory : SettingsAction - { - [Tooltip("The relative or absolute path of the directory we want to copy.")] - public FsmString oldDirectoryPath; - [Tooltip("The relative or absolute path of the directory we want to create.")] - public FsmString newDirectoryPath; - - public override void OnReset() - { - oldDirectoryPath = ""; - newDirectoryPath = ""; - } - - public override void Enter() - { - ES3.CopyDirectory(oldDirectoryPath.Value, newDirectoryPath.Value, GetSettings(), GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Gets an array of key names from a file.")] - public class GetKeys : SettingsAction - { - [Tooltip("The relative or absolute path of the file we want to get the keys from.")] - public FsmString filePath; - [Tooltip("The string array variable we want to load our key names into.")] - [ArrayEditor(VariableType.String)] - public FsmArray keys; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - keys = null; - } - - public override void Enter() - { - keys.Values = ES3.GetKeys(filePath.Value, GetSettings()); - keys.SaveChanges(); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Gets how many keys are in a file.")] - public class GetKeyCount : SettingsAction - { - [Tooltip("The relative or absolute path of the file we want to count the keys of.")] - public FsmString filePath; - [Tooltip("The int variable we want to load our count into.")] - public FsmInt keyCount; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - keyCount = null; - } - - public override void Enter() - { - keyCount.Value = ES3.GetKeys(filePath.Value, GetSettings()).Length; - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Gets the names of the files in a given directory.")] - public class GetFiles : SettingsAction - { - [Tooltip("The relative or absolute path of the directory we want to get the file names from.")] - public FsmString directoryPath; - [Tooltip("The string array variable we want to load our file names into.")] - [ArrayEditor(VariableType.String)] - public FsmArray files; - - public override void OnReset() - { - directoryPath = ""; - files = null; - } - - public override void Enter() - { - files.Values = ES3.GetFiles(directoryPath.Value, GetSettings()); - files.SaveChanges(); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Gets the names of any directories in a given directory.")] - public class GetDirectories : SettingsAction - { - [Tooltip("The relative or absolute path of the directory we want to get the directory names from.")] - public FsmString directoryPath; - [Tooltip("The string array variable we want to load our directory names into.")] - [ArrayEditor(VariableType.String)] - public FsmArray directories; - - public override void OnReset() - { - directoryPath = ""; - directories = null; - } - - public override void Enter() - { - directories.Values = ES3.GetDirectories(directoryPath.Value, GetSettings()); - directories.SaveChanges(); - } - } - - #endregion - - #region ES3Spreadsheet Actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Creates a new empty ES3Spreadsheet.")] - public class ES3SpreadsheetCreate : ES3SpreadsheetAction - { - public override void OnReset() - { - } - - public override void Enter() - { - var spreadsheet = ScriptableObject.CreateInstance(); - spreadsheet.spreadsheet = new ES3Spreadsheet(); - fsmES3Spreadsheet.Value = spreadsheet; - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Sets a given cell of the ES3Spreadsheet to the value provided.")] - public class ES3SpreadsheetSetCell : ES3SpreadsheetAction - { - [Tooltip("The column of the cell we want to set the value of.")] - public FsmInt col; - [Tooltip("The row of the cell we want to set the value of.")] - public FsmInt row; - - [Tooltip("The value we want to save.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - - public override void OnReset() - { - value = null; - } - - public override void Enter() - { - value.UpdateValue(); - es3Spreadsheet.SetCell(col.Value, row.Value, value.GetValue()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Gets a given cell of the ES3Spreadsheet and loads it into the value field.")] - public class ES3SpreadsheetGetCell : ES3SpreadsheetAction - { - [Tooltip("The column of the cell we want to set the value of.")] - public FsmInt col; - [Tooltip("The row of the cell we want to set the value of.")] - public FsmInt row; - - [Tooltip("The value we want to save.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - - public override void OnReset() - { - value = null; - } - - public override void Enter() - { - value.SetValue(es3Spreadsheet.GetCell(value.RealType, col.Value, row.Value)); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Saves the ES3Spreadsheet to file.")] - public class ES3SpreadsheetSave : ES3SpreadsheetSettingsAction - { - [Tooltip("The filename or path we want to use to save the spreadsheet.")] - public FsmString filePath; - [Tooltip("Whether we want to append this spreadsheet to an existing spreadsheet if one already exists.")] - public FsmBool append; - - public override void OnReset() - { - filePath = "ES3.csv"; - append = false; - } - - public override void Enter() - { - es3Spreadsheet.Save(filePath.Value, GetSettings(), append.Value); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Loads a a spreadsheet from a file into this ES3Spreadsheet.")] - public class ES3SpreadsheetLoad : ES3SpreadsheetSettingsAction - { - [Tooltip("The filename or path we want to use to save the spreadsheet.")] - public FsmString filePath; - - public override void OnReset() - { - filePath = "ES3.csv"; - - } - - public override void Enter() - { - es3Spreadsheet.Load(filePath.Value, GetSettings()); - } - } - #endregion - - #region ES3File Actions - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Creates a new ES3File, and optionally loads a file from storage into it.")] - public class ES3FileCreate : ES3FileSettingsAction - { - [Tooltip("The relative or absolute path of the file this ES3File represents in storage.")] - public FsmString filePath; - [Tooltip("Whether we should sync this ES3File with the one in storage immediately after creating it.")] - public FsmBool syncWithFile; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - syncWithFile = true; - } - - public override void Enter() - { - var file = ScriptableObject.CreateInstance(); - file.file = new ES3File(filePath.Value, GetSettings(), syncWithFile.Value); - fsmES3File.Value = file; - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Synchronises this ES3File with a file in storage.")] - public class ES3FileSync : ES3FileSettingsAction - { - [Tooltip("The relative or absolute path of the file we want to synchronise with in storage.")] - public FsmString filePath; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - } - - public override void Enter() - { - if (overrideDefaultSettings.Value) - es3File.Sync(GetSettings()); - else - es3File.Sync(); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Saves the value to the ES3File with the given key.")] - public class ES3FileSave : ES3FileAction - { - [Tooltip("The unique key we want to use to identity the data we are saving.")] - public FsmString key; - [Tooltip("The value we want to save.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - - public override void OnReset() - { - key = "key"; - value = null; - } - - public override void Enter() - { - value.UpdateValue(); - es3File.Save(key.Value, value.GetValue()); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Loads a value with the given key from the ES3File")] - public class ES3FileLoad : ES3FileAction - { - [Tooltip("The unique key which identifies the data we're loading.")] - public FsmString key; - [Tooltip("The variable we want to use to store our loaded data.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - [Tooltip("Optional: A value to return if the key does not exist.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar defaultValue; - - public override void OnReset() - { - key = "key"; - value = null; - defaultValue = null; - } - - public override void Enter() - { - defaultValue.UpdateValue(); - if (defaultValue.GetValue() != null && !defaultValue.IsNone) - value.SetValue(es3File.Load(key.Value, defaultValue.GetValue())); - else - value.SetValue(es3File.Load(key.Value)); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Loads a value with the given key from the ES3File into an existing object")] - public class ES3FileLoadInto : ES3FileAction - { - [Tooltip("The unique key which identifies the data we're loading.")] - public FsmString key; - [Tooltip("The variable we want to load our data into.")] - [UIHint(UIHint.Variable)] - [HideTypeFilter] - public FsmVar value; - - public override void OnReset() - { - key = "key"; - value = null; - } - - public override void Enter() - { - value.UpdateValue(); - es3File.LoadInto(key.Value, value.GetValue()); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Loads the entire ES3 File as a string")] - public class ES3FileLoadRawString : ES3FileAction - { - [Tooltip("The FsmArray variable we want to use to store our string representing the file.")] - public FsmString str; - [Tooltip("Whether or not the data we're loading is Base-64 encoded. Usually this should be left unchecked.")] - public FsmBool useBase64Encoding; - - public override void OnReset() - { - str = null; - useBase64Encoding = false; - } - - public override void Enter() - { - if (useBase64Encoding.Value) - str.Value = System.Convert.ToBase64String(es3File.LoadRawBytes()); - else - str.Value = es3File.LoadRawString(); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Deletes a key from an ES3 File.")] - public class ES3FileDeleteKey : ES3FileAction - { - [Tooltip("The key we want to delete.")] - public FsmString key; - - public override void OnReset() - { - key = "key"; - } - - public override void Enter() - { - es3File.DeleteKey(key.Value); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Checks whether a key exists in an ES3File.")] - public class ES3FileKeyExists : ES3FileAction - { - [Tooltip("The key we want to check the existence of.")] - public FsmString key; - [Tooltip("Whether the key exists. This is set after the action runs.")] - public FsmBool exists; - - [Tooltip("This event is triggered if the key exists.")] - public FsmEvent existsEvent; - [Tooltip("This event is triggered if the key does not exist.")] - public FsmEvent doesNotExistEvent; - - public override void OnReset() - { - key = "key"; - exists = false; - existsEvent = null; - doesNotExistEvent = null; - } - - public override void Enter() - { - exists.Value = es3File.KeyExists(key.Value); - - if (exists.Value && existsEvent != null) - Fsm.Event(existsEvent); - else if (doesNotExistEvent != null) - Fsm.Event(doesNotExistEvent); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Gets an array of key names from an ES3File.")] - public class ES3FileGetKeys : ES3FileAction - { - [Tooltip("The string array variable we want to load our key names into.")] - [ArrayEditor(VariableType.String)] - public FsmArray keys; - - public override void OnReset() - { - keys = null; - } - - public override void Enter() - { - keys.Values = es3File.GetKeys(); - keys.SaveChanges(); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Clears all keys from an ES3File.")] - public class ES3FileClear : ES3FileAction - { - public override void OnReset() { } - - public override void Enter() - { - es3File.Clear(); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Gets an array of key names from a file.")] - public class ES3FileSize : ES3FileAction - { - [Tooltip("The variable we want to put the file size into.")] - public FsmInt size; - - public override void OnReset() - { - size = 0; - } - - public override void Enter() - { - size.Value = es3File.Size(); - } - } - - #endregion - - #region ES3Cloud Actions - -#if !DISABLE_WEB - public abstract class ES3CloudAction : SettingsAction - { - [Tooltip("The URL to the ES3Cloud.php file on your server.")] - [RequiredField] - public FsmString url; - [Tooltip("The API key generated when installing ES3 Cloud on your server.")] - [RequiredField] - public FsmString apiKey; - - [Tooltip("The ES3File variable we're using.")] - [ObjectType(typeof(FsmES3File))] - [Title("ES3 File")] - [RequiredField] - public FsmObject fsmES3File; - - public ES3File es3File { get { return ((FsmES3File)fsmES3File.Value).file; } } - - [Tooltip("An error code if an error occurred.")] - public FsmInt errorCode; - - protected ES3Cloud cloud = null; - - public override void OnReset() - { - url = "http://www.myserver.com/ES3Cloud.php"; - errorCode = 0; - cloud = null; - fsmES3File = null; - } - - public override void OnEnter() - { - try - { - CreateES3Cloud(); - Enter(); - } - catch (System.Exception e) - { - HandleError(e.ToString()); - } - } - - public override void OnUpdate() - { - base.OnUpdate(); - if (cloud.isDone) - { - if (cloud.isError) - { - errorCode.Value = (int)cloud.errorCode; - errorMessage.Value = cloud.error; - Log("Error occurred when trying to perform operation with ES3Cloud: [Error " + cloud.errorCode + "] " + cloud.error); - Fsm.Event(errorEvent); - } - else - Finish(); - } - } - - protected void CreateES3Cloud() - { - cloud = new ES3Cloud(url.Value, apiKey.Value); - } - } - - public abstract class ES3CloudUserAction : ES3CloudAction - { - [ActionSection("User (optional)")] - public FsmString user; - public FsmString password; - - public override void OnReset() - { - base.OnReset(); - user = ""; - password = ""; - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Synchronises a file in storage with the server.")] - public class ES3CloudSync : ES3CloudUserAction - { - public override void Enter() - { - var settings = GetSettings(); - StartCoroutine(cloud.Sync(path.Value, settings)); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Uploads a file in storage to the server, overwriting any existing files.")] - public class ES3CloudUploadFile : ES3CloudUserAction - { - public override void Enter() - { - var settings = GetSettings(); - StartCoroutine(cloud.UploadFile(path.Value, user.Value, password.Value, settings)); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Uploads a file in storage to the server, overwriting any existing files.")] - public class ES3CloudUploadES3File : ES3CloudUserAction - { - public override void Enter() - { - var settings = GetSettings(); - StartCoroutine(cloud.UploadFile(es3File, user.Value, password.Value)); - } - } - - [ActionCategory("Deprecated Easy Save 3 actions")] - [Tooltip("Downloads a file from the server, overwriting any existing files, or returning error code 3 if no file exists on the server.")] - public class ES3CloudDownloadES3File : ES3CloudUserAction - { - public override void Enter() - { - var settings = GetSettings(); - StartCoroutine(cloud.DownloadFile(es3File, user.Value, password.Value)); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Downloads a file from the server into an file, or returning error code 3 if no file exists on the server.")] - public class ES3CloudDownloadFile : ES3CloudUserAction - { - public override void Enter() - { - var settings = GetSettings(); - StartCoroutine(cloud.DownloadFile(path.Value, user.Value, password.Value, settings)); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Downloads a file from the server, overwriting any existing files, or returning error code 3 if no file exists on the server.")] - public class ES3CloudDeleteFile : ES3CloudUserAction - { - public override void Enter() - { - var settings = GetSettings(); - StartCoroutine(cloud.DeleteFile(path.Value, user.Value, password.Value, settings)); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Renames a file on the server, overwriting any existing files, or returning error code 3 if no file exists on the server.")] - public class ES3CloudRenameFile : ES3CloudUserAction - { - [Tooltip("The name we want to rename the file to.")] - public FsmString newFilename; - - public override void Enter() - { - var settings = GetSettings(); - StartCoroutine(cloud.RenameFile(path.Value, newFilename.Value, user.Value, password.Value, settings)); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Downloads the names of all of the files on the server for the given user.")] - public class ES3CloudDownloadFilenames : ES3CloudUserAction - { - [Tooltip("The string array variable we want to load our file names into.")] - [ArrayEditor(VariableType.String)] - public FsmArray filenames; - - [Tooltip("An optional search pattern containing '%' or '_' wildcards where '%' represents zero, one, or multiple characters, and '_' represents a single character. See https://www.w3schools.com/sql/sql_like.asp for more info.")] - public FsmString searchPattern; - - public override void OnReset() - { - filenames = null; - searchPattern = ""; - } - - public override void Enter() - { - StartCoroutine(cloud.SearchFilenames(string.IsNullOrEmpty(searchPattern.Value) ? "%" : searchPattern.Value, user.Value, password.Value)); - } - - public override void OnUpdate() - { - if (cloud != null && cloud.isDone) - { - var downloadedFilenames = cloud.filenames; - filenames.Resize(cloud.filenames.Length); - for (int i = 0; i < downloadedFilenames.Length; i++) - filenames.Set(i, downloadedFilenames[i]); - filenames.SaveChanges(); - } - base.OnUpdate(); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Downloads the names of all of the files on the server for the given user.")] - public class ES3CloudSearchFilenames : ES3CloudUserAction - { - [Tooltip("The string array variable we want to load our file names into.")] - [ArrayEditor(VariableType.String)] - public FsmArray filenames; - - [Tooltip("An optional search pattern containing '%' or '_' wildcards where '%' represents zero, one, or multiple characters, and '_' represents a single character. See https://www.w3schools.com/sql/sql_like.asp for more info.")] - public FsmString searchPattern; - - public override void OnReset() - { - filenames = null; - searchPattern = ""; - } - - public override void Enter() - { - StartCoroutine(cloud.SearchFilenames(string.IsNullOrEmpty(searchPattern.Value) ? "%" : searchPattern.Value, user.Value, password.Value)); - } - - public override void OnUpdate() - { - if (cloud != null && cloud.isDone) - { - var downloadedFilenames = cloud.filenames; - filenames.Resize(cloud.filenames.Length); - for (int i = 0; i < downloadedFilenames.Length; i++) - filenames.Set(i, downloadedFilenames[i]); - filenames.SaveChanges(); - } - base.OnUpdate(); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Determines when a file was last updated.")] - public class ES3CloudDownloadTimestamp : ES3CloudUserAction - { - [Tooltip("The Date and time the file was last updated, as a string formatted as yyyy-MM-ddTHH:mm:ss.")] - public FsmString timestamp; - - public override void OnReset() - { - timestamp = ""; - } - - public override void Enter() - { - StartCoroutine(cloud.DownloadTimestamp(path.Value, user.Value, password.Value)); - } - - public override void OnUpdate() - { - if (cloud != null && cloud.isDone) - timestamp.Value = cloud.timestamp.ToString("s"); - base.OnUpdate(); - } - } - -#endif - #endregion - - #region ES3AutoSave actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Triggers Auto Save's Save method.")] - public class ES3AutoSaveSave : FsmStateAction - { - public override void OnEnter() - { - GameObject.Find("Easy Save 3 Manager").GetComponent().Save(); - Finish(); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Triggers Auto Save's Load method.")] - public class ES3AutoSaveLoad : FsmStateAction - { - public override void OnEnter() - { - GameObject.Find("Easy Save 3 Manager").GetComponent().Load(); - Finish(); - } - } - - #endregion - - #region ES3Cache actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Caches a locally-stored file into memory.")] - public class CacheFile : SettingsAction - { - [Tooltip("The filename or file path of the file we want to cache.")] - public FsmString filePath; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - } - - public override void Enter() - { - ES3.CacheFile(filePath.Value, GetSettings()); - } - } - - [ActionCategory("Easy Save 3")] - [Tooltip("Stores a file in the cache to a local file.")] - public class StoreCachedFile : SettingsAction - { - [Tooltip("The filename or file path of the file we want to store.")] - public FsmString filePath; - - public override void OnReset() - { - filePath = "SaveFile.es3"; - } - - public override void Enter() - { - ES3.StoreCachedFile(filePath.Value, GetSettings()); - } - } - - #endregion - - #region Misc actions - - [ActionCategory("Easy Save 3")] - [Tooltip("Gets the Streaming Assets path (see https://docs.unity3d.com/Manual/StreamingAssets.html), and optionally appends onto it. It is strongly recommended to use Easy Save's default of Persistent Data Path instead as this works on all platforms.")] - public class GetStreamingAssetsPath : FsmStateAction - { - [Tooltip("The variable we want to output the Streaming Assets path to.")] - public FsmString output; - [Tooltip("[Optional] A string to append to the path, for example a filename. A forward slash is automatically added for you.")] - public FsmString append; - - public override void Reset() - { - output = null; - append = null; - } - - public override void OnEnter() - { - if (!string.IsNullOrEmpty(append.Value)) - output.Value = Application.streamingAssetsPath + "/" + append.Value; - else - output.Value = Application.streamingAssetsPath; - Finish(); - } - } - - #endregion - - public class PMDataWrapper - { - public Dictionary objs = null; - public Dictionary arrays = null; - - public object obj = null; - public object[] array = null; - - public PMDataWrapper(Fsm fsm, bool fsmVariables, bool globalVariables) - { - objs = new Dictionary(); - arrays = new Dictionary(); - - if (fsm == null) - return; - - // Get FSMVariables objects required based on whether the user wants to save local variables, global variables or both. - var variableLists = new List(); - if (fsmVariables) - variableLists.Add(fsm.Variables); - if (globalVariables) - variableLists.Add(FsmVariables.GlobalVariables); - - foreach (var variableList in variableLists) - { - foreach (var fsmVariable in variableList.GetAllNamedVariables()) - { - if (string.IsNullOrEmpty(fsmVariable.Name)) - continue; - - if (fsmVariable.GetType() == typeof(FsmArray)) - arrays.Add(fsmVariable.Name, ((FsmArray)fsmVariable).Values); - else - objs.Add(fsmVariable.Name, fsmVariable.RawValue); - } - } - } - - public PMDataWrapper(Dictionary objs, Dictionary arrays) - { - this.objs = objs; - this.arrays = arrays; - } - - public PMDataWrapper(object obj) - { - this.obj = obj; - } - - public PMDataWrapper(object[] array) - { - this.array = array; - } - - public PMDataWrapper() { } - - public void ApplyVariables(Fsm fsm, bool fsmVariables, bool globalVariables) - { - // Get FSMVariables objects required based on whether the user wants to save local variables, global variables or both. - var variableLists = new List(); - - if (fsmVariables) - variableLists.Add(fsm.Variables); - if (globalVariables) - variableLists.Add(FsmVariables.GlobalVariables); - - foreach (var variableList in variableLists) - { - foreach (var fsmVariable in variableList.GetAllNamedVariables()) - { - if (fsmVariable.GetType() == typeof(FsmArray)) - { - if (arrays.ContainsKey(fsmVariable.Name)) - ((FsmArray)fsmVariable).Values = arrays[fsmVariable.Name]; - } - else - { - if (objs.ContainsKey(fsmVariable.Name)) - fsmVariable.RawValue = objs[fsmVariable.Name]; - } - } - } - } - } -} - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3Properties("objs", "arrays", "obj", "array")] - public class ES3Type_PMDataWrapper : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_PMDataWrapper() : base(typeof(ES3PlayMaker.PMDataWrapper)) { Instance = this; priority = 1; } - - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (ES3PlayMaker.PMDataWrapper)obj; - - writer.WriteProperty("objs", instance.objs); - writer.WriteProperty("arrays", instance.arrays); - writer.WriteProperty("obj", instance.obj); - writer.WriteProperty("array", instance.array); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (ES3PlayMaker.PMDataWrapper)obj; - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - - case "objs": - instance.objs = reader.Read>(); - break; - case "arrays": - instance.arrays = reader.Read>(); - break; - case "obj": - instance.obj = reader.Read(); - break; - case "array": - instance.array = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new ES3PlayMaker.PMDataWrapper(); - ReadObject(reader, instance); - return instance; - } - } - - [UnityEngine.Scripting.Preserve] - [ES3Properties("ActiveStateName")] - public class ES3Type_Fsm : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_Fsm() : base(typeof(Fsm)) { Instance = this; priority = 1; } - - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (Fsm)obj; - writer.WriteProperty("ActiveStateName", instance.ActiveStateName, ES3Type_string.Instance); - writer.WriteProperty("Variables", new ES3PlayMaker.PMDataWrapper(instance, true, false), ES3Type_PMDataWrapper.Instance); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (Fsm)obj; - if(!instance.Initialized) - { - // Toggle FSM Component twice to trigger initialisation. - instance.FsmComponent.enabled = !instance.FsmComponent.enabled; - instance.FsmComponent.enabled = !instance.FsmComponent.enabled; - } - - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - case "ActiveStateName": - instance.SetState(reader.Read(ES3Type_string.Instance)); - break; - case "Variables": - reader.Read(ES3Type_PMDataWrapper.Instance).ApplyVariables(instance, true, false); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new HutongGames.PlayMaker.Fsm(); - ReadObject(reader, instance); - return instance; - } - } - - /*[UnityEngine.Scripting.Preserve] - [ES3Properties("Fsm")] - public class ES3Type_PlayMakerFSM : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_PlayMakerFSM() : base(typeof(PlayMakerFSM)) - { - Instance = this; - priority = 1; - } - - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (PlayMakerFSM)obj; - - writer.WriteProperty("enabled", instance.enabled); - writer.WriteProperty("Fsm", instance.Fsm, ES3Type_Fsm.Instance); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (PlayMakerFSM)obj; - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "Fsm": - reader.ReadInto(instance.Fsm); - break; - default: - reader.Skip(); - break; - } - } - } - }*/ -} - - -#endif diff --git a/Assets/Plugins/Easy Save 3/PlayMaker/ES3PlayMaker.cs.meta b/Assets/Plugins/Easy Save 3/PlayMaker/ES3PlayMaker.cs.meta deleted file mode 100644 index 4f8898a..0000000 --- a/Assets/Plugins/Easy Save 3/PlayMaker/ES3PlayMaker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5989e48214df74e2b9cced724ec2e5c8 -timeCreated: 1497259720 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Resources.meta b/Assets/Plugins/Easy Save 3/Resources.meta deleted file mode 100644 index ce797a7..0000000 --- a/Assets/Plugins/Easy Save 3/Resources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1e20939b217fac845aace6c65da262a0 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Resources/ES3.meta b/Assets/Plugins/Easy Save 3/Resources/ES3.meta deleted file mode 100644 index 8c01714..0000000 --- a/Assets/Plugins/Easy Save 3/Resources/ES3.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9d4fee405f62ce244af6e4ec18ba17b9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset deleted file mode 100644 index 34c9105..0000000 --- a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset +++ /dev/null @@ -1,98 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7b340139c9e4d054f904d8b452798652, type: 3} - m_Name: ES3Defaults - m_EditorClassIdentifier: - settings: - _location: 0 - path: SaveFile.es3 - encryptionType: 0 - compressionType: 0 - encryptionPassword: password - directory: 0 - format: 0 - prettyPrint: 1 - bufferSize: 2048 - saveChildren: 1 - postprocessRawCachedData: 0 - typeChecking: 1 - safeReflection: 1 - memberReferenceMode: 0 - referenceMode: 2 - serializationDepthLimit: 64 - assemblyNames: - - ACTk.Examples.Genuine.Runtime - - ACTk.Examples.Runtime - - ACTk.Runtime - - AD_FimpAnimating - - AD_FimpGeneratorsShared - - AD_FimpoPropertyAttr - - AD_FimpShared - - AD_FimpSharedTools - - Assembly-CSharp - - Assembly-CSharp-firstpass - - Cinemachine - - CrestDWP2Asmdef - - ECM2 - - Enviro3.Runtime - - FairyGUI - - Fantasy.Unity - - Gaia.UnityURPWater.Core - - GaiaCore - - Gena.Scripts.Utils - - Ilumisoft.GraphicsControl - - Ilumisoft.GraphicsControl.BuiltIn - - Ilumisoft.GraphicsControl.UI - - Ilumisoft.GraphicsControl.URP - - JBooth.MicroSplat.Core - - JBooth.MicroVerseCore - - JBooth.MicroVerseCore.Demo - - JBooth.MicroVerseCore.Demo.TimeOfDay.Runtime - - JBooth.MicroVerseCore.Roads.Demo - - KAnimationCore.Runtime - - Luban.Runtime - - NBC.Asset - - NBC.Core - - NBC.Lan - - NBC.UI - - NWH.Common - - NWH.DWP2 - - OccaSoftware.SuperSimpleSkybox.Demo - - OccaSoftware.SuperSimpleSkybox.Runtime - - ProceduralWorlds.GTS.MeshSimplifier - - Rowlan.MicroVerse.Presets.Runtime - - Rowlan.MicroVerse.Presets_2.Runtime - - Rowlan.MicroVerse.Presets_3.Runtime - - StompyRobot.SRDebugger - - StompyRobot.SRF - - Unity.InputSystem.RebindingUI - - VInspector - - WaveHarmonic.Crest - - WaveHarmonic.Crest.Samples - - WaveHarmonic.Crest.Samples.Boats - - WaveHarmonic.Crest.Samples.Examples - - WaveHarmonic.Crest.Samples.Ripples - - WaveHarmonic.Crest.Scripting - - WaveHarmonic.Crest.Shared - showAdvancedSettings: 0 - addMgrToSceneAutomatically: 0 - autoUpdateReferences: 1 - addAllPrefabsToManager: 1 - collectDependenciesDepth: 4 - collectDependenciesTimeout: 10 - updateReferencesWhenSceneChanges: 1 - updateReferencesWhenSceneIsSaved: 1 - updateReferencesWhenSceneIsOpened: 1 - referenceFolders: [] - logDebugInfo: 0 - logWarnings: 1 - logErrors: 1 diff --git a/Assets/Plugins/Easy Save 3/Scripts.meta b/Assets/Plugins/Easy Save 3/Scripts.meta deleted file mode 100644 index 9a10374..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 86ef77fdddf9947f290776206b1f23ab -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Attributes.meta b/Assets/Plugins/Easy Save 3/Scripts/Attributes.meta deleted file mode 100644 index af485a9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Attributes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e3195251321eef445b65f7c8d345e743 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Attributes/ES3Attributes.cs b/Assets/Plugins/Easy Save 3/Scripts/Attributes/ES3Attributes.cs deleted file mode 100644 index 242a790..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Attributes/ES3Attributes.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -[AttributeUsage(AttributeTargets.Class | AttributeTargets.Field | AttributeTargets.Property)] -public class ES3Serializable : Attribute{} - -[AttributeUsage(AttributeTargets.Class | AttributeTargets.Field | AttributeTargets.Property)] -public class ES3NonSerializable : Attribute { } diff --git a/Assets/Plugins/Easy Save 3/Scripts/Attributes/ES3Attributes.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Attributes/ES3Attributes.cs.meta deleted file mode 100644 index e18e2d3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Attributes/ES3Attributes.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e29c69181d1dff642b20c218819fe2e9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Auto Save.meta b/Assets/Plugins/Easy Save 3/Scripts/Auto Save.meta deleted file mode 100644 index cf53efc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Auto Save.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a01ff460e5e0b4f58bd28b3520b7ff2c -folderAsset: yes -timeCreated: 1502446431 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSave.cs b/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSave.cs deleted file mode 100644 index 806914b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSave.cs +++ /dev/null @@ -1,55 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -public class ES3AutoSave : MonoBehaviour, ISerializationCallbackReceiver -{ - public bool saveLayer = true; - public bool saveTag = true; - public bool saveName = true; - public bool saveHideFlags = true; - public bool saveActive = true; - public bool saveChildren = false; - - private bool isQuitting = false; - - //[HideInInspector] - public List componentsToSave = new List(); - - public void Reset() - { - // Initialise saveLayer (etc) to false for all new Components. - saveLayer = false; - saveTag = false; - saveName = false; - saveHideFlags = false; - saveActive = false; - saveChildren = false; - } - - public void Awake() - { - if (ES3AutoSaveMgr.Current == null) - ES3Internal.ES3Debug.LogWarning("No GameObjects in this scene will be autosaved because there is no Easy Save 3 Manager. To add a manager to this scene, exit playmode and go to Assets > Easy Save 3 > Add Manager to Scene.", this); - else - ES3AutoSaveMgr.AddAutoSave(this); - } - - public void OnApplicationQuit() - { - isQuitting = true; - } - - public void OnDestroy() - { - // If this is being destroyed, but not because the application is quitting, - // remove the AutoSave from the manager. - if (!isQuitting) - ES3AutoSaveMgr.RemoveAutoSave(this); - } - public void OnBeforeSerialize() { } - public void OnAfterDeserialize() - { - // Remove any null Components - componentsToSave.RemoveAll(c => c == null || c.GetType() == typeof(Component)); - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSave.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSave.cs.meta deleted file mode 100644 index 1bc7333..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSave.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9cfcc9ceea0bf419cb3bcaf548c2600d -timeCreated: 1519132292 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs b/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs deleted file mode 100644 index f1f32d4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs +++ /dev/null @@ -1,195 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.SceneManagement; -using System.Linq; - -#if UNITY_VISUAL_SCRIPTING -[Unity.VisualScripting.IncludeInSettings(true)] -#elif BOLT_VISUAL_SCRIPTING -[Ludiq.IncludeInSettings(true)] -#endif -public class ES3AutoSaveMgr : MonoBehaviour -{ - public static ES3AutoSaveMgr _current = null; - public static ES3AutoSaveMgr Current - { - get - { - if (_current == null /*|| _current.gameObject.scene != SceneManager.GetActiveScene()*/) - { - var scene = SceneManager.GetActiveScene(); - var roots = scene.GetRootGameObjects(); - - // First, look for Easy Save 3 Manager in the top-level. - foreach (var root in roots) - if (root.name == "Easy Save 3 Manager") - return _current = root.GetComponent(); - - // If the user has moved or renamed the Easy Save 3 Manager, we need to perform a deep search. - foreach (var root in roots) - if ((_current = root.GetComponentInChildren()) != null) - return _current; - } - return _current; - } - } - - public static Dictionary managers = new Dictionary(); - - // Included for backwards compatibility. - public static ES3AutoSaveMgr Instance - { - get { return Current; } - } - - public enum LoadEvent { None, Awake, Start } - public enum SaveEvent { None, OnApplicationQuit, OnApplicationPause } - - public string key = System.Guid.NewGuid().ToString(); - public SaveEvent saveEvent = SaveEvent.OnApplicationQuit; - public LoadEvent loadEvent = LoadEvent.Start; - public ES3SerializableSettings settings = new ES3SerializableSettings("SaveFile.es3", ES3.Location.Cache); - - public HashSet autoSaves = new HashSet(); - - public void Save() - { - if (autoSaves == null || autoSaves.Count == 0) - return; - - ManageSlots(); - - // If we're using caching and we've not already cached this file, cache it. - if (settings.location == ES3.Location.Cache && !ES3.FileExists(settings)) - ES3.CacheFile(settings); - - if (autoSaves == null || autoSaves.Count == 0) - { - ES3.DeleteKey(key, settings); - } - else - { - var gameObjects = new List(); - foreach (var autoSave in autoSaves) - { - // If the ES3AutoSave component is disabled, don't save it. - if (autoSave != null && autoSave.enabled) - gameObjects.Add(autoSave.gameObject); - } - // Save in the same order as their depth in the hierarchy. - ES3.Save(key, gameObjects.OrderBy(x => GetDepth(x.transform)).ToArray(), settings); - } - - if(settings.location == ES3.Location.Cache && ES3.FileExists(settings)) - ES3.StoreCachedFile(settings); - } - - public void Load() - { - ManageSlots(); - - try - { - // If we're using caching and we've not already cached this file, cache it. - if (settings.location == ES3.Location.Cache && !ES3.FileExists(settings)) - ES3.CacheFile(settings); - } - catch { } - - - // Ensure that the reference manager for this scene has been initialised. - var mgr = ES3ReferenceMgr.GetManagerFromScene(this.gameObject.scene, false); - mgr.Awake(); - - var gameObjects = ES3.Load(key, new GameObject[0], settings); - } - - void Start() - { - if(loadEvent == LoadEvent.Start) - Load(); - } - - public void Awake() - { - managers[this.gameObject.scene] = this; - GetAutoSaves(); - - if (loadEvent == LoadEvent.Awake) - Load(); - } - - void OnApplicationQuit() - { - if(saveEvent == SaveEvent.OnApplicationQuit) - Save(); - } - - void OnApplicationPause(bool paused) - { - if( (saveEvent == SaveEvent.OnApplicationPause || - (Application.isMobilePlatform && saveEvent == SaveEvent.OnApplicationQuit)) && paused) - Save(); - } - - /* Register an ES3AutoSave with the ES3AutoSaveMgr, if there is one */ - public static void AddAutoSave(ES3AutoSave autoSave) - { - if (autoSave == null) - return; - - ES3AutoSaveMgr mgr; - if (managers.TryGetValue(autoSave.gameObject.scene, out mgr)) - mgr.autoSaves.Add(autoSave); - - /*if(ES3AutoSaveMgr.Current != null) - ES3AutoSaveMgr.Current.autoSaves.Add(autoSave);*/ - } - - /* Remove an ES3AutoSave from the ES3AutoSaveMgr, for example if it's GameObject has been destroyed */ - public static void RemoveAutoSave(ES3AutoSave autoSave) - { - if (autoSave == null) - return; - - ES3AutoSaveMgr mgr; - if (managers.TryGetValue(autoSave.gameObject.scene, out mgr)) - mgr.autoSaves.Remove(autoSave); - - /*if (ES3AutoSaveMgr.Current != null) - ES3AutoSaveMgr.Current.autoSaves.Remove(autoSave);*/ - } - - /* Gathers all of the ES3AutoSave Components in the scene and registers them with the manager */ - public void GetAutoSaves() - { - autoSaves = new HashSet(); - - foreach (var go in this.gameObject.scene.GetRootGameObjects()) - autoSaves.UnionWith(go.GetComponentsInChildren(true)); - } - - // Gets the depth of a Transform in the hierarchy. - static int GetDepth(Transform t) - { - int depth = 0; - - while (t.parent != null) - { - t = t.parent; - depth++; - } - - return depth; - } - - // Changes the path for this ES3AutoSave if we're using save slots. - void ManageSlots() - { -#if ES3_TMPRO && ES3_UGUI - if (ES3SlotManager.selectedSlotPath != null) - settings.path = ES3SlotManager.selectedSlotPath; -#endif - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs.meta deleted file mode 100644 index 39da0af..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9107aee0ced90422da95f0b31680501f -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Debugging.meta b/Assets/Plugins/Easy Save 3/Scripts/Debugging.meta deleted file mode 100644 index 7d3f40a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Debugging.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c00267afddf624bb19ac24ce8076f9e4 -folderAsset: yes -timeCreated: 1518175259 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Debugging/ES3Debug.cs b/Assets/Plugins/Easy Save 3/Scripts/Debugging/ES3Debug.cs deleted file mode 100644 index b583b5d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Debugging/ES3Debug.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace ES3Internal -{ - internal static class ES3Debug - { - private const string disableInfoMsg = "\nTo disable these messages from Easy Save, go to Window > Easy Save 3 > Settings, and uncheck 'Log Info'"; - private const string disableWarningMsg = "\nTo disable warnings from Easy Save, go to Window > Easy Save 3 > Settings, and uncheck 'Log Warnings'"; - private const string disableErrorMsg = "\nTo disable these error messages from Easy Save, go to Window > Easy Save 3 > Settings, and uncheck 'Log Errors'"; - - private const char indentChar = '-'; - - public static void Log(string msg, Object context = null, int indent=0) - { - if (!ES3Settings.defaultSettingsScriptableObject.logDebugInfo) - return; - else if (context != null) - Debug.LogFormat(context, Indent(indent) + msg + disableInfoMsg); - else - Debug.LogFormat(context, Indent(indent) + msg); - } - - public static void LogWarning(string msg, Object context=null, int indent = 0) - { - if (!ES3Settings.defaultSettingsScriptableObject.logWarnings) - return; - else if (context != null) - Debug.LogWarningFormat(context, Indent(indent) + msg + disableWarningMsg); - else - Debug.LogWarningFormat(context, Indent(indent) + msg + disableWarningMsg); - } - - public static void LogError(string msg, Object context = null, int indent = 0) - { - if (!ES3Settings.defaultSettingsScriptableObject.logErrors) - return; - else if (context != null) - Debug.LogErrorFormat(context, Indent(indent) + msg + disableErrorMsg); - else - Debug.LogErrorFormat(context, Indent(indent) + msg + disableErrorMsg); - } - - private static string Indent(int size) - { - if (size < 0) - return ""; - return new string(indentChar, size); - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Debugging/ES3Debug.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Debugging/ES3Debug.cs.meta deleted file mode 100644 index d26c5ba..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Debugging/ES3Debug.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9f97d288c55524622a117171a19d3225 -timeCreated: 1518175265 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3.cs deleted file mode 100644 index 7002c69..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3.cs +++ /dev/null @@ -1,1658 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; -#if UNITY_2018_3_OR_NEWER -using UnityEngine.Networking; -#endif - -/// -/// The main class for Easy Save methods. All methods in this class are static. -/// -#if UNITY_VISUAL_SCRIPTING -[Unity.VisualScripting.IncludeInSettings(true)] -#elif BOLT_VISUAL_SCRIPTING -[Ludiq.IncludeInSettings(true)] -#endif -public class ES3 -{ - public enum Location { File, PlayerPrefs, InternalMS, Resources, Cache }; - public enum Directory { PersistentDataPath, DataPath } - public enum EncryptionType { None, AES }; - public enum CompressionType { None, Gzip}; - public enum Format { JSON }; - public enum ReferenceMode { ByRef, ByValue, ByRefAndValue}; - public enum ImageType { JPEG, PNG }; - - #region ES3.Save - - // Saves the value to the default file with the given key. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - public static void Save(string key, object value) - { - Save(key, value, new ES3Settings()); - } - - /// Saves the value to a file with the given key. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - /// The relative or absolute path of the file we want to store our value to. - public static void Save(string key, object value, string filePath) - { - Save(key, value, new ES3Settings(filePath)); - } - - /// Saves the value to a file with the given key. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - /// The relative or absolute path of the file we want to store our value to. - /// The settings we want to use to override the default settings. - public static void Save(string key, object value, string filePath, ES3Settings settings) - { - Save(key, value, new ES3Settings(filePath, settings)); - } - - /// Saves the value to a file with the given key. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - /// The settings we want to use to override the default settings. - public static void Save(string key, object value, ES3Settings settings) - { - Save(key, value, settings); - } - - /// Saves the value to the default file with the given key. - /// The type of the data that we want to save. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - public static void Save(string key, T value) - { - Save(key, value, new ES3Settings()); - } - - /// Saves the value to a file with the given key. - /// The type of the data that we want to save. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - /// The relative or absolute path of the file we want to store our value to. - public static void Save(string key, T value, string filePath) - { - Save(key, value, new ES3Settings(filePath)); - } - - /// Saves the value to a file with the given key. - /// The type of the data that we want to save. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - /// The relative or absolute path of the file we want to store our value to. - /// The settings we want to use to override the default settings. - public static void Save(string key, T value, string filePath, ES3Settings settings) - { - Save(key, value, new ES3Settings(filePath, settings)); - } - - /// Saves the value to a file with the given key. - /// The type of the data that we want to save. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - /// The settings we want to use to override the default settings. - public static void Save(string key, T value, ES3Settings settings) - { - if (settings.location == Location.Cache) - { - ES3File.GetOrCreateCachedFile(settings).Save(key, value); - return; - } - - using (var writer = ES3Writer.Create(settings)) - { - writer.Write(key, value); - writer.Save(); - } - } - - /// Creates or overwrites a file with the specified raw bytes. - /// The bytes we want to store. - public static void SaveRaw(byte[] bytes) - { - SaveRaw(bytes, new ES3Settings()); - } - - /// Creates or overwrites a file with the specified raw bytes. - /// The bytes we want to store. - /// The relative or absolute path of the file we want to store our bytes to. - public static void SaveRaw(byte[] bytes, string filePath) - { - SaveRaw(bytes, new ES3Settings(filePath)); - } - - /// Creates or overwrites a file with the specified raw bytes. - /// The bytes we want to store. - /// The relative or absolute path of the file we want to store our bytes to. - /// The settings we want to use to override the default settings. - public static void SaveRaw(byte[] bytes, string filePath, ES3Settings settings) - { - SaveRaw(bytes, new ES3Settings(filePath, settings)); - } - - /// Creates or overwrites a file with the specified raw bytes. - /// The bytes we want to store. - /// The settings we want to use to override the default settings. - public static void SaveRaw(byte[] bytes, ES3Settings settings) - { - if (settings.location == Location.Cache) - { - ES3File.GetOrCreateCachedFile(settings).SaveRaw(bytes, settings); - return; - } - - using (var stream = ES3Stream.CreateStream(settings, ES3FileMode.Write)) - { - stream.Write(bytes, 0, bytes.Length); - } - ES3IO.CommitBackup(settings); - } - - /// Creates or overwrites the default file with the specified raw bytes. - /// The string we want to store. - public static void SaveRaw(string str) - { - SaveRaw(str, new ES3Settings()); - } - - /// Creates or overwrites the default file with the specified raw bytes. - /// The string we want to store. - /// The relative or absolute path of the file we want to store our bytes to. - public static void SaveRaw(string str, string filePath) - { - SaveRaw(str, new ES3Settings(filePath)); - } - - /// Creates or overwrites a file with the specified raw bytes. - /// The string we want to store. - /// The relative or absolute path of the file we want to store our bytes to. - /// The settings we want to use to override the default settings. - public static void SaveRaw(string str, string filePath, ES3Settings settings) - { - SaveRaw(str, new ES3Settings(filePath, settings)); - } - - /// Creates or overwrites a file with the specified raw bytes. - /// The string we want to store. - /// The settings we want to use to override the default settings. - public static void SaveRaw(string str, ES3Settings settings) - { - var bytes = settings.encoding.GetBytes(str); - SaveRaw(bytes, settings); - } - - /// Creates or appends the specified bytes to a file. - /// The bytes we want to append. - public static void AppendRaw(byte[] bytes) - { - AppendRaw(bytes, new ES3Settings()); - } - - /// Creates or appends the specified bytes to a file. - /// The bytes we want to append. - /// The relative or absolute path of the file we want to append our bytes to. - /// The settings we want to use to override the default settings. - public static void AppendRaw(byte[] bytes, string filePath, ES3Settings settings) - { - AppendRaw(bytes, new ES3Settings(filePath, settings)); - } - - /// Creates or appends the specified bytes to a file. - /// The bytes we want to append. - /// The settings we want to use to override the default settings. - public static void AppendRaw(byte[] bytes, ES3Settings settings) - { - if (settings.location == Location.Cache) - { - ES3File.GetOrCreateCachedFile(settings).AppendRaw(bytes); - return; - } - - ES3Settings newSettings = new ES3Settings(settings.path, settings); - newSettings.encryptionType = EncryptionType.None; - newSettings.compressionType = CompressionType.None; - - using (var stream = ES3Stream.CreateStream(newSettings, ES3FileMode.Append)) - stream.Write(bytes, 0, bytes.Length); - } - - /// Creates or appends the specified string to the default file. - /// The string we want to append. - public static void AppendRaw(string str) - { - AppendRaw(str, new ES3Settings()); - } - - /// Creates or appends the specified string to the default file. - /// The string we want to append. - /// The relative or absolute path of the file we want to append our string to. - public static void AppendRaw(string str, string filePath) - { - AppendRaw(str, new ES3Settings(filePath)); - } - - /// Creates or appends the specified string to the default file. - /// The string we want to append. - /// The relative or absolute path of the file we want to append our string to. - /// The settings we want to use to override the default settings. - public static void AppendRaw(string str, string filePath, ES3Settings settings) - { - AppendRaw(str, new ES3Settings(filePath, settings)); - } - - /// Creates or appends the specified string to the default file. - /// The string we want to append. - /// The settings we want to use to override the default settings. - public static void AppendRaw(string str, ES3Settings settings) - { - var bytes = settings.encoding.GetBytes(str); - ES3Settings newSettings = new ES3Settings(settings.path, settings); - newSettings.encryptionType = EncryptionType.None; - newSettings.compressionType = CompressionType.None; - - if (settings.location == Location.Cache) - { - ES3File.GetOrCreateCachedFile(settings).SaveRaw(bytes); - return; - } - - using (var stream = ES3Stream.CreateStream(newSettings, ES3FileMode.Append)) - stream.Write(bytes, 0, bytes.Length); - } - - /// Saves a Texture2D as a PNG or JPG, depending on the file extension used for the filePath. - /// The Texture2D we want to save as a JPG or PNG. - /// The relative or absolute path of the PNG or JPG file we want to create. - public static void SaveImage(Texture2D texture, string imagePath) - { - SaveImage(texture, new ES3Settings(imagePath)); - } - - /// Saves a Texture2D as a PNG or JPG, depending on the file extension used for the filePath. - /// The Texture2D we want to save as a JPG or PNG. - /// The relative or absolute path of the PNG or JPG file we want to create. - public static void SaveImage(Texture2D texture, string imagePath, ES3Settings settings) - { - SaveImage(texture, new ES3Settings(imagePath, settings)); - } - - /// Saves a Texture2D as a PNG or JPG, depending on the file extension used for the filePath. - /// The Texture2D we want to save as a JPG or PNG. - /// The settings we want to use to override the default settings. - public static void SaveImage(Texture2D texture, ES3Settings settings) - { - SaveImage(texture, 75, settings); - } - - /// Saves a Texture2D as a PNG or JPG, depending on the file extension used for the filePath. - /// The Texture2D we want to save as a JPG or PNG. - /// Quality to encode with, where 1 is minimum and 100 is maximum. Note that this only applies to JPGs. - /// The relative or absolute path of the PNG or JPG file we want to create. - public static void SaveImage(Texture2D texture, int quality, string imagePath) - { - SaveImage(texture, quality, new ES3Settings(imagePath)); - } - - /// Saves a Texture2D as a PNG or JPG, depending on the file extension used for the filePath. - /// The Texture2D we want to save as a JPG or PNG. - /// Quality to encode with, where 1 is minimum and 100 is maximum. Note that this only applies to JPGs. - /// The relative or absolute path of the PNG or JPG file we want to create. - public static void SaveImage(Texture2D texture, int quality, string imagePath, ES3Settings settings) - { - SaveImage(texture, quality, new ES3Settings(imagePath, settings)); - } - - /// Saves a Texture2D as a PNG or JPG, depending on the file extension used for the filePath. - /// The Texture2D we want to save as a JPG or PNG. - /// Quality to encode with, where 1 is minimum and 100 is maximum. Note that this only applies to JPGs. - /// The settings we want to use to override the default settings. - public static void SaveImage(Texture2D texture, int quality, ES3Settings settings) - { - // Get the file extension to determine what format we want to save the image as. - string extension = ES3IO.GetExtension(settings.path).ToLower(); - if (string.IsNullOrEmpty(extension)) - throw new System.ArgumentException("File path must have a file extension when using ES3.SaveImage."); - byte[] bytes; - if (extension == ".jpg" || extension == ".jpeg") - bytes = texture.EncodeToJPG(quality); - else if (extension == ".png") - bytes = texture.EncodeToPNG(); - else - throw new System.ArgumentException("File path must have extension of .png, .jpg or .jpeg when using ES3.SaveImage."); - - ES3.SaveRaw(bytes, settings); - } - - - /// Saves a Texture2D as a PNG or JPG, depending on the file extension used for the filePath. - /// The Texture2D we want to save as a JPG or PNG. - /// Quality to encode with, where 1 is minimum and 100 is maximum. Note that this only applies to JPGs. - public static byte[] SaveImageToBytes(Texture2D texture, int quality, ES3.ImageType imageType) - { - if (imageType == ImageType.JPEG) - return texture.EncodeToJPG(quality); - else - return texture.EncodeToPNG(); - } - - #endregion - - #region ES3.Load - - /* Standard load methods */ - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - public static object Load(string key) - { - return Load(key, new ES3Settings()); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - public static object Load(string key, string filePath) - { - return Load(key, new ES3Settings(filePath)); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The settings we want to use to override the default settings. - public static object Load(string key, string filePath, ES3Settings settings) - { - return Load(key, new ES3Settings(filePath, settings)); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The settings we want to use to override the default settings. - public static object Load(string key, ES3Settings settings) - { - return Load(key, settings); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The value we want to return if the file or key does not exist. - public static object Load(string key, object defaultValue) - { - return Load(key, defaultValue, new ES3Settings()); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The value we want to return if the file or key does not exist. - public static object Load(string key, string filePath, object defaultValue) - { - return Load(key, defaultValue, new ES3Settings(filePath)); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The value we want to return if the file or key does not exist. - /// The settings we want to use to override the default settings. - public static object Load(string key, string filePath, object defaultValue, ES3Settings settings) - { - return Load(key, defaultValue, new ES3Settings(filePath, settings)); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The value we want to return if the file or key does not exist. - /// The settings we want to use to override the default settings. - public static object Load(string key, object defaultValue, ES3Settings settings) - { - return Load(key, defaultValue, settings); - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - public static T Load(string key) - { - return Load(key, new ES3Settings()); - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - public static T Load(string key, string filePath) - { - return Load(key, new ES3Settings(filePath)); - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The settings we want to use to override the default settings. - public static T Load(string key, string filePath, ES3Settings settings) - { - if (typeof(T) == typeof(string)) - ES3Debug.LogWarning("Using ES3.Load(string, string) to load a string, but the second parameter is ambiguous between defaultValue and filePath. By default C# will assume that the second parameter is the filePath. If you want the second parameter to be the defaultValue, use a named parameter. E.g. ES3.Load(\"key\", defaultValue: \"myDefaultValue\")"); - - return Load(key, new ES3Settings(filePath, settings)); - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The settings we want to use to override the default settings. - public static T Load(string key, ES3Settings settings) - { - if (settings.location == Location.Cache) - return ES3File.GetOrCreateCachedFile(settings).Load(key); - - using (var reader = ES3Reader.Create(settings)) - { - if (reader == null) - throw new System.IO.FileNotFoundException("File \"" + settings.FullPath + "\" could not be found."); - return reader.Read(key); - } - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The value we want to return if the file or key does not exist. - public static T Load(string key, T defaultValue) - { - return Load(key, defaultValue, new ES3Settings()); - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The value we want to return if the file or key does not exist. - public static T Load(string key, string filePath, T defaultValue) - { - return Load(key, defaultValue, new ES3Settings(filePath)); - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The value we want to return if the file or key does not exist. - /// The settings we want to use to override the default settings. - public static T Load(string key, string filePath, T defaultValue, ES3Settings settings) - { - return Load(key, defaultValue, new ES3Settings(filePath, settings)); - } - - /// Loads the value from a file with the given key. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The value we want to return if the file or key does not exist. - /// The settings we want to use to override the default settings. - public static T Load(string key, T defaultValue, ES3Settings settings) - { - if (settings.location == Location.Cache) - return ES3File.GetOrCreateCachedFile(settings).Load(key, defaultValue); - - using (var reader = ES3Reader.Create(settings)) - { - if (reader == null) - return defaultValue; - return reader.Read(key, defaultValue); - } - } - - /* Self-assigning load methods */ - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The key which identifies the value we want to load. - /// The object we want to load the value into. - public static void LoadInto(string key, object obj) where T : class - { - LoadInto(key, obj, new ES3Settings()); - } - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The object we want to load the value into. - public static void LoadInto(string key, string filePath, object obj) - { - LoadInto(key, obj, new ES3Settings(filePath)); - } - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The object we want to load the value into. - /// The settings we want to use to override the default settings. - public static void LoadInto(string key, string filePath, object obj, ES3Settings settings) - { - LoadInto(key, obj, new ES3Settings(filePath, settings)); - } - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The key which identifies the value we want to load. - /// The object we want to load the value into. - /// The settings we want to use to override the default settings. - public static void LoadInto(string key, object obj, ES3Settings settings) - { - LoadInto(key, obj, settings); - } - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The object we want to load the value into. - public static void LoadInto(string key, T obj) where T : class - { - LoadInto(key, obj, new ES3Settings()); - } - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The object we want to load the value into. - public static void LoadInto(string key, string filePath, T obj) where T : class - { - LoadInto(key, obj, new ES3Settings(filePath)); - } - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The relative or absolute path of the file we want to load from. - /// The object we want to load the value into. - /// The settings we want to use to override the default settings. - public static void LoadInto(string key, string filePath, T obj, ES3Settings settings) where T : class - { - LoadInto(key, obj, new ES3Settings(filePath, settings)); - } - - /// Loads the value from a file with the given key into an existing object, rather than creating a new instance. - /// The type of the data that we want to load. - /// The key which identifies the value we want to load. - /// The object we want to load the value into. - /// The settings we want to use to override the default settings. - public static void LoadInto(string key, T obj, ES3Settings settings) where T : class - { - if (ES3Reflection.IsValueType(obj.GetType())) - throw new InvalidOperationException("ES3.LoadInto can only be used with reference types, but the data you're loading is a value type. Use ES3.Load instead."); - - if (settings.location == Location.Cache) - { - ES3File.GetOrCreateCachedFile(settings).LoadInto(key, obj); - return; - } - - if (settings == null) settings = new ES3Settings(); - using (var reader = ES3Reader.Create(settings)) - { - if (reader == null) - throw new System.IO.FileNotFoundException("File \"" + settings.FullPath + "\" could not be found."); - reader.ReadInto(key, obj); - } - } - - /* LoadString method, as this can be difficult with overloads. */ - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The value we want to return if the file or key does not exist. - /// The settings we want to use to override the default settings. - public static string LoadString(string key, string defaultValue, ES3Settings settings) - { - return Load(key, null, defaultValue, settings); - } - - /// Loads the value from a file with the given key. - /// The key which identifies the value we want to load. - /// The value we want to return if the file or key does not exist. - /// The relative or absolute path of the file we want to load from. - /// The settings we want to use to override the default settings. - public static string LoadString(string key, string defaultValue, string filePath = null, ES3Settings settings = null) - { - return Load(key, filePath, defaultValue, settings); - } - - #endregion - - #region Other ES3.Load Methods - - /// Loads the default file as a byte array. - public static byte[] LoadRawBytes() - { - return LoadRawBytes(new ES3Settings()); - } - - /// Loads a file as a byte array. - /// The relative or absolute path of the file we want to load as a byte array. - public static byte[] LoadRawBytes(string filePath) - { - return LoadRawBytes(new ES3Settings(filePath)); - } - - /// Loads a file as a byte array. - /// The relative or absolute path of the file we want to load as a byte array. - /// The settings we want to use to override the default settings. - public static byte[] LoadRawBytes(string filePath, ES3Settings settings) - { - return LoadRawBytes(new ES3Settings(filePath, settings)); - } - - /// Loads the default file as a byte array. - /// The settings we want to use to override the default settings. - public static byte[] LoadRawBytes(ES3Settings settings) - { - if (settings.location == Location.Cache) - return ES3File.GetOrCreateCachedFile(settings).LoadRawBytes(); - - using (var stream = ES3Stream.CreateStream(settings, ES3FileMode.Read)) - { - if (stream == null) - throw new System.IO.FileNotFoundException("File "+settings.path+" could not be found"); - - if (stream.GetType() == typeof(System.IO.Compression.GZipStream)) - { - var gZipStream = (System.IO.Compression.GZipStream)stream; - using (var ms = new System.IO.MemoryStream()) - { - ES3Stream.CopyTo(gZipStream, ms); - return ms.ToArray(); - } - } - else - { - var bytes = new byte[stream.Length]; - stream.Read(bytes, 0, bytes.Length); - return bytes; - } - } - - /*if(settings.location == Location.File) - return ES3IO.ReadAllBytes(settings.FullPath); - else if(settings.location == Location.PlayerPrefs) - return System.Convert.FromBase64String(PlayerPrefs.GetString(settings.FullPath)); - else if(settings.location == Location.Resources) - { - var textAsset = Resources.Load(settings.FullPath); - return textAsset.bytes; - } - return null;*/ - } - - /// Loads the default file as a byte array. - public static string LoadRawString() - { - return LoadRawString(new ES3Settings()); - } - - /// Loads a file as a byte array. - /// The relative or absolute path of the file we want to load as a byte array. - /// The settings we want to use to override the default settings. - public static string LoadRawString(string filePath) - { - return LoadRawString(new ES3Settings(filePath)); - } - - /// Loads a file as a byte array. - /// The relative or absolute path of the file we want to load as a byte array. - /// The settings we want to use to override the default settings. - public static string LoadRawString(string filePath, ES3Settings settings) - { - return LoadRawString(new ES3Settings(filePath, settings)); - } - - /// Loads the default file as a byte array. - /// The settings we want to use to override the default settings. - public static string LoadRawString(ES3Settings settings) - { - var bytes = ES3.LoadRawBytes(settings); - return settings.encoding.GetString(bytes, 0, bytes.Length); - } - - /// Loads a PNG or JPG as a Texture2D. - /// The relative or absolute path of the PNG or JPG file we want to load as a Texture2D. - /// The settings we want to use to override the default settings. - public static Texture2D LoadImage(string imagePath) - { - return LoadImage(new ES3Settings(imagePath)); - } - - /// Loads a PNG or JPG as a Texture2D. - /// The relative or absolute path of the PNG or JPG file we want to load as a Texture2D. - /// The settings we want to use to override the default settings. - public static Texture2D LoadImage(string imagePath, ES3Settings settings) - { - return LoadImage(new ES3Settings(imagePath, settings)); - } - - /// Loads a PNG or JPG as a Texture2D. - /// The settings we want to use to override the default settings. - public static Texture2D LoadImage(ES3Settings settings) - { - byte[] bytes = ES3.LoadRawBytes(settings); - return LoadImage(bytes); - } - - /// Loads a PNG or JPG as a Texture2D. - /// The raw bytes of the PNG or JPG. - public static Texture2D LoadImage(byte[] bytes) - { - var texture = new Texture2D(1, 1); - texture.LoadImage(bytes); - return texture; - } - - /// Loads an audio file as an AudioClip. Note that MP3 files are not supported on standalone platforms and Ogg Vorbis files are not supported on mobile platforms. - /// The relative or absolute path of the audio file we want to load as an AudioClip. - public static AudioClip LoadAudio(string audioFilePath -#if UNITY_2018_3_OR_NEWER - , AudioType audioType -#endif - ) - { - return LoadAudio(audioFilePath, -#if UNITY_2018_3_OR_NEWER - audioType, -#endif - new ES3Settings()); - } - - /// Loads an audio file as an AudioClip. Note that MP3 files are not supported on standalone platforms and Ogg Vorbis files are not supported on mobile platforms. - /// The relative or absolute path of the audio file we want to load as an AudioClip. - /// The settings we want to use to override the default settings. - public static AudioClip LoadAudio(string audioFilePath, -#if UNITY_2018_3_OR_NEWER - AudioType audioType, -#endif - ES3Settings settings) - { - if (settings.location != Location.File) - throw new InvalidOperationException("ES3.LoadAudio can only be used with the File save location"); - - if (Application.platform == RuntimePlatform.WebGLPlayer) - throw new InvalidOperationException("You cannot use ES3.LoadAudio with WebGL"); - - string extension = ES3IO.GetExtension(audioFilePath).ToLower(); - - if (extension == ".mp3" && (Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.OSXPlayer)) - throw new System.InvalidOperationException("You can only load Ogg, WAV, XM, IT, MOD or S3M on Unity Standalone"); - - if (extension == ".ogg" && (Application.platform == RuntimePlatform.IPhonePlayer - || Application.platform == RuntimePlatform.Android - || Application.platform == RuntimePlatform.WSAPlayerARM)) - throw new System.InvalidOperationException("You can only load MP3, WAV, XM, IT, MOD or S3M on Unity Standalone"); - - var newSettings = new ES3Settings(audioFilePath, settings); - -#if UNITY_2018_3_OR_NEWER - using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip("file://" + newSettings.FullPath, audioType)) - { - www.SendWebRequest(); - - while (!www.isDone) - { - // Wait for it to load. - } - - if (ES3WebClass.IsNetworkError(www)) - throw new System.Exception(www.error); - else - return DownloadHandlerAudioClip.GetContent(www); - } -#elif UNITY_2017_1_OR_NEWER - WWW www = new WWW(newSettings.FullPath); - - while(!www.isDone) - { - // Wait for it to load. - } - - if(!string.IsNullOrEmpty(www.error)) - throw new System.Exception(www.error); -#else - WWW www = new WWW("file://"+newSettings.FullPath); - - while(!www.isDone) - { - // Wait for it to load. - } - - if(!string.IsNullOrEmpty(www.error)) - throw new System.Exception(www.error); -#endif - -#if UNITY_2017_3_OR_NEWER && !UNITY_2018_3_OR_NEWER - return www.GetAudioClip(true); -#elif UNITY_5_6_OR_NEWER && !UNITY_2018_3_OR_NEWER - return WWWAudioExtensions.GetAudioClip(www); -#endif - } - - #endregion - - #region Serialize/Deserialize - - public static byte[] Serialize(T value, ES3Settings settings=null) - { - return Serialize(value, ES3TypeMgr.GetOrCreateES3Type(typeof(T)), settings); - } - - internal static byte[] Serialize(object value, ES3Types.ES3Type type, ES3Settings settings = null) - { - if (settings == null) settings = new ES3Settings(); - - using (var ms = new System.IO.MemoryStream()) - { - using (var stream = ES3Stream.CreateStream(ms, settings, ES3FileMode.Write)) - { - using (var baseWriter = ES3Writer.Create(stream, settings, false, false)) - { - // If T is object, use the value to get it's type. Otherwise, use T so that it works with inheritence. - //var type = typeof(T) != typeof(object) ? typeof(T) : (value == null ? typeof(T) : value.GetType()); - baseWriter.Write(value, type, settings.referenceMode); - } - - return ms.ToArray(); - } - } - } - - public static T Deserialize(byte[] bytes, ES3Settings settings=null) - { - return (T)Deserialize(ES3TypeMgr.GetOrCreateES3Type(typeof(T)), bytes, settings); - } - - internal static object Deserialize(ES3Types.ES3Type type, byte[] bytes, ES3Settings settings = null) - { - if (settings == null) - settings = new ES3Settings(); - - using (var ms = new System.IO.MemoryStream(bytes, false)) - using (var stream = ES3Stream.CreateStream(ms, settings, ES3FileMode.Read)) - using (var reader = ES3Reader.Create(stream, settings, false)) - return reader.Read(type); - } - - public static void DeserializeInto(byte[] bytes, T obj, ES3Settings settings = null) where T : class - { - DeserializeInto(ES3TypeMgr.GetOrCreateES3Type(typeof(T)), bytes, obj, settings); - } - - public static void DeserializeInto(ES3Types.ES3Type type, byte[] bytes, T obj, ES3Settings settings = null) where T : class - { - if (settings == null) - settings = new ES3Settings(); - - using (var ms = new System.IO.MemoryStream(bytes, false)) - using (var reader = ES3Reader.Create(ms, settings, false)) - reader.ReadInto(obj, type); - } - - #endregion - - #region Other ES3 Methods - -#if !DISABLE_ENCRYPTION - - public static byte[] EncryptBytes(byte[] bytes, string password=null) - { - if (string.IsNullOrEmpty(password)) - password = ES3Settings.defaultSettings.encryptionPassword; - return new AESEncryptionAlgorithm().Encrypt(bytes, password, ES3Settings.defaultSettings.bufferSize); - } - - public static byte[] DecryptBytes(byte[] bytes, string password=null) - { - if (string.IsNullOrEmpty(password)) - password = ES3Settings.defaultSettings.encryptionPassword; - return new AESEncryptionAlgorithm().Decrypt(bytes, password, ES3Settings.defaultSettings.bufferSize); - } - - public static string EncryptString(string str, string password=null) - { - return Convert.ToBase64String(EncryptBytes(ES3Settings.defaultSettings.encoding.GetBytes(str), password)); - } - - public static string DecryptString(string str, string password=null) - { - return ES3Settings.defaultSettings.encoding.GetString(DecryptBytes(Convert.FromBase64String(str), password)); - } - -#endif - - public static byte[] CompressBytes(byte[] bytes) - { - using (var ms = new System.IO.MemoryStream()) - { - var settings = new ES3Settings(); - settings.location = ES3.Location.InternalMS; - settings.compressionType = ES3.CompressionType.Gzip; - settings.encryptionType = EncryptionType.None; - - using (var stream = ES3Stream.CreateStream(ms, settings, ES3FileMode.Write)) - stream.Write(bytes, 0, bytes.Length); - - return ms.ToArray(); - } - } - - public static byte[] DecompressBytes(byte[] bytes) - { - using (var ms = new System.IO.MemoryStream(bytes)) - { - var settings = new ES3Settings(); - settings.location = ES3.Location.InternalMS; - settings.compressionType = ES3.CompressionType.Gzip; - settings.encryptionType = EncryptionType.None; - - using (var output = new System.IO.MemoryStream()) - { - using (var input = ES3Stream.CreateStream(ms, settings, ES3FileMode.Read)) - ES3Stream.CopyTo(input, output); - return output.ToArray(); - } - } - } - - public static string CompressString(string str) - { - return Convert.ToBase64String(CompressBytes(ES3Settings.defaultSettings.encoding.GetBytes(str))); - } - - public static string DecompressString(string str) - { - return ES3Settings.defaultSettings.encoding.GetString(DecompressBytes(Convert.FromBase64String(str))); - } - - /// Deletes the default file. - public static void DeleteFile() - { - DeleteFile(new ES3Settings()); - } - - /// Deletes the file at the given path using the default settings. - /// The relative or absolute path of the file we wish to delete. - public static void DeleteFile(string filePath) - { - DeleteFile(new ES3Settings(filePath)); - } - - /// Deletes the file at the given path using the settings provided. - /// The relative or absolute path of the file we wish to delete. - /// The settings we want to use to override the default settings. - public static void DeleteFile(string filePath, ES3Settings settings) - { - DeleteFile(new ES3Settings(filePath, settings)); - } - - /// Deletes the file specified by the ES3Settings object provided as a parameter. - /// The settings we want to use to override the default settings. - public static void DeleteFile(ES3Settings settings) - { - if (settings.location == Location.File) - ES3IO.DeleteFile(settings.FullPath); - else if (settings.location == Location.PlayerPrefs) - PlayerPrefs.DeleteKey(settings.FullPath); - else if (settings.location == Location.Cache) - ES3File.RemoveCachedFile(settings); - else if (settings.location == Location.Resources) - throw new System.NotSupportedException("Deleting files from Resources is not possible."); - } - - /// Copies a file from one path to another. - /// The relative or absolute path of the file we want to copy. - /// The relative or absolute path of the copy we want to create. - public static void CopyFile(string oldFilePath, string newFilePath) - { - CopyFile(new ES3Settings(oldFilePath), new ES3Settings(newFilePath)); - } - - /// Copies a file from one location to another, using the ES3Settings provided to override any default settings. - /// The relative or absolute path of the file we want to copy. - /// The relative or absolute path of the copy we want to create. - /// The settings we want to use when copying the old file. - /// The settings we want to use when creating the new file. - public static void CopyFile(string oldFilePath, string newFilePath, ES3Settings oldSettings, ES3Settings newSettings) - { - CopyFile(new ES3Settings(oldFilePath, oldSettings), new ES3Settings(newFilePath, newSettings)); - } - - /// Copies a file from one location to another, using the ES3Settings provided to determine the locations. - /// The settings we want to use when copying the old file. - /// The settings we want to use when creating the new file. - public static void CopyFile(ES3Settings oldSettings, ES3Settings newSettings) - { - if (oldSettings.location != newSettings.location) - throw new InvalidOperationException("Cannot copy file from " + oldSettings.location + " to " + newSettings.location + ". Location must be the same for both source and destination."); - - if (oldSettings.location == Location.File) - { - if (ES3IO.FileExists(oldSettings.FullPath)) - { - // Create the new directory if it doesn't exist. - string newDirectory = ES3IO.GetDirectoryPath(newSettings.FullPath); - if (!ES3IO.DirectoryExists(newDirectory)) - ES3IO.CreateDirectory(newDirectory); - // Otherwise delete the existing file so that we can overwrite it. - else - ES3IO.DeleteFile(newSettings.FullPath); - ES3IO.CopyFile(oldSettings.FullPath, newSettings.FullPath); - } - } - else if (oldSettings.location == Location.PlayerPrefs) - { - PlayerPrefs.SetString(newSettings.FullPath, PlayerPrefs.GetString(oldSettings.FullPath)); - } - else if (oldSettings.location == Location.Cache) - { - ES3File.CopyCachedFile(oldSettings, newSettings); - } - else if (oldSettings.location == Location.Resources) - throw new System.NotSupportedException("Modifying files from Resources is not allowed."); - } - - /// Renames a file. - /// The relative or absolute path of the file we want to rename. - /// The relative or absolute path we want to rename the file to. - public static void RenameFile(string oldFilePath, string newFilePath) - { - RenameFile(new ES3Settings(oldFilePath), new ES3Settings(newFilePath)); - } - - /// Renames a file. - /// The relative or absolute path of the file we want to rename. - /// The relative or absolute path we want to rename the file to. - /// The settings for the file we want to rename. - /// The settings for the file we want our source file to be renamed to. - public static void RenameFile(string oldFilePath, string newFilePath, ES3Settings oldSettings, ES3Settings newSettings) - { - RenameFile(new ES3Settings(oldFilePath, oldSettings), new ES3Settings(newFilePath, newSettings)); - } - - /// Renames a file. - /// The settings for the file we want to rename. - /// The settings for the file we want our source file to be renamed to. - public static void RenameFile(ES3Settings oldSettings, ES3Settings newSettings) - { - if (oldSettings.location != newSettings.location) - throw new InvalidOperationException("Cannot rename file in " + oldSettings.location + " to " + newSettings.location + ". Location must be the same for both source and destination."); - - if (oldSettings.location == Location.File) - { - if (ES3IO.FileExists(oldSettings.FullPath)) - { - ES3IO.DeleteFile(newSettings.FullPath); - ES3IO.MoveFile(oldSettings.FullPath, newSettings.FullPath); - } - } - else if (oldSettings.location == Location.PlayerPrefs) - { - PlayerPrefs.SetString(newSettings.FullPath, PlayerPrefs.GetString(oldSettings.FullPath)); - PlayerPrefs.DeleteKey(oldSettings.FullPath); - } - else if (oldSettings.location == Location.Cache) - { - ES3File.CopyCachedFile(oldSettings, newSettings); - ES3File.RemoveCachedFile(oldSettings); - } - else if (oldSettings.location == Location.Resources) - throw new System.NotSupportedException("Modifying files from Resources is not allowed."); - } - - /// Copies a file from one path to another. - /// The relative or absolute path of the directory we want to copy. - /// The relative or absolute path of the copy we want to create. - public static void CopyDirectory(string oldDirectoryPath, string newDirectoryPath) - { - CopyDirectory(new ES3Settings(oldDirectoryPath), new ES3Settings(newDirectoryPath)); - } - - /// Copies a file from one location to another, using the ES3Settings provided to override any default settings. - /// The relative or absolute path of the directory we want to copy. - /// The relative or absolute path of the copy we want to create. - /// The settings we want to use when copying the old directory. - /// The settings we want to use when creating the new directory. - public static void CopyDirectory(string oldDirectoryPath, string newDirectoryPath, ES3Settings oldSettings, ES3Settings newSettings) - { - CopyDirectory(new ES3Settings(oldDirectoryPath, oldSettings), new ES3Settings(newDirectoryPath, newSettings)); - } - - /// Copies a file from one location to another, using the ES3Settings provided to determine the locations. - /// The settings we want to use when copying the old file. - /// The settings we want to use when creating the new file. - public static void CopyDirectory(ES3Settings oldSettings, ES3Settings newSettings) - { - if (oldSettings.location != Location.File) - throw new InvalidOperationException("ES3.CopyDirectory can only be used when the save location is 'File'"); - - if (!DirectoryExists(oldSettings)) - throw new System.IO.DirectoryNotFoundException("Directory " + oldSettings.FullPath + " not found"); - - if (!DirectoryExists(newSettings)) - ES3IO.CreateDirectory(newSettings.FullPath); - - foreach (var fileName in ES3.GetFiles(oldSettings)) - CopyFile(ES3IO.CombinePathAndFilename(oldSettings.path, fileName), - ES3IO.CombinePathAndFilename(newSettings.path, fileName)); - - foreach (var directoryName in GetDirectories(oldSettings)) - CopyDirectory(ES3IO.CombinePathAndFilename(oldSettings.path, directoryName), - ES3IO.CombinePathAndFilename(newSettings.path, directoryName)); - } - - /// Renames a file. - /// The relative or absolute path of the file we want to rename. - /// The relative or absolute path we want to rename the file to. - public static void RenameDirectory(string oldDirectoryPath, string newDirectoryPath) - { - RenameDirectory(new ES3Settings(oldDirectoryPath), new ES3Settings(newDirectoryPath)); - } - - /// Renames a file. - /// The relative or absolute path of the file we want to rename. - /// The relative or absolute path we want to rename the file to. - /// The settings for the file we want to rename. - /// The settings for the file we want our source file to be renamed to. - public static void RenameDirectory(string oldDirectoryPath, string newDirectoryPath, ES3Settings oldSettings, ES3Settings newSettings) - { - RenameDirectory(new ES3Settings(oldDirectoryPath, oldSettings), new ES3Settings(newDirectoryPath, newSettings)); - } - - /// Renames a file. - /// The settings for the file we want to rename. - /// The settings for the file we want our source file to be renamed to. - public static void RenameDirectory(ES3Settings oldSettings, ES3Settings newSettings) - { - if (oldSettings.location == Location.File) - { - if (ES3IO.DirectoryExists(oldSettings.FullPath)) - { - ES3IO.DeleteDirectory(newSettings.FullPath); - ES3IO.MoveDirectory(oldSettings.FullPath, newSettings.FullPath); - } - } - else if (oldSettings.location == Location.PlayerPrefs || oldSettings.location == Location.Cache) - throw new System.NotSupportedException("Directories cannot be renamed when saving to Cache, PlayerPrefs, tvOS or using WebGL."); - else if (oldSettings.location == Location.Resources) - throw new System.NotSupportedException("Modifying files from Resources is not allowed."); - } - - /// Deletes the directory at the given path using the settings provided. - /// The relative or absolute path of the folder we wish to delete. - public static void DeleteDirectory(string directoryPath) - { - DeleteDirectory(new ES3Settings(directoryPath)); - } - - /// Deletes the directory at the given path using the settings provided. - /// The relative or absolute path of the folder we wish to delete. - /// The settings we want to use to override the default settings. - public static void DeleteDirectory(string directoryPath, ES3Settings settings) - { - DeleteDirectory(new ES3Settings(directoryPath, settings)); - } - - /// Deletes the directory at the given path using the settings provided. - /// The settings we want to use to override the default settings. - public static void DeleteDirectory(ES3Settings settings) - { - if (settings.location == Location.File) - ES3IO.DeleteDirectory(settings.FullPath); - else if (settings.location == Location.PlayerPrefs || settings.location == Location.Cache) - throw new System.NotSupportedException("Deleting Directories using Cache or PlayerPrefs is not supported."); - else if (settings.location == Location.Resources) - throw new System.NotSupportedException("Deleting directories from Resources is not allowed."); - } - - /// Deletes a key in the default file. - /// The key we want to delete. - public static void DeleteKey(string key) - { - DeleteKey(key, new ES3Settings()); - } - - public static void DeleteKey(string key, string filePath) - { - DeleteKey(key, new ES3Settings(filePath)); - } - - /// Deletes a key in the file specified. - /// The key we want to delete. - /// The relative or absolute path of the file we want to delete the key from. - /// The settings we want to use to override the default settings. - public static void DeleteKey(string key, string filePath, ES3Settings settings) - { - DeleteKey(key, new ES3Settings(filePath, settings)); - } - - /// Deletes a key in the file specified by the ES3Settings object. - /// The key we want to delete. - /// The settings we want to use to override the default settings. - public static void DeleteKey(string key, ES3Settings settings) - { - if (settings.location == Location.Resources) - throw new System.NotSupportedException("Modifying files in Resources is not allowed."); - else if (settings.location == Location.Cache) - ES3File.DeleteKey(key, settings); - else if (ES3.FileExists(settings)) - { - using (var writer = ES3Writer.Create(settings)) - { - writer.MarkKeyForDeletion(key); - writer.Save(); - } - } - } - - /// Checks whether a key exists in the default file. - /// The key we want to check the existence of. - /// True if the key exists, otherwise False. - public static bool KeyExists(string key) - { - return KeyExists(key, new ES3Settings()); - } - - /// Checks whether a key exists in the specified file. - /// The key we want to check the existence of. - /// The relative or absolute path of the file we want to search. - /// True if the key exists, otherwise False. - public static bool KeyExists(string key, string filePath) - { - return KeyExists(key, new ES3Settings(filePath)); - } - - /// Checks whether a key exists in the default file. - /// The key we want to check the existence of. - /// The relative or absolute path of the file we want to search. - /// The settings we want to use to override the default settings. - /// True if the key exists, otherwise False. - public static bool KeyExists(string key, string filePath, ES3Settings settings) - { - return KeyExists(key, new ES3Settings(filePath, settings)); - } - - /// Checks whether a key exists in a file. - /// The key we want to check the existence of. - /// The settings we want to use to override the default settings. - /// True if the file exists, otherwise False. - public static bool KeyExists(string key, ES3Settings settings) - { - if (settings.location == Location.Cache) - return ES3File.KeyExists(key, settings); - - using (var reader = ES3Reader.Create(settings)) - { - if (reader == null) - return false; - return reader.Goto(key); - } - } - - /// Checks whether the default file exists. - /// The relative or absolute path of the file we want to check the existence of. - /// True if the file exists, otherwise False. - public static bool FileExists() - { - return FileExists(new ES3Settings()); - } - - /// Checks whether a file exists. - /// The relative or absolute path of the file we want to check the existence of. - /// True if the file exists, otherwise False. - public static bool FileExists(string filePath) - { - return FileExists(new ES3Settings(filePath)); - } - - /// Checks whether a file exists. - /// The relative or absolute path of the file we want to check the existence of. - /// The settings we want to use to override the default settings. - /// True if the file exists, otherwise False. - public static bool FileExists(string filePath, ES3Settings settings) - { - return FileExists(new ES3Settings(filePath, settings)); - } - - /// Checks whether a file exists. - /// The settings we want to use to override the default settings. - /// True if the file exists, otherwise False. - public static bool FileExists(ES3Settings settings) - { - if (settings.location == Location.File) - return ES3IO.FileExists(settings.FullPath); - else if (settings.location == Location.PlayerPrefs) - return PlayerPrefs.HasKey(settings.FullPath); - else if (settings.location == Location.Cache) - return ES3File.FileExists(settings); - else if (settings.location == Location.Resources) - return Resources.Load(settings.FullPath) != null; - return false; - } - - /// Checks whether a folder exists. - /// The relative or absolute path of the folder we want to check the existence of. - /// True if the folder exists, otherwise False. - public static bool DirectoryExists(string folderPath) - { - return DirectoryExists(new ES3Settings(folderPath)); - } - - /// Checks whether a file exists. - /// The relative or absolute path of the folder we want to check the existence of. - /// The settings we want to use to override the default settings. - /// True if the folder exists, otherwise False. - - public static bool DirectoryExists(string folderPath, ES3Settings settings) - { - return DirectoryExists(new ES3Settings(folderPath, settings)); - } - - /// Checks whether a folder exists. - /// The settings we want to use to override the default settings. - /// True if the folder exists, otherwise False. - public static bool DirectoryExists(ES3Settings settings) - { - if (settings.location == Location.File) - return ES3IO.DirectoryExists(settings.FullPath); - else if (settings.location == Location.PlayerPrefs || settings.location == Location.Cache) - throw new System.NotSupportedException("Directories are not supported for the Cache and PlayerPrefs location."); - else if (settings.location == Location.Resources) - throw new System.NotSupportedException("Checking existence of folder in Resources not supported."); - return false; - } - - /// Gets an array of all of the key names in the default file. - public static string[] GetKeys() - { - return GetKeys(new ES3Settings()); - } - - /// Gets an array of all of the key names in a file. - /// The relative or absolute path of the file we want to get the key names from. - public static string[] GetKeys(string filePath) - { - return GetKeys(new ES3Settings(filePath)); - } - - /// Gets an array of all of the key names in a file. - /// The relative or absolute path of the file we want to get the key names from. - /// The settings we want to use to override the default settings. - public static string[] GetKeys(string filePath, ES3Settings settings) - { - return GetKeys(new ES3Settings(filePath, settings)); - } - - /// Gets an array of all of the key names in a file. - /// The settings we want to use to override the default settings. - public static string[] GetKeys(ES3Settings settings) - { - - if (settings.location == Location.Cache) - return ES3File.GetKeys(settings); - - var keys = new List(); - using (var reader = ES3Reader.Create(settings)) - { - if (reader == null) - throw new System.IO.FileNotFoundException("Could not get keys from file "+settings.FullPath+" as file does not exist"); - - foreach (string key in reader.Properties) - { - keys.Add(key); - reader.Skip(); - } - } - return keys.ToArray(); - } - - /// Gets an array of all of the file names in a directory. - public static string[] GetFiles() - { - var settings = new ES3Settings(); - if (settings.location == ES3.Location.File) - { - if (settings.directory == ES3.Directory.PersistentDataPath) - settings.path = ES3IO.persistentDataPath; - else - settings.path = ES3IO.dataPath; - } - return GetFiles(new ES3Settings()); - } - - /// Gets an array of all of the file names in a directory. - /// The relative or absolute path of the directory we want to get the file names from. - public static string[] GetFiles(string directoryPath) - { - return GetFiles(new ES3Settings(directoryPath)); - } - - /// Gets an array of all of the file names in a directory. - /// The relative or absolute path of the directory we want to get the file names from. - /// The settings we want to use to override the default settings. - public static string[] GetFiles(string directoryPath, ES3Settings settings) - { - return GetFiles(new ES3Settings(directoryPath, settings)); - } - - /// Gets an array of all of the file names in a directory. - /// The settings we want to use to override the default settings. - public static string[] GetFiles(ES3Settings settings) - { - if (settings.location == Location.Cache) - return ES3File.GetFiles(); - else if (settings.location != ES3.Location.File) - throw new System.NotSupportedException("ES3.GetFiles can only be used when the location is set to File or Cache."); - return ES3IO.GetFiles(settings.FullPath, false); - } - - /// Gets an array of all of the sub-directory names in a directory. - public static string[] GetDirectories() - { - return GetDirectories(new ES3Settings()); - } - - /// Gets an array of all of the sub-directory names in a directory. - /// The relative or absolute path of the directory we want to get the sub-directory names from. - public static string[] GetDirectories(string directoryPath) - { - return GetDirectories(new ES3Settings(directoryPath)); - } - - /// Gets an array of all of the sub-directory names in a directory. - /// The relative or absolute path of the directory we want to get the sub-directory names from. - /// The settings we want to use to override the default settings. - public static string[] GetDirectories(string directoryPath, ES3Settings settings) - { - return GetDirectories(new ES3Settings(directoryPath, settings)); - } - - /// Gets an array of all of the sub-directory names in a directory. - /// The settings we want to use to override the default settings. - public static string[] GetDirectories(ES3Settings settings) - { - if (settings.location != ES3.Location.File) - throw new System.NotSupportedException("ES3.GetDirectories can only be used when the location is set to File."); - return ES3IO.GetDirectories(settings.FullPath, false); - } - - /// Creates a backup of the default file . - /// A backup is created by copying the file and giving it a .bak extension. - /// If a backup already exists it will be overwritten, so you will need to ensure that the old backup will not be required before calling this method. - public static void CreateBackup() - { - CreateBackup(new ES3Settings()); - } - - /// Creates a backup of a file. - /// A backup is created by copying the file and giving it a .bak extension. - /// If a backup already exists it will be overwritten, so you will need to ensure that the old backup will not be required before calling this method. - /// The relative or absolute path of the file we wish to create a backup of. - public static void CreateBackup(string filePath) - { - CreateBackup(new ES3Settings(filePath)); - } - - /// Creates a backup of a file. - /// A backup is created by copying the file and giving it a .bak extension. - /// If a backup already exists it will be overwritten, so you will need to ensure that the old backup will not be required before calling this method. - /// The relative or absolute path of the file we wish to create a backup of. - /// The settings we want to use to override the default settings. - public static void CreateBackup(string filePath, ES3Settings settings) - { - CreateBackup(new ES3Settings(filePath, settings)); - } - - /// Creates a backup of a file. - /// A backup is created by copying the file and giving it a .bak extension. - /// If a backup already exists it will be overwritten, so you will need to ensure that the old backup will not be required before calling this method. - /// The settings we want to use to override the default settings. - public static void CreateBackup(ES3Settings settings) - { - var backupSettings = new ES3Settings(settings.path + ES3IO.backupFileSuffix, settings); - ES3.CopyFile(settings, backupSettings); - } - - /// Restores a backup of a file. - /// The relative or absolute path of the file we wish to restore the backup of. - /// True if a backup was restored, or False if no backup could be found. - public static bool RestoreBackup(string filePath) - { - return RestoreBackup(new ES3Settings(filePath)); - } - - /// Restores a backup of a file. - /// The relative or absolute path of the file we wish to restore the backup of. - /// The settings we want to use to override the default settings. - /// True if a backup was restored, or False if no backup could be found. - public static bool RestoreBackup(string filePath, ES3Settings settings) - { - return RestoreBackup(new ES3Settings(filePath, settings)); - } - - /// Restores a backup of a file. - /// The settings we want to use to override the default settings. - /// True if a backup was restored, or False if no backup could be found. - public static bool RestoreBackup(ES3Settings settings) - { - var backupSettings = new ES3Settings(settings.path + ES3IO.backupFileSuffix, settings); - - if (!FileExists(backupSettings)) - return false; - - ES3.RenameFile(backupSettings, settings); - - return true; - } - - public static DateTime GetTimestamp() - { - return GetTimestamp(new ES3Settings()); - } - - public static DateTime GetTimestamp(string filePath) - { - return GetTimestamp(new ES3Settings(filePath)); - } - - public static DateTime GetTimestamp(string filePath, ES3Settings settings) - { - return GetTimestamp(new ES3Settings(filePath, settings)); - } - - /// Gets the date and time the file was last updated, in the UTC timezone. - /// The settings we want to use to override the default settings. - /// A DateTime object represeting the UTC date and time the file was last updated. - public static DateTime GetTimestamp(ES3Settings settings) - { - if (settings.location == Location.File) - return ES3IO.GetTimestamp(settings.FullPath); - else if (settings.location == Location.PlayerPrefs) - return new DateTime(long.Parse(PlayerPrefs.GetString("timestamp_" + settings.FullPath, "0")), DateTimeKind.Utc); - else if (settings.location == Location.Cache) - return ES3File.GetTimestamp(settings); - else - return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - } - - /// Stores the default cached file to persistent storage. - /// A backup is created by copying the file and giving it a .bak extension. - /// If a backup already exists it will be overwritten, so you will need to ensure that the old backup will not be required before calling this method. - public static void StoreCachedFile() - { - ES3File.Store(); - } - - /// Stores a cached file to persistent storage. - /// The filename or path of the file we want to store the cached file to. - public static void StoreCachedFile(string filePath) - { - StoreCachedFile(new ES3Settings(filePath)); - } - - /// Creates a backup of a file. - /// The filename or path of the file we want to store the cached file to. - /// The settings of the file we want to store to. - public static void StoreCachedFile(string filePath, ES3Settings settings) - { - StoreCachedFile(new ES3Settings(filePath, settings)); - } - - /// Stores a cached file to persistent storage. - /// The settings of the file we want to store to. - public static void StoreCachedFile(ES3Settings settings) - { - ES3File.Store(settings); - } - - /// Loads the default file in persistent storage into the cache. - /// A backup is created by copying the file and giving it a .bak extension. - /// If a backup already exists it will be overwritten, so you will need to ensure that the old backup will not be required before calling this method. - public static void CacheFile() - { - CacheFile(new ES3Settings()); - } - - /// Loads a file from persistent storage into the cache. - /// The filename or path of the file we want to store the cached file to. - public static void CacheFile(string filePath) - { - CacheFile(new ES3Settings(filePath)); - } - - /// Loads a file from persistent storage into the cache. - /// The filename or path of the file we want to store the cached file to. - /// The settings of the file we want to cache. - public static void CacheFile(string filePath, ES3Settings settings) - { - CacheFile(new ES3Settings(filePath, settings)); - } - - /// Loads a file from persistent storage into the cache. - /// The settings of the file we want to cache. - public static void CacheFile(ES3Settings settings) - { - ES3File.CacheFile(settings); - } - - /// Initialises Easy Save. This happens automatically when any ES3 methods are called, but is useful if you want to perform initialisation before calling an ES3 method. - public static void Init() - { - var settings = ES3Settings.defaultSettings; - var pdp = ES3IO.persistentDataPath; // Call this to initialise ES3IO for threading purposes. - ES3TypeMgr.Init(); - } - - #endregion -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3.cs.meta deleted file mode 100644 index e5d6900..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ca1cdcde6d39a44b39ee5f5b86ddfd73 -timeCreated: 1499764822 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs deleted file mode 100644 index b7ef8dc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs +++ /dev/null @@ -1,208 +0,0 @@ -#if !DISABLE_ENCRYPTION -using System.IO; -using System.Security.Cryptography; -#if NETFX_CORE -using Windows.Security.Cryptography; -using Windows.Security.Cryptography.Core; -using Windows.Storage.Streams; -using System.Runtime.InteropServices.WindowsRuntime; -#endif - -namespace ES3Internal -{ - public static class ES3Hash - { -#if NETFX_CORE - public static string SHA1Hash(string input) - { - return System.Text.Encoding.UTF8.GetString(UnityEngine.Windows.Crypto.ComputeSHA1Hash(System.Text.Encoding.UTF8.GetBytes(input))); - } -#else - public static string SHA1Hash(string input) - { - using (SHA1Managed sha1 = new SHA1Managed()) - return System.Text.Encoding.UTF8.GetString(sha1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(input))); - } -#endif - } - - public abstract class EncryptionAlgorithm - { - public abstract byte[] Encrypt(byte[] bytes, string password, int bufferSize); - public abstract byte[] Decrypt(byte[] bytes, string password, int bufferSize); - public abstract void Encrypt(Stream input, Stream output, string password, int bufferSize); - public abstract void Decrypt(Stream input, Stream output, string password, int bufferSize); - - protected static void CopyStream(Stream input, Stream output, int bufferSize) - { - byte[] buffer = new byte[bufferSize]; - int read; - while ((read = input.Read(buffer, 0, bufferSize)) > 0) - output.Write(buffer, 0, read); - } - } - - public class AESEncryptionAlgorithm : EncryptionAlgorithm - { - private const int ivSize = 16; - private const int keySize = 16; - private const int pwIterations = 100; - - public override byte[] Encrypt(byte[] bytes, string password, int bufferSize) - { - using (var input = new MemoryStream(bytes)) - { - using (var output = new MemoryStream()) - { - Encrypt(input, output, password, bufferSize); - return output.ToArray(); - } - } - } - - public override byte[] Decrypt(byte[] bytes, string password, int bufferSize) - { - using (var input = new MemoryStream(bytes)) - { - using (var output = new MemoryStream()) - { - Decrypt(input, output, password, bufferSize); - return output.ToArray(); - } - } - } - - public override void Encrypt(Stream input, Stream output, string password, int bufferSize) - { - input.Position = 0; - -#if NETFX_CORE - // Generate an IV and write it to the output. - var iv = CryptographicBuffer.GenerateRandom(ivSize); - output.Write(iv.ToArray(), 0, ivSize); - - var pwBuffer = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf8); - var keyDerivationProvider = KeyDerivationAlgorithmProvider.OpenAlgorithm("PBKDF2_SHA1"); - KeyDerivationParameters pbkdf2Parms = KeyDerivationParameters.BuildForPbkdf2(iv, pwIterations); - // Create a key based on original key and derivation parmaters - CryptographicKey keyOriginal = keyDerivationProvider.CreateKey(pwBuffer); - IBuffer keyMaterial = CryptographicEngine.DeriveKeyMaterial(keyOriginal, pbkdf2Parms, keySize); - - var provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7); - var key = provider.CreateSymmetricKey(keyMaterial); - - // Get the input stream as an IBuffer. - IBuffer msg; - using(var ms = new MemoryStream()) - { - input.CopyTo(ms); - msg = ms.ToArray().AsBuffer(); - } - - var buffEncrypt = CryptographicEngine.Encrypt(key, msg, iv); - - - output.Write(buffEncrypt.ToArray(), 0, (int)buffEncrypt.Length); - output.Dispose(); -#else - using (var alg = Aes.Create()) - { - alg.Mode = CipherMode.CBC; - alg.Padding = PaddingMode.PKCS7; - alg.GenerateIV(); - var key = new Rfc2898DeriveBytes(password, alg.IV, pwIterations); - alg.Key = key.GetBytes(keySize); - // Write the IV to the output stream. - output.Write(alg.IV, 0, ivSize); - using(var encryptor = alg.CreateEncryptor()) - using(var cs = new CryptoStream(output, encryptor, CryptoStreamMode.Write)) - CopyStream(input, cs, bufferSize); - } -#endif - } - - public override void Decrypt(Stream input, Stream output, string password, int bufferSize) - { -#if NETFX_CORE - var thisIV = new byte[ivSize]; - input.Read(thisIV, 0, ivSize); - var iv = thisIV.AsBuffer(); - - var pwBuffer = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf8); - - var keyDerivationProvider = KeyDerivationAlgorithmProvider.OpenAlgorithm("PBKDF2_SHA1"); - KeyDerivationParameters pbkdf2Parms = KeyDerivationParameters.BuildForPbkdf2(iv, pwIterations); - // Create a key based on original key and derivation parameters. - CryptographicKey keyOriginal = keyDerivationProvider.CreateKey(pwBuffer); - IBuffer keyMaterial = CryptographicEngine.DeriveKeyMaterial(keyOriginal, pbkdf2Parms, keySize); - - var provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7); - var key = provider.CreateSymmetricKey(keyMaterial); - - // Get the input stream as an IBuffer. - IBuffer msg; - using(var ms = new MemoryStream()) - { - input.CopyTo(ms); - msg = ms.ToArray().AsBuffer(); - } - - var buffDecrypt = CryptographicEngine.Decrypt(key, msg, iv); - - output.Write(buffDecrypt.ToArray(), 0, (int)buffDecrypt.Length); -#else - using (var alg = Aes.Create()) - { - var thisIV = new byte[ivSize]; - input.Read(thisIV, 0, ivSize); - alg.IV = thisIV; - - var key = new Rfc2898DeriveBytes(password, alg.IV, pwIterations); - alg.Key = key.GetBytes(keySize); - - using(var decryptor = alg.CreateDecryptor()) - using(var cryptoStream = new CryptoStream(input, decryptor, CryptoStreamMode.Read)) - CopyStream(cryptoStream, output, bufferSize); - - } -#endif - output.Position = 0; - } - } - - public class UnbufferedCryptoStream : MemoryStream - { - private readonly Stream stream; - private readonly bool isReadStream; - private string password; - private int bufferSize; - private EncryptionAlgorithm alg; - private bool disposed = false; - - public UnbufferedCryptoStream(Stream stream, bool isReadStream, string password, int bufferSize, EncryptionAlgorithm alg) : base() - { - this.stream = stream; - this.isReadStream = isReadStream; - this.password = password; - this.bufferSize = bufferSize; - this.alg = alg; - - - if (isReadStream) - alg.Decrypt(stream, this, password, bufferSize); - } - - protected override void Dispose(bool disposing) - { - if (disposed) - return; - disposed = true; - - if (!isReadStream) - alg.Encrypt(this, stream, password, bufferSize); - stream.Dispose(); - base.Dispose(disposing); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs.meta deleted file mode 100644 index 5d39d6d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d2b3b6335276042569261b3e6bed694e -timeCreated: 1519132297 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3File.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3File.cs deleted file mode 100644 index e1db729..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3File.cs +++ /dev/null @@ -1,524 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System; -using ES3Types; -using UnityEngine; -using ES3Internal; -using System.Linq; - -/// Represents a cached file which can be saved to and loaded from, and commited to storage when necessary. -public class ES3File -{ - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public static Dictionary cachedFiles = new Dictionary(); - - - - - public ES3Settings settings; - private Dictionary cache = new Dictionary(); - private bool syncWithFile = false; - private DateTime timestamp = DateTime.UtcNow; - - /// Creates a new ES3File and loads the default file into the ES3File if there is data to load. - public ES3File() : this(new ES3Settings(), true) { } - - /// Creates a new ES3File and loads the specified file into the ES3File if there is data to load. - /// The relative or absolute path of the file in storage our ES3File is associated with. - public ES3File(string filePath) : this(new ES3Settings(filePath), true) { } - - /// Creates a new ES3File and loads the specified file into the ES3File if there is data to load. - /// The relative or absolute path of the file in storage our ES3File is associated with. - /// The settings we want to use to override the default settings. - public ES3File(string filePath, ES3Settings settings) : this(new ES3Settings(filePath, settings), true) { } - - /// Creates a new ES3File and loads the specified file into the ES3File if there is data to load. - /// The settings we want to use to override the default settings. - public ES3File(ES3Settings settings) : this(settings, true) { } - - /// Creates a new ES3File and only loads the default file into it if syncWithFile is set to true. - /// Whether we should sync this ES3File with the one in storage immediately after creating it. - public ES3File(bool syncWithFile) : this(new ES3Settings(), syncWithFile) { } - /// Creates a new ES3File and only loads the specified file into it if syncWithFile is set to true. - /// The relative or absolute path of the file in storage our ES3File is associated with. - /// Whether we should sync this ES3File with the one in storage immediately after creating it. - public ES3File(string filePath, bool syncWithFile) : this(new ES3Settings(filePath), syncWithFile) { } - /// Creates a new ES3File and only loads the specified file into it if syncWithFile is set to true. - /// The relative or absolute path of the file in storage our ES3File is associated with. - /// The settings we want to use to override the default settings. - /// Whether we should sync this ES3File with the one in storage immediately after creating it. - public ES3File(string filePath, ES3Settings settings, bool syncWithFile) : this(new ES3Settings(filePath, settings), syncWithFile) { } - - /// Creates a new ES3File and loads the specified file into the ES3File if there is data to load. - /// The settings we want to use to override the default settings. - /// Whether we should sync this ES3File with the one in storage immediately after creating it. - public ES3File(ES3Settings settings, bool syncWithFile) - { - this.settings = settings; - this.syncWithFile = syncWithFile; - if (syncWithFile) - { - // Type checking must be enabled when syncing. - var settingsWithTypeChecking = (ES3Settings)settings.Clone(); - settingsWithTypeChecking.typeChecking = true; - - using (var reader = ES3Reader.Create(settingsWithTypeChecking)) - { - if (reader == null) - return; - foreach (KeyValuePair kvp in reader.RawEnumerator) - cache[kvp.Key] = kvp.Value; - } - - timestamp = ES3.GetTimestamp(settingsWithTypeChecking); - } - } - - /// Creates a new ES3File and loads the bytes into the ES3File. Note the bytes must represent that of a file. - /// The bytes representing our file. - /// The settings we want to use to override the default settings. - /// Whether we should sync this ES3File with the one in storage immediately after creating it. - public ES3File(byte[] bytes, ES3Settings settings = null) - { - if (settings == null) - this.settings = new ES3Settings(); - else - this.settings = settings; - - syncWithFile = true; // This ensures that the file won't be merged, which would prevent deleted keys from being deleted. - - SaveRaw(bytes, settings); - } - - /// Synchronises this ES3File with a file in storage. - public void Sync() - { - Sync(this.settings); - } - - /// Synchronises this ES3File with a file in storage. - /// The relative or absolute path of the file in storage we want to synchronise with. - /// The settings we want to use to override the default settings. - public void Sync(string filePath, ES3Settings settings = null) - { - Sync(new ES3Settings(filePath, settings)); - } - - /// Synchronises this ES3File with a file in storage. - /// The settings we want to use to override the default settings. - public void Sync(ES3Settings settings = null) - { - if (settings == null) - settings = new ES3Settings(); - - if (cache.Count == 0) - { - ES3.DeleteFile(settings); - return; - } - - using (var baseWriter = ES3Writer.Create(settings, true, !syncWithFile, false)) - { - foreach (var kvp in cache) - { - // If we change the name of a type, the type may be null. - // In this case, use System.Object as the type. - Type type; - if (kvp.Value.type == null) - type = typeof(System.Object); - else - type = kvp.Value.type.type; - baseWriter.Write(kvp.Key, type, kvp.Value.bytes); - } - baseWriter.Save(!syncWithFile); - } - } - - /// Removes the data stored in this ES3File. The ES3File will be empty after calling this method. - public void Clear() - { - cache.Clear(); - } - - /// Returns an array of all of the key names in this ES3File. - public string[] GetKeys() - { - var keyCollection = cache.Keys; - var keys = new string[keyCollection.Count]; - keyCollection.CopyTo(keys, 0); - return keys; - } - - #region Save Methods - - /// Saves a value to a key in this ES3File. - /// The key we want to use to identify our value in the file. - /// The value we want to save. - public void Save(string key, T value) - { - var unencryptedSettings = (ES3Settings)settings.Clone(); - unencryptedSettings.encryptionType = ES3.EncryptionType.None; - unencryptedSettings.compressionType = ES3.CompressionType.None; - - // If T is object, use the value to get it's type. Otherwise, use T so that it works with inheritence. - Type type; - if (value == null) - type = typeof(T); - else - type = value.GetType(); - - ES3Type es3Type = ES3TypeMgr.GetOrCreateES3Type(type); - - cache[key] = new ES3Data(es3Type, ES3.Serialize(value, es3Type, unencryptedSettings)); - } - - /// Merges the data specified by the bytes parameter into this ES3File. - /// The bytes we want to merge with this ES3File. - /// The settings we want to use to override the default settings. - public void SaveRaw(byte[] bytes, ES3Settings settings = null) - { - if (settings == null) - settings = new ES3Settings(); - - // Type checking must be enabled when syncing. - var settingsWithTypeChecking = (ES3Settings)settings.Clone(); - settingsWithTypeChecking.typeChecking = true; - - using (var reader = ES3Reader.Create(bytes, settingsWithTypeChecking)) - { - if (reader == null) - return; - foreach (KeyValuePair kvp in reader.RawEnumerator) - cache[kvp.Key] = kvp.Value; - } - } - - /// Merges the data specified by the bytes parameter into this ES3File. - /// The bytes we want to merge with this ES3File. - /// The settings we want to use to override the default settings. - public void AppendRaw(byte[] bytes, ES3Settings settings = null) - { - if (settings == null) - settings = new ES3Settings(); - // AppendRaw just does the same thing as SaveRaw in ES3File. - SaveRaw(bytes, settings); - } - - #endregion - - #region Load Methods - - /* Standard load methods */ - - /// Loads the value from this ES3File with the given key. - /// The key which identifies the value we want to load. - public object Load(string key) - { - return Load(key); - } - - /// Loads the value from this ES3File with the given key. - /// The key which identifies the value we want to load. - /// The value we want to return if the key does not exist in this ES3File. - public object Load(string key, object defaultValue) - { - return Load(key, defaultValue); - } - - /// Loads the value from this ES3File with the given key. - /// The key which identifies the value we want to load. - public T Load(string key) - { - ES3Data es3Data; - - if (!cache.TryGetValue(key, out es3Data)) - throw new KeyNotFoundException("Key \"" + key + "\" was not found in this ES3File. Use Load(key, defaultValue) if you want to return a default value if the key does not exist."); - - var unencryptedSettings = (ES3Settings)this.settings.Clone(); - unencryptedSettings.encryptionType = ES3.EncryptionType.None; - unencryptedSettings.compressionType = ES3.CompressionType.None; - - // If we're loading a derived type using it's parent type, ensure that we use the ES3Type from the ES3Data. - if (typeof(T) != es3Data.type.type && ES3Reflection.IsAssignableFrom(typeof(T), es3Data.type.type)) - return (T)ES3.Deserialize(es3Data.type, es3Data.bytes, unencryptedSettings); - return ES3.Deserialize(es3Data.bytes, unencryptedSettings); - } - - /// Loads the value from this ES3File with the given key. - /// The key which identifies the value we want to load. - /// The value we want to return if the key does not exist in this ES3File. - public T Load(string key, T defaultValue) - { - ES3Data es3Data; - - if (!cache.TryGetValue(key, out es3Data)) - return defaultValue; - var unencryptedSettings = (ES3Settings)this.settings.Clone(); - unencryptedSettings.encryptionType = ES3.EncryptionType.None; - unencryptedSettings.compressionType = ES3.CompressionType.None; - - // If we're loading a derived type using it's parent type, ensure that we use the ES3Type from the ES3Data. - if (typeof(T) != es3Data.type.type && ES3Reflection.IsAssignableFrom(typeof(T), es3Data.type.type)) - return (T)ES3.Deserialize(es3Data.type, es3Data.bytes, unencryptedSettings); - return ES3.Deserialize(es3Data.bytes, unencryptedSettings); - } - - /// Loads the value from this ES3File with the given key into an existing object. - /// The key which identifies the value we want to load. - /// The object we want to load the value into. - public void LoadInto(string key, T obj) where T : class - { - ES3Data es3Data; - - if (!cache.TryGetValue(key, out es3Data)) - throw new KeyNotFoundException("Key \"" + key + "\" was not found in this ES3File. Use Load(key, defaultValue) if you want to return a default value if the key does not exist."); - - var unencryptedSettings = (ES3Settings)this.settings.Clone(); - unencryptedSettings.encryptionType = ES3.EncryptionType.None; - unencryptedSettings.compressionType = ES3.CompressionType.None; - - // If we're loading a derived type using it's parent type, ensure that we use the ES3Type from the ES3Data. - if (typeof(T) != es3Data.type.type && ES3Reflection.IsAssignableFrom(typeof(T), es3Data.type.type)) - ES3.DeserializeInto(es3Data.type, es3Data.bytes, obj, unencryptedSettings); - else - ES3.DeserializeInto(es3Data.bytes, obj, unencryptedSettings); - } - - #endregion - - #region Load Raw Methods - - /// Loads the ES3File as a raw, unencrypted, uncompressed byte array. - public byte[] LoadRawBytes() - { - var newSettings = (ES3Settings)settings.Clone(); - if (!newSettings.postprocessRawCachedData) - { - newSettings.encryptionType = ES3.EncryptionType.None; - newSettings.compressionType = ES3.CompressionType.None; - } - return GetBytes(newSettings); - } - - /// Loads the ES3File as a raw, unencrypted, uncompressed string, using the encoding defined in the ES3File's settings variable. - public string LoadRawString() - { - if (cache.Count == 0) - return ""; - return settings.encoding.GetString(LoadRawBytes()); - } - - /* - * Same as LoadRawString, except it will return an encrypted/compressed file if these are enabled. - */ - internal byte[] GetBytes(ES3Settings settings = null) - { - if (cache.Count == 0) - return new byte[0]; - - if (settings == null) - settings = this.settings; - - using (var ms = new System.IO.MemoryStream()) - { - var memorySettings = (ES3Settings)settings.Clone(); - memorySettings.location = ES3.Location.InternalMS; - // Ensure we return unencrypted bytes. - if (!memorySettings.postprocessRawCachedData) - { - memorySettings.encryptionType = ES3.EncryptionType.None; - memorySettings.compressionType = ES3.CompressionType.None; - } - - using (var baseWriter = ES3Writer.Create(ES3Stream.CreateStream(ms, memorySettings, ES3FileMode.Write), memorySettings, true, false)) - { - foreach (var kvp in cache) - baseWriter.Write(kvp.Key, kvp.Value.type.type, kvp.Value.bytes); - baseWriter.Save(false); - } - - return ms.ToArray(); - } - } - - #endregion - - #region Other ES3 Methods - - /// Deletes a key from this ES3File. - /// The key we want to delete. - public void DeleteKey(string key) - { - cache.Remove(key); - } - - /// Checks whether a key exists in this ES3File. - /// The key we want to check the existence of. - /// True if the key exists, otherwise False. - public bool KeyExists(string key) - { - return cache.ContainsKey(key); - } - - /// Gets the size of the cached data in bytes. - public int Size() - { - int size = 0; - foreach (var kvp in cache) - size += kvp.Value.bytes.Length; - return size; - } - - public Type GetKeyType(string key) - { - ES3Data es3data; - if (!cache.TryGetValue(key, out es3data)) - throw new KeyNotFoundException("Key \"" + key + "\" was not found in this ES3File. Use Load(key, defaultValue) if you want to return a default value if the key does not exist."); - - return es3data.type.type; - } - - #endregion - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static ES3File GetOrCreateCachedFile(ES3Settings settings) - { - ES3File cachedFile; - if (!cachedFiles.TryGetValue(settings.path, out cachedFile)) - { - cachedFile = new ES3File(settings, false); - cachedFiles.Add(settings.path, cachedFile); - cachedFile.syncWithFile = true; // This ensures that the file won't be merged, which would prevent deleted keys from being deleted. - } - // Settings might refer to the same file, but might have changed. - // To account for this, we update the settings of the ES3File each time we access it. - cachedFile.settings = settings; - return cachedFile; - } - - internal static void CacheFile(ES3Settings settings) - { - // If we're still using cached settings, set it to the default location. - if (settings.location == ES3.Location.Cache) - { - settings = (ES3Settings)settings.Clone(); - // If the default settings are also set to cache, assume ES3.Location.File. Otherwise, set it to the default location. - settings.location = ES3Settings.defaultSettings.location == ES3.Location.Cache ? ES3.Location.File : ES3Settings.defaultSettings.location; - } - - if (!ES3.FileExists(settings)) - return; - - // Disable compression and encryption when loading the raw bytes, and the ES3File constructor will expect encrypted/compressed bytes. - var loadSettings = (ES3Settings)settings.Clone(); - loadSettings.compressionType = ES3.CompressionType.None; - loadSettings.encryptionType = ES3.EncryptionType.None; - - cachedFiles[settings.path] = new ES3File(ES3.LoadRawBytes(loadSettings), settings); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static void Store(ES3Settings settings = null) - { - if (settings == null) - settings = new ES3Settings(ES3.Location.File); - // If we're still using cached settings, set it to the default location. - else if (settings.location == ES3.Location.Cache) - { - settings = (ES3Settings)settings.Clone(); - // If the default settings are also set to cache, assume ES3.Location.File. Otherwise, set it to the default location. - settings.location = ES3Settings.defaultSettings.location == ES3.Location.Cache ? ES3.Location.File : ES3Settings.defaultSettings.location; - } - - ES3File cachedFile; - if (!cachedFiles.TryGetValue(settings.path, out cachedFile)) - throw new FileNotFoundException("The file '" + settings.path + "' could not be stored because it could not be found in the cache."); - cachedFile.Sync(settings); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static void RemoveCachedFile(ES3Settings settings) - { - cachedFiles.Remove(settings.path); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static void CopyCachedFile(ES3Settings oldSettings, ES3Settings newSettings) - { - ES3File cachedFile; - if (!cachedFiles.TryGetValue(oldSettings.path, out cachedFile)) - throw new FileNotFoundException("The file '" + oldSettings.path + "' could not be copied because it could not be found in the cache."); - if (cachedFiles.ContainsKey(newSettings.path)) - throw new InvalidOperationException("Cannot copy file '" + oldSettings.path + "' to '" + newSettings.path + "' because '" + newSettings.path + "' already exists"); - - cachedFiles.Add(newSettings.path, (ES3File)cachedFile.MemberwiseClone()); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static void DeleteKey(string key, ES3Settings settings) - { - ES3File cachedFile; - if (cachedFiles.TryGetValue(settings.path, out cachedFile)) - cachedFile.DeleteKey(key); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static bool KeyExists(string key, ES3Settings settings) - { - ES3File cachedFile; - if (cachedFiles.TryGetValue(settings.path, out cachedFile)) - return cachedFile.KeyExists(key); - return false; - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static bool FileExists(ES3Settings settings) - { - return cachedFiles.ContainsKey(settings.path); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static string[] GetKeys(ES3Settings settings) - { - ES3File cachedFile; - if (!cachedFiles.TryGetValue(settings.path, out cachedFile)) - throw new FileNotFoundException("Could not get keys from the file '" + settings.path + "' because it could not be found in the cache."); - return cachedFile.cache.Keys.ToArray(); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal static string[] GetFiles() - { - return cachedFiles.Keys.ToArray(); - } - - internal static DateTime GetTimestamp(ES3Settings settings) - { - ES3File cachedFile; - if (!cachedFiles.TryGetValue(settings.path, out cachedFile)) - return new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); - return cachedFile.timestamp; - } -} - -namespace ES3Internal -{ - public struct ES3Data - { - public ES3Type type; - public byte[] bytes; - - public ES3Data(Type type, byte[] bytes) - { - this.type = type == null ? null : ES3TypeMgr.GetOrCreateES3Type(type); - this.bytes = bytes; - } - - public ES3Data(ES3Type type, byte[] bytes) - { - this.type = type; - this.bytes = bytes; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3File.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3File.cs.meta deleted file mode 100644 index 43f99ff..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3File.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2cd9723dc51904030be3c30362442d47 -timeCreated: 1499764821 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3GameObject.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3GameObject.cs deleted file mode 100644 index f340c7f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3GameObject.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -[ExecuteInEditMode] -public class ES3GameObject : MonoBehaviour -{ - public List components = new List(); - - /* Ensures that this Component is always last in the List to guarantee that it's loaded after any Components it references */ - private void Update() - { - if (Application.isPlaying) - return; - -#if UNITY_EDITOR - UnityEditorInternal.ComponentUtility.MoveComponentDown(this); -#endif - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3GameObject.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3GameObject.cs.meta deleted file mode 100644 index 25a8d9b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3GameObject.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7e2cacabe81aea8468e08e911727ee97 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3IO.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3IO.cs deleted file mode 100644 index de5ced3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3IO.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System.IO; -using System; -using UnityEngine; - -namespace ES3Internal -{ - public static class ES3IO - { -#if UNITY_SWITCH - internal static readonly string persistentDataPath = ""; - internal static readonly string dataPath = ""; -#else - internal static readonly string persistentDataPath = Application.persistentDataPath; - internal static readonly string dataPath = Application.dataPath; -#endif - - internal const string backupFileSuffix = ".bac"; - internal const string temporaryFileSuffix = ".tmp"; - - public enum ES3FileMode { Read, Write, Append } - - public static DateTime GetTimestamp(string filePath) - { - if (!FileExists(filePath)) - return new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); - return File.GetLastWriteTime(filePath).ToUniversalTime(); - } - - public static string GetExtension(string path) - { - return Path.GetExtension(path); - } - - public static void DeleteFile(string filePath) - { - if (FileExists(filePath)) - File.Delete(filePath); - } - - public static bool FileExists(string filePath) { return File.Exists(filePath); } - public static void MoveFile(string sourcePath, string destPath) { File.Move(sourcePath, destPath); } - public static void CopyFile(string sourcePath, string destPath) { File.Copy(sourcePath, destPath); } - - public static void MoveDirectory(string sourcePath, string destPath) { Directory.Move(sourcePath, destPath); } - public static void CreateDirectory(string directoryPath) { Directory.CreateDirectory(directoryPath); } - public static bool DirectoryExists(string directoryPath) { return Directory.Exists(directoryPath); } - - /* - * Given a path, it returns the directory that path points to. - * eg. "C:/myFolder/thisFolder/myFile.txt" will return "C:/myFolder/thisFolder". - */ - public static string GetDirectoryPath(string path, char seperator = '/') - { - //return Path.GetDirectoryName(path); - // Path.GetDirectoryName turns forward slashes to backslashes in some cases on Windows, which is why - // Substring is used instead. - char slashChar = UsesForwardSlash(path) ? '/' : '\\'; - - int slash = path.LastIndexOf(slashChar); - - // If this path ends in a slash it is assumed to already be a path to a Directory. - if (slash == path.Length - 1) - return path; - - // Ignore trailing slash if necessary. - if (slash == (path.Length - 1)) - slash = path.Substring(0, slash).LastIndexOf(slashChar); - if (slash == -1) - ES3Debug.LogError("Path provided is not a directory path as it contains no slashes."); - return path.Substring(0, slash); - } - - public static bool UsesForwardSlash(string path) - { - if (path.Contains("/")) - return true; - return false; - } - - // Takes a directory path and a file or directory name and combines them into a single path. - public static string CombinePathAndFilename(string directoryPath, string fileOrDirectoryName) - { - if (directoryPath[directoryPath.Length - 1] != '/' && directoryPath[directoryPath.Length - 1] != '\\') - directoryPath += '/'; - return directoryPath + fileOrDirectoryName; - } - - public static string[] GetDirectories(string path, bool getFullPaths = true) - { - var paths = Directory.GetDirectories(path); - for (int i = 0; i < paths.Length; i++) - { - if (!getFullPaths) - paths[i] = Path.GetFileName(paths[i]); - // GetDirectories sometimes returns backslashes, so we need to convert them to - // forward slashes. - paths[i].Replace("\\", "/"); - } - return paths; - } - - public static void DeleteDirectory(string directoryPath) - { - if (DirectoryExists(directoryPath)) - Directory.Delete(directoryPath, true); - } - - // Note: Paths not ending in a slash are assumed to be a path to a file. - // In this case the Directory containing the file will be searched. - public static string[] GetFiles(string path, bool getFullPaths = true) - { - // If this is pointing to a filename, get the path to it's directory. - var directoryPath = path.EndsWith("/") || path.EndsWith("\\") ? path : GetDirectoryPath(path); - - var paths = Directory.GetFiles(directoryPath); - if (!getFullPaths) - { - for (int i = 0; i < paths.Length; i++) - paths[i] = Path.GetFileName(paths[i]); - } - return paths; - } - - public static byte[] ReadAllBytes(string path) - { - return File.ReadAllBytes(path); - } - - public static void WriteAllBytes(string path, byte[] bytes) - { - File.WriteAllBytes(path, bytes); - } - - public static void CommitBackup(ES3Settings settings) - { - ES3Debug.Log("Committing backup for " + settings.path + " to storage location " + settings.location); - - var temporaryFilePath = settings.FullPath + temporaryFileSuffix; - - if (settings.location == ES3.Location.File) - { - var oldFileBackup = settings.FullPath + temporaryFileSuffix + ".bak"; - - // If there's existing save data to overwrite ... - if (FileExists(settings.FullPath)) - { - // Delete any old backups. - DeleteFile(oldFileBackup); - // Rename the old file so we can restore it if it fails. - CopyFile(settings.FullPath, oldFileBackup); - - try - { - // Delete the old file so that we can move it. - DeleteFile(settings.FullPath); - // Now rename the temporary file to the name of the save file. - MoveFile(temporaryFilePath, settings.FullPath); - } - catch (Exception e) - { - // If any exceptions occur, restore the original save file. - try { DeleteFile(settings.FullPath); } catch { } - MoveFile(oldFileBackup, settings.FullPath); - throw e; - } - - DeleteFile(oldFileBackup); - } - // Else just rename the temporary file to the main file. - else - MoveFile(temporaryFilePath, settings.FullPath); - } - else if (settings.location == ES3.Location.PlayerPrefs) - { - PlayerPrefs.SetString(settings.FullPath, PlayerPrefs.GetString(temporaryFilePath)); - PlayerPrefs.DeleteKey(temporaryFilePath); - PlayerPrefs.Save(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3IO.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3IO.cs.meta deleted file mode 100644 index 2d3c49c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3IO.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0e3e89d69f37e4fa9b4d60467722ac73 -timeCreated: 1499764821 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3InspectorInfo.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3InspectorInfo.cs deleted file mode 100644 index 61a94ae..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3InspectorInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -/* - * Displays an info message in the inspector. - * Only available in the Editor. - */ -public class ES3InspectorInfo : MonoBehaviour -{ - #if UNITY_EDITOR - public string message = ""; - - public void SetMessage(string message) - { - this.message = message; - } - #endif -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3InspectorInfo.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3InspectorInfo.cs.meta deleted file mode 100644 index c48e539..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3InspectorInfo.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8714d999c5ae749538494c1347e5a3ca -timeCreated: 1519132290 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Prefab.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3Prefab.cs deleted file mode 100644 index 9d56395..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Prefab.cs +++ /dev/null @@ -1,218 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using ES3Internal; -#if UNITY_EDITOR -using UnityEditor; -#endif - - -namespace ES3Internal -{ - public class ES3Prefab : MonoBehaviour - { - public long prefabId = GetNewRefID(); - /* - * We need to store references to all dependencies of the prefab because only supported scripts will be serialised. - * This means that although supported scripts have their dependencies added to the reference manager when we load the prefab, - * there will not be any dependencies in the reference manager for scripts which are not supported. So it will not be possible to save any reference to these. - */ - public ES3RefIdDictionary localRefs = new ES3RefIdDictionary(); - - public void Awake() - { - // Add the references to the reference list when this prefab is instantiated. - var mgr = ES3ReferenceMgrBase.Current; - - if (mgr == null) - return; - - foreach (var kvp in localRefs) - if (kvp.Key != null) - mgr.Add(kvp.Key); - } - - public long Get(UnityEngine.Object obj) - { - long id; - if (localRefs.TryGetValue(obj, out id)) - return id; - return -1; - } - - public long Add(UnityEngine.Object obj) - { - long id; - if (localRefs.TryGetValue(obj, out id)) - return id; - - if (!ES3ReferenceMgr.CanBeSaved(obj)) - return -1; - id = GetNewRefID(); - localRefs.Add(obj, id); - return id; - } - - public Dictionary GetReferences() - { - var localToGlobal = new Dictionary(); - - var refMgr = ES3ReferenceMgr.Current; - - if (refMgr == null) - return localToGlobal; - - foreach (var kvp in localRefs) - { - long id = refMgr.Add(kvp.Key); - localToGlobal[kvp.Value.ToString()] = id.ToString(); - } - return localToGlobal; - } - - public void ApplyReferences(Dictionary localToGlobal) - { - if (ES3ReferenceMgrBase.Current == null) - return; - - foreach (var localRef in localRefs) - { - long globalId; - if (localToGlobal.TryGetValue(localRef.Value, out globalId)) - ES3ReferenceMgrBase.Current.Add(localRef.Key, globalId); - } - } - - public static long GetNewRefID() - { - return ES3ReferenceMgrBase.GetNewRefID(); - } -#if UNITY_EDITOR - public void GeneratePrefabReferences() - { -#if UNITY_2021_3_OR_NEWER - if (this.gameObject.scene.name != null || UnityEditor.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage() != null) -#elif UNITY_2018_3_OR_NEWER - if (this.gameObject.scene.name != null || UnityEditor.Experimental.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage() != null) -#else - if (this.gameObject.scene.name != null) -#endif - return; - - // Create a new reference list so that any objects which are no longer dependencies are removed. - var tempLocalRefs = new ES3RefIdDictionary(); - - // Get dependencies of children also. - var transforms = GetComponentsInChildren(); - var gos = new GameObject[transforms.Length]; - for (int i = 0; i < transforms.Length; i++) - gos[i] = transforms[i].gameObject; - - bool addedNewReference = false; - - // Add the GameObject's dependencies to the reference list. - foreach (var obj in EditorUtility.CollectDependencies(gos)) - { - var dependency = (UnityEngine.Object)obj; - if (obj == null || !ES3ReferenceMgr.CanBeSaved(dependency)) - continue; - - var id = Get(dependency); - // If we're adding a new reference, do an Undo.RecordObject to ensure it persists. - if (id == -1) - { - addedNewReference = true; - Undo.RecordObject(this, "Update Easy Save 3 Prefab"); - EditorUtility.SetDirty(this); - } - tempLocalRefs.Add(dependency, id == -1 ? GetNewRefID() : id); - } - - if (addedNewReference || tempLocalRefs.Count != localRefs.Count) - localRefs = tempLocalRefs; - } -#endif - } -} - -/* - * Create a blank ES3Type for ES3Prefab as it does not require serialising/deserialising when stored as a Component. - */ -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_ES3Prefab : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ES3Prefab() : base(typeof(ES3Prefab)) { Instance = this; } - - public override void Write(object obj, ES3Writer writer) - { - } - - public override object Read(ES3Reader reader) - { - return null; - } - } - - /* - * Use this ES3Type to serialise the . - */ - public class ES3Type_ES3PrefabInternal : ES3Type - { - public static ES3Type Instance = new ES3Type_ES3PrefabInternal(); - - public ES3Type_ES3PrefabInternal() : base(typeof(ES3Type_ES3PrefabInternal)) { Instance = this; } - - public override void Write(object obj, ES3Writer writer) - { - ES3Prefab es3Prefab = (ES3Prefab)obj; - - writer.WriteProperty("prefabId", es3Prefab.prefabId.ToString(), ES3Type_string.Instance); - writer.WriteProperty("refs", es3Prefab.GetReferences()); - } - - public override object Read(ES3Reader reader) - { - var prefabId = reader.ReadRefProperty(); - - if (ES3ReferenceMgrBase.Current == null) - return null; - - var es3Prefab = ES3ReferenceMgrBase.Current.GetPrefab(prefabId); - if (es3Prefab == null) - throw new MissingReferenceException("Prefab with ID " + prefabId + " could not be found.\nPress the 'Refresh References' button on the ES3ReferenceMgr Component of the Easy Save 3 Manager in the scene to refresh prefabs."); - - -#if UNITY_EDITOR - // Use PrefabUtility.InstantiatePrefab if we're saving in the Editor and the application isn't playing. - // This keeps the connection to the prefab, which is useful for Editor scripts saving data outside of runtime. - var instance = Application.isPlaying ? GameObject.Instantiate(es3Prefab.gameObject) : PrefabUtility.InstantiatePrefab(es3Prefab.gameObject); -#else - var instance = GameObject.Instantiate(es3Prefab.gameObject); -#endif - var instanceES3Prefab = ((GameObject)instance).GetComponent(); - if (instanceES3Prefab == null) - throw new MissingReferenceException("Prefab with ID " + prefabId + " was found, but it does not have an ES3Prefab component attached."); - - ReadInto(reader, instance); - - return instanceES3Prefab.gameObject; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - // Load as ES3Refs and convert to longs. - var localToGlobal_refs = reader.ReadProperty>(ES3Type_ES3RefDictionary.Instance); - var localToGlobal = new Dictionary(); - foreach (var kvp in localToGlobal_refs) - localToGlobal.Add(kvp.Key.id, kvp.Value.id); - - if (ES3ReferenceMgrBase.Current == null) - return; - - ((GameObject)obj).GetComponent().ApplyReferences(localToGlobal); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Prefab.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3Prefab.cs.meta deleted file mode 100644 index 4c771c9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Prefab.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: baff8732cd3074ef88b34f9cc487846d -timeCreated: 1519132295 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgr.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgr.cs deleted file mode 100644 index ed65428..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgr.cs +++ /dev/null @@ -1,262 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using ES3Internal; -using UnityEngine.SceneManagement; -#if UNITY_EDITOR -using UnityEditor; -using UnityEditor.SceneManagement; -using System.Reflection; -using System; -using System.Linq; -using UnityEngine.U2D; -#endif - -#if UNITY_VISUAL_SCRIPTING -using Unity.VisualScripting; -[IncludeInSettings(true)] -#endif -public class ES3ReferenceMgr : ES3ReferenceMgrBase -{ -#if UNITY_EDITOR - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void RefreshDependencies(bool isEnteringPlayMode = false) - { - // Empty the refId so it has to be refreshed. - refId = null; - - ES3ReferenceMgrBase.isEnteringPlayMode = isEnteringPlayMode; - - // This will get the dependencies for all GameObjects and Components from the active scene. - AddDependencies(this.gameObject.scene.GetRootGameObjects()); - AddDependenciesFromFolders(); - AddPrefabsToManager(); - RemoveNullOrInvalidValues(); - - ES3ReferenceMgrBase.isEnteringPlayMode = false; - } - - [MenuItem("Tools/Easy Save 3/Refresh References for All Scenes", false, 150)] - static void RefreshDependenciesInAllScenes() - { - if (!EditorUtility.DisplayDialog("Refresh references in all scenes", "This will open each scene which is enabled in your Build Settings, refresh each reference manager, and save the scene.\n\nWe recommend making a backup of your project before doing this for the first time.", "Ok", "Cancel", DialogOptOutDecisionType.ForThisMachine, "ES3RefreshAllOptOut")) - return; - - // Get a list of loaded scenes so we know whether we need to close them after refreshing references or not. - var loadedScenePaths = new string[SceneManager.sceneCount]; - for (int i = 0; i < SceneManager.sceneCount; i++) - loadedScenePaths[i] = SceneManager.GetSceneAt(i).path; - - var scenes = EditorBuildSettings.scenes; - var sceneNameList = ""; // We use this so we can display a list of scenes at the end. - - for (int i = 0; i < scenes.Length; i++) - { - var buildSettingsScene = scenes[i]; - - if (!buildSettingsScene.enabled) - continue; - - if (EditorUtility.DisplayCancelableProgressBar("Refreshing references", $"Refreshing references for scene {buildSettingsScene.path}.", i / scenes.Length)) - return; - - var sceneWasOpen = loadedScenePaths.Contains(buildSettingsScene.path); - var scene = EditorSceneManager.OpenScene(buildSettingsScene.path, OpenSceneMode.Additive); - - var mgr = ES3ReferenceMgr.GetManagerFromScene(scene, false); - - if (mgr != null) - { - try - { - ((ES3ReferenceMgr)mgr).RefreshDependencies(); - } - catch(Exception e) - { - ES3Debug.LogError($"Couldn't update references for scene {scene.name} as the following exception occurred:\n\n" + e); - } - } - - sceneNameList += $"{scene.name}\n"; - - // If the scene wasn't originally open, save it and close it. - if (!sceneWasOpen) - { - // Temporarily disable refreshing on save so that it doesn't refresh again. - var updateReferencesOnSave = ES3Settings.defaultSettingsScriptableObject.updateReferencesWhenSceneIsSaved; - ES3Settings.defaultSettingsScriptableObject.updateReferencesWhenSceneIsSaved = false; - - EditorSceneManager.SaveScene(scene); - EditorSceneManager.CloseScene(scene, true); - - ES3Settings.defaultSettingsScriptableObject.updateReferencesWhenSceneIsSaved = updateReferencesOnSave; - } - } - EditorUtility.ClearProgressBar(); - - EditorUtility.DisplayDialog("References refreshed", $"Refrences updated for scenes:\n\n{sceneNameList}", "Ok", DialogOptOutDecisionType.ForThisMachine, "ES3RefreshAllCompleteOptOut"); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void Optimize() - { - var dependencies = EditorUtility.CollectDependencies(this.gameObject.scene.GetRootGameObjects().Where(go => go != this.gameObject).ToArray()); - var notDependenciesOfScene = new HashSet(); - - foreach (var kvp in idRef) - if (!dependencies.Contains(kvp.Value)) - notDependenciesOfScene.Add(kvp.Value); - - foreach (var obj in notDependenciesOfScene) - Remove(obj); - } - - /* Adds all dependencies from this scene to the manager */ - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void AddDependencies() - { - var rootGameObjects = gameObject.scene.GetRootGameObjects(); - - for (int j = 0; j < rootGameObjects.Length; j++) - { - var go = rootGameObjects[j]; - - if (EditorUtility.DisplayCancelableProgressBar("Gathering references", "Populating reference manager with your scene dependencies so they can be saved and loaded by reference.", j / rootGameObjects.Length)) - return; - - AddDependencies(go); - } - - EditorUtility.ClearProgressBar(); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void AddDependencies(UnityEngine.Object[] objs) - { - var timeStarted = EditorApplication.timeSinceStartup; - var timeout = ES3Settings.defaultSettingsScriptableObject.collectDependenciesTimeout; - - foreach (var obj in objs) - { - if (obj == null || obj.name == "Easy Save 3 Manager") - continue; - - var excludeTextures = new List(); - - foreach (var dependency in EditorUtility.CollectDependencies(new UnityEngine.Object[] { obj })) - { - if (EditorApplication.timeSinceStartup - timeStarted > timeout) - { - ES3Debug.LogWarning($"Easy Save cancelled gathering of references for object {obj.name} because it took longer than {timeout} seconds. You can increase the timeout length in Tools > Easy Save 3 > Settings > Reference Gathering Timeout, or adjust the settings so that fewer objects are referenced in your scene."); - return; - } - - // Exclude all Texture2Ds which are packed into a SpriteAtlas from this manager. - if (dependency is SpriteAtlas) - foreach (var atlasDependency in EditorUtility.CollectDependencies(new UnityEngine.Object[] { dependency })) - if (atlasDependency is Texture2D) - ExcludeObject(atlasDependency); - - Add(dependency); - - if (obj is ES3Prefab prefab) - AddPrefabToManager(prefab); - } - } - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void AddDependenciesFromFolders() - { - var folders = ES3Settings.defaultSettingsScriptableObject.referenceFolders; - - // Remove null or empty values. - ArrayUtility.Remove(ref folders, ""); - ArrayUtility.Remove(ref folders, null); - - if (folders == null || folders.Length == 0) - return; - - var guids = AssetDatabase.FindAssets("t:Object", folders); - - foreach (var guid in guids) - { - var path = AssetDatabase.GUIDToAssetPath(guid); - var obj = AssetDatabase.LoadAssetAtPath(path); - - if(obj != null) - AddDependencies(obj); - } - } - - /*[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void AddDependenciesLegacy(UnityEngine.Object[] objs) - { - for (int i = 0; i < objs.Length; i++) - { - var obj = objs[i]; - - if (obj.name == "Easy Save 3 Manager") - continue; - - var dependencies = CollectDependenciesLegacy(obj); - - foreach (var dependency in dependencies) - { - if (dependency != null) - { - Add(dependency); - - // Add the prefab if it's referenced by this scene. - if (dependency.GetType() == typeof(ES3Prefab)) - AddPrefabToManager((ES3Prefab)dependency); - } - } - } - - Undo.RecordObject(this, "Update Easy Save 3 Reference List"); - }*/ - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void AddDependencies(UnityEngine.Object obj) - { - AddDependencies(new UnityEngine.Object[] { obj }); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void GeneratePrefabReferences() - { - AddPrefabsToManager(); - foreach (var es3Prefab in prefabs) - es3Prefab.GeneratePrefabReferences(); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void AddPrefabsToManager() - { - if (ES3Settings.defaultSettingsScriptableObject.addAllPrefabsToManager) - { - // Clear any null values. This isn't necessary if we're not adding all prefabs to manager as the list is cleared each time. - if (this.prefabs.RemoveAll(item => item == null) > 0) - Undo.RecordObject(this, "Update Easy Save 3 Reference List"); - - foreach (var es3Prefab in Resources.FindObjectsOfTypeAll()) - AddPrefabToManager(es3Prefab); - } - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - private void AddPrefabToManager(ES3Prefab es3Prefab) - { - try - { - if (es3Prefab != null && EditorUtility.IsPersistent(es3Prefab)) - if(AddPrefab(es3Prefab)) - Undo.RecordObject(this, "Update Easy Save 3 Reference List"); - es3Prefab.GeneratePrefabReferences(); - } - catch { } - } -#endif -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgr.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgr.cs.meta deleted file mode 100644 index d1c37c6..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgr.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9a83408fcc9044c4fbc7e5d09a369ab6 -timeCreated: 1503395115 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgrBase.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgrBase.cs deleted file mode 100644 index 2e626d8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgrBase.cs +++ /dev/null @@ -1,761 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System; -using UnityEngine.SceneManagement; - -namespace ES3Internal -{ - [System.Serializable] - [DisallowMultipleComponent] - public abstract class ES3ReferenceMgrBase : MonoBehaviour - { - internal object _lock = new object(); - - public const string referencePropertyName = "_ES3Ref"; - private static ES3ReferenceMgrBase _current = null; - private static HashSet mgrs = new HashSet(); -#if UNITY_EDITOR - protected static bool isEnteringPlayMode = false; - static readonly HideFlags[] invalidHideFlags = new HideFlags[] { HideFlags.DontSave, HideFlags.DontSaveInBuild, HideFlags.DontSaveInEditor, HideFlags.HideAndDontSave }; -#endif - -#if !UNITY_EDITOR - [NonSerialized] -#endif - public List excludeObjects = new List(); - - private static System.Random rng; - - [HideInInspector] - public bool openPrefabs = false; // Whether the prefab list should be open in the Editor. - - public List prefabs = new List(); - - public static ES3ReferenceMgrBase Current - { - get - { - // If the reference manager hasn't been assigned, or we've got a reference to a manager in a different scene which isn't marked as DontDestroyOnLoad, look for this scene's manager. - if (_current == null /*|| (_current.gameObject.scene.buildIndex != -1 && _current.gameObject.scene != SceneManager.GetActiveScene())*/) - { - ES3ReferenceMgrBase mgr = GetManagerFromScene(SceneManager.GetActiveScene()); - if (mgr != null) - mgrs.Add(_current = mgr); - } - return _current; - } - } - - public static ES3ReferenceMgrBase GetManagerFromScene(Scene scene, bool getAnyManagerIfNotInScene = true) - { - // This has been removed as isLoaded is false during the initial Awake(). - /*if (!scene.isLoaded) - return null;*/ - - // If this is a valid scene, search it for the manager. - if (scene.IsValid()) - { - // Check whether the mgr is already in the mgr list. - foreach (var addedMgr in mgrs) - if (addedMgr != null && addedMgr.gameObject.scene == scene) - return addedMgr; - - GameObject[] roots; - try - { - roots = scene.GetRootGameObjects(); - } - catch - { - return null; - } - - // First, look for Easy Save 3 Manager in the top-level. - foreach (var root in roots) - { - if (root.name == "Easy Save 3 Manager") - { - var mgr = root.GetComponent(); - if(mgr != null) - return mgr; - } - } - - // If the user has moved or renamed the Easy Save 3 Manager, we need to perform a deep search. - foreach (var root in roots) - { - var mgr = root.GetComponentInChildren(); - if(mgr != null) - return mgr; - } - } - - // If we can't find a manager in this scene (for example we're in DontDestroyOnLoad), find a manager in any scene. - if (getAnyManagerIfNotInScene) - { - for (int i = 0; i < SceneManager.sceneCount; i++) - { - var loadedScene = SceneManager.GetSceneAt(i); - - if (loadedScene != null && loadedScene != scene && loadedScene.IsValid()) - { - var mgr = GetManagerFromScene(loadedScene, false); - if (mgr != null) - { - ES3Debug.LogWarning($"The reference you're trying to save does not exist in any scene, or the scene it belongs to does not contain an Easy Save 3 Manager. Using the reference manager from scene {loadedScene.name} instead. This may cause unexpected behaviour or leak memory in some situations. See the Saving and Loading References guide for more information."); - return mgr; - } - } - } - } - return null; - } - - public bool IsInitialised { get { return idRef.Count > 0; } } - - [SerializeField] - public ES3IdRefDictionary idRef = new ES3IdRefDictionary(); - private ES3RefIdDictionary _refId = null; - - public ES3RefIdDictionary refId - { - get - { - if (_refId == null) - { - _refId = new ES3RefIdDictionary(); - // Populate the reverse dictionary with the items from the normal dictionary. - foreach (var kvp in idRef) - if (kvp.Value != null) - _refId[kvp.Value] = kvp.Key; - } - return _refId; - } - set - { - _refId = value; - } - } - - public ES3GlobalReferences GlobalReferences - { - get - { - return ES3GlobalReferences.Instance; - } - } - - // Reset static variables to handle disabled domain reloading. - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void Init() - { - _current = null; - mgrs = new HashSet(); -#if UNITY_EDITOR - isEnteringPlayMode = false; -#endif - rng = null; - } - - internal void Awake() - { - if (_current != null && _current != this) - { - var existing = _current; - - /* We intentionally use Current rather than _current here, as _current may contain a reference to a manager in another scene, - * but Current only returns the Manager for the active scene. */ - if (Current != null) - { - RemoveNullValues(); - - //existing.Merge(this); - //Destroy(this); - _current = existing; // Undo the call to Current, which may have set it to NULL. - } - } - else - _current = this; - mgrs.Add(this); - } - - private void OnDestroy() - { - if (_current == this) - _current = null; - mgrs.Remove(this); - } - - // Merges two managers, not allowing any clashes of IDs - public void Merge(ES3ReferenceMgrBase otherMgr) - { - foreach (var kvp in otherMgr.idRef) - Add(kvp.Value, kvp.Key); - } - - public long Get(UnityEngine.Object obj) - { - if (!mgrs.Contains(this)) - mgrs.Add(this); - - foreach (var mgr in mgrs) - { - if (mgr == null) - continue; - - if (obj == null) - return -1; - - long id; - if (mgr.refId.TryGetValue(obj, out id)) - return id; - } - return -1; - } - - internal UnityEngine.Object Get(long id, Type type, bool suppressWarnings = false) - { - if (!mgrs.Contains(this)) - mgrs.Add(this); - - foreach (var mgr in mgrs) - { - if (mgr == null) - continue; - - if (id == -1) - return null; - - UnityEngine.Object obj; - if (mgr.idRef.TryGetValue(id, out obj)) - { - if (obj == null) // If obj has been marked as destroyed but not yet destroyed, don't return it. - return null; - return obj; - } - } - - if (GlobalReferences != null) - { - var globalRef = GlobalReferences.Get(id); - if (globalRef != null) - return globalRef; - } - - if (!suppressWarnings) - { - if (type != null) - ES3Debug.LogWarning("Reference for " + type + " with ID " + id + " could not be found in Easy Save's reference manager. See the Saving and Loading References guide for more information.", this); - else - ES3Debug.LogWarning("Reference with ID " + id + " could not be found in Easy Save's reference manager. See the Saving and Loading References guide for more information.", this); - } - - return null; - } - - public UnityEngine.Object Get(long id, bool suppressWarnings = false) - { - return Get(id, null, suppressWarnings); - } - - public ES3Prefab GetPrefab(long id, bool suppressWarnings = false) - { - if (!mgrs.Contains(this)) - mgrs.Add(this); - - foreach (var mgr in mgrs) - { - if (mgr == null) - continue; - - foreach (var prefab in mgr.prefabs) - if (prefab != null && prefab.prefabId == id) - return prefab; - } - if (!suppressWarnings) - ES3Debug.LogWarning("Prefab with ID " + id + " could not be found in Easy Save's reference manager. Try pressing the Refresh References button on the ES3ReferenceMgr Component of the Easy Save 3 Manager in your scene, or exit play mode and right-click the prefab and select Easy Save 3 > Add Reference(s) to Manager.", this); - return null; - } - - public long GetPrefab(ES3Prefab prefabToFind, bool suppressWarnings = false) - { - if (!mgrs.Contains(this)) - mgrs.Add(this); - - foreach (var mgr in mgrs) - { - if (mgr == null) - continue; - - foreach (var prefab in prefabs) - if (prefab == prefabToFind) - return prefab.prefabId; - } - if (!suppressWarnings) - ES3Debug.LogWarning("Prefab with name " + prefabToFind.name + " could not be found in Easy Save's reference manager. Try pressing the Refresh References button on the ES3ReferenceMgr Component of the Easy Save 3 Manager in your scene, or exit play mode and right-click the prefab and select Easy Save 3 > Add Reference(s) to Manager.", prefabToFind); - return -1; - } - - public long Add(UnityEngine.Object obj) - { - if (obj == null) - return -1; - - if (!CanBeSaved(obj)) - return -1; - - long id; - // If it already exists in the list, do nothing. - if (refId.TryGetValue(obj, out id)) - return id; - - if (GlobalReferences != null) - { - id = GlobalReferences.GetOrAdd(obj); - if (id != -1) - { - Add(obj, id); - return id; - } - } - - lock (_lock) - { - // Add the reference to the Dictionary. - id = GetNewRefID(); - return Add(obj, id); - } - } - - public long Add(UnityEngine.Object obj, long id) - { - if (obj == null) - return -1; - - if (!CanBeSaved(obj)) - return -1; - - // If the ID is -1, auto-generate an ID. - if (id == -1) - id = GetNewRefID(); - // Add the reference to the Dictionary. - lock (_lock) - { - idRef[id] = obj; - if (obj != null) - refId[obj] = id; - } - return id; - } - - public bool AddPrefab(ES3Prefab prefab) - { - if (!prefabs.Contains(prefab)) - { - prefabs.Add(prefab); - return true; - } - return false; - } - - public void Remove(UnityEngine.Object obj) - { - if (!mgrs.Contains(this)) - mgrs.Add(this); - - foreach (var mgr in mgrs) - { - if (mgr == null) - continue; - - // Only remove from this manager if we're in the Editor. - if (!Application.isPlaying && mgr != this) - continue; - - lock (mgr._lock) - { - mgr.refId.Remove(obj); - // There may be multiple references with the same ID, so remove them all. - foreach (var item in mgr.idRef.Where(kvp => kvp.Value == obj).ToList()) - mgr.idRef.Remove(item.Key); - } - } - } - - public void Remove(long referenceID) - { - foreach (var mgr in mgrs) - { - if (mgr == null) - continue; - - lock (mgr._lock) - { - mgr.idRef.Remove(referenceID); - // There may be multiple references with the same ID, so remove them all. - foreach (var item in mgr.refId.Where(kvp => kvp.Value == referenceID).ToList()) - mgr.refId.Remove(item.Key); - } - } - } - - public void RemoveNullValues() - { - var nullKeys = idRef.Where(pair => pair.Value == null).Select(pair => pair.Key).ToList(); - foreach (var key in nullKeys) - idRef.Remove(key); - } - - public void RemoveNullOrInvalidValues() - { - var nullKeys = idRef.Where(pair => pair.Value == null || !CanBeSaved(pair.Value) || excludeObjects.Contains(pair.Value)).Select(pair => pair.Key).ToList(); - foreach (var key in nullKeys) - idRef.Remove(key); - - if (GlobalReferences != null) - GlobalReferences.RemoveInvalidKeys(); - } - - public void Clear() - { - lock (_lock) - { - refId.Clear(); - idRef.Clear(); - } - } - - public bool Contains(UnityEngine.Object obj) - { - return refId.ContainsKey(obj); - } - - public bool Contains(long referenceID) - { - return idRef.ContainsKey(referenceID); - } - - public void ChangeId(long oldId, long newId) - { - idRef.ChangeKey(oldId, newId); - // Empty the refId so it has to be refreshed. - refId = null; - } - - internal static long GetNewRefID() - { - if (rng == null) - rng = new System.Random(); - - byte[] buf = new byte[8]; - rng.NextBytes(buf); - long longRand = BitConverter.ToInt64(buf, 0); - - return (System.Math.Abs(longRand % (long.MaxValue - 0)) + 0); - } - - /*#if UNITY_EDITOR - public static HashSet CollectDependenciesLegacy(UnityEngine.Object obj, HashSet dependencies = null, int depth = int.MinValue) - { - return CollectDependenciesLegacy(new UnityEngine.Object[] { obj }, dependencies, depth); - } - - - //Collects all top-level dependencies of an object. - //For GameObjects, it will traverse all children. - //For Components or ScriptableObjects, it will get all serialisable UnityEngine.Object fields/properties as dependencies. - public static HashSet CollectDependenciesLegacy(UnityEngine.Object[] objs, HashSet dependencies = null, int depth = int.MinValue) - { - if (depth == int.MinValue) - depth = ES3Settings.defaultSettingsScriptableObject.collectDependenciesDepth; - - if (depth < 0) - return dependencies; - - if (dependencies == null) - dependencies = new HashSet(); - - foreach (var obj in objs) - { - if (obj == null) - continue; - - var type = obj.GetType(); - - // Skip types which don't need processing - if (type == typeof(ES3ReferenceMgr) || type == typeof(ES3AutoSaveMgr) || type == typeof(ES3AutoSave) || type == typeof(ES3InspectorInfo)) - continue; - - // Add the prefab to the manager but don't process it. We'll use this to work out what prefabs to add to the prefabs list later. - if (type == typeof(ES3Prefab)) - { - dependencies.Add(obj); - continue; - } - - // If it's a GameObject, get the GameObject's Components and collect their dependencies. - if (type == typeof(GameObject)) - { - var go = (GameObject)obj; - // If we've not already processed this GameObject ... - if (dependencies.Add(go)) - { - // Get the dependencies of each Component in the GameObject. - CollectDependenciesLegacy(go.GetComponents(), dependencies, depth - 1); - // Get the dependencies of each child in the GameObject. - foreach (Transform child in go.transform) - CollectDependenciesLegacy(child.gameObject, dependencies, depth); // Don't decrement child, as we consider this a top-level object. - } - } - // Else if it's a Component or ScriptableObject, add the values of any UnityEngine.Object fields as dependencies. - else - CollectDependenciesFromFieldsLegacy(obj, dependencies, depth - 1); - } - - return dependencies; - } - - private static void CollectDependenciesFromFieldsLegacy(UnityEngine.Object obj, HashSet dependencies, int depth) - { - // If we've already collected dependencies for this, do nothing. - if (!dependencies.Add(obj)) - return; - - if (depth == int.MinValue) - depth = ES3Settings.defaultSettingsScriptableObject.collectDependenciesDepth; - - if (depth < 0) - return; - - var type = obj.GetType(); - - if (isEnteringPlayMode && type == typeof(UnityEngine.UI.Text)) - return; - - try - { - // SerializedObject is expensive, so for known classes we manually gather references. - - if (type == typeof(Animator) || obj is Transform || type == typeof(CanvasRenderer) || type == typeof(Mesh) || type == typeof(AudioClip) || type == typeof(Rigidbody) || obj is HorizontalOrVerticalLayoutGroup) - return; - - if(obj is Texture) - { - // This ensures that Sprites which are children of the Texture are also added. In the Editor you would otherwise need to expand the Texture to add the Sprite. - foreach(var dependency in UnityEditor.AssetDatabase.LoadAllAssetsAtPath(UnityEditor.AssetDatabase.GetAssetPath(obj))) - if (dependency != obj) - dependencies.Add(dependency); - } - - if (obj is Graphic) - { - var m = (Graphic)obj; - dependencies.Add(m.material); - dependencies.Add(m.defaultMaterial); - dependencies.Add(m.mainTexture); - - if (type == typeof(Text)) - { - var text = (Text)obj; - dependencies.Add(text.font); - } - else if (type == typeof(Image)) - { - var img = (Image)obj; - dependencies.Add(img.sprite); - } - return; - } - - if (type == typeof(Mesh)) - { - if (UnityEditor.AssetDatabase.Contains(obj)) - dependencies.Add(obj); - return; - } - - if (type == typeof(Material)) - { - var material = (Material)obj; - var shader = material.shader; - if (shader != null) - { - dependencies.Add(material.shader); - - #if UNITY_2019_3_OR_NEWER - for (int i = 0; i < shader.GetPropertyCount(); i++) - if (shader.GetPropertyType(i) == UnityEngine.Rendering.ShaderPropertyType.Texture) - dependencies.Add(material.GetTexture(shader.GetPropertyName(i))); - } - #endif - - return; - } - - if (type == typeof(MeshFilter)) - { - dependencies.Add(((MeshFilter)obj).sharedMesh); - return; - } - - if (type == typeof(MeshCollider)) - { - var mc = (MeshCollider)obj; - dependencies.Add(mc.sharedMesh); - dependencies.Add(mc.sharedMaterial); - dependencies.Add(mc.attachedRigidbody); - return; - } - - if (type == typeof(Camera)) - { - var c = (Camera)obj; - dependencies.Add(c.targetTexture); - return; - } - - if (type == typeof(SkinnedMeshRenderer)) - dependencies.Add(((SkinnedMeshRenderer)obj).sharedMesh); // Don't return. Let this fall through to the if(obj is renderer) call. - else if (type == typeof(SpriteRenderer)) - dependencies.Add(((SpriteRenderer)obj).sprite); // Don't return. Let this fall through to the if(obj is renderer) call. - else if (type == typeof(ParticleSystemRenderer)) - dependencies.Add(((ParticleSystemRenderer)obj).mesh); // Don't return. Let this fall through to the if(obj is renderer) call. - - if (obj is Renderer) - { - var renderer = (Renderer)obj; - foreach (var material in renderer.sharedMaterials) - CollectDependenciesFromFieldsLegacy(material, dependencies, depth - 1); - return; - } - } - catch { } - - var so = new UnityEditor.SerializedObject(obj); - if (so == null) - return; - - var property = so.GetIterator(); - if (property == null) - return; - - // Iterate through each of this object's properties. - while (property.NextVisible(true)) - { - try - { - // If it's an array which contains UnityEngine.Objects, add them as dependencies. - if (property.isArray && property.propertyType != UnityEditor.SerializedPropertyType.String) - { - for (int i = 0; i < property.arraySize; i++) - { - var element = property.GetArrayElementAtIndex(i); - - // If the array contains UnityEngine.Object types, add them to the dependencies. - if (element.propertyType == UnityEditor.SerializedPropertyType.ObjectReference) - { - var elementValue = element.objectReferenceValue; - var elementType = elementValue.GetType(); - - // If it's a GameObject, use CollectDependencies so that Components are also added. - if (elementType == typeof(GameObject)) - CollectDependenciesLegacy(elementValue, dependencies, depth - 1); - else - CollectDependenciesFromFieldsLegacy(elementValue, dependencies, depth - 1); - } - // Otherwise this array does not contain UnityEngine.Object types, so we should stop. - else - break; - } - } - // Else if it's a normal UnityEngine.Object field, add it. - else if (property.propertyType == UnityEditor.SerializedPropertyType.ObjectReference) - { - var propertyValue = property.objectReferenceValue; - if (propertyValue == null) - continue; - - // If it's a GameObject, use CollectDependencies so that Components are also added. - if (propertyValue.GetType() == typeof(GameObject)) - CollectDependenciesLegacy(propertyValue, dependencies, depth - 1); - else - CollectDependenciesFromFieldsLegacy(propertyValue, dependencies, depth - 1); - } - } - catch { } - } - } - - // Called in the Editor when this Component is added. - private void Reset() - { - // Ensure that Component can only be added by going to Assets > Easy Save 3 > Add Manager to Scene. - if (gameObject.name != "Easy Save 3 Manager") - { - UnityEditor.EditorUtility.DisplayDialog("Cannot add ES3ReferenceMgr directly", "Please go to 'Tools > Easy Save 3 > Add Manager to Scene' to add an Easy Save 3 Manager to your scene.", "Ok"); - DestroyImmediate(this); - } - } - #endif*/ - - internal static bool CanBeSaved(UnityEngine.Object obj) - { -#if UNITY_EDITOR - if (obj == null) - return true; - - foreach (var flag in invalidHideFlags) - if ((obj.hideFlags & flag) != 0 && obj.hideFlags != HideFlags.HideInHierarchy && obj.hideFlags != HideFlags.HideInInspector && obj.hideFlags != HideFlags.NotEditable) - if (!(obj is Mesh || obj is Material)) - return false; - - // Exclude the Easy Save 3 Manager, and all components attached to it. - if (obj.name == "Easy Save 3 Manager") - return false; -#endif - return true; - } - -#if UNITY_EDITOR - public void ExcludeObject(UnityEngine.Object obj) - { - if (excludeObjects == null) - excludeObjects = new List(); - - if (!excludeObjects.Contains(obj)) - excludeObjects.Add(obj); - } -#endif - } - - [System.Serializable] - public class ES3IdRefDictionary : ES3SerializableDictionary - { - protected override bool KeysAreEqual(long a, long b) - { - return a == b; - } - - protected override bool ValuesAreEqual(UnityEngine.Object a, UnityEngine.Object b) - { - return a == b; - } - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - [System.Serializable] - public class ES3RefIdDictionary : ES3SerializableDictionary - { - protected override bool KeysAreEqual(UnityEngine.Object a, UnityEngine.Object b) - { - return a == b; - } - - protected override bool ValuesAreEqual(long a, long b) - { - return a == b; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgrBase.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgrBase.cs.meta deleted file mode 100644 index be51e29..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3ReferenceMgrBase.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f659e3ad478b6470d9744732042e7515 -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Reflection.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3Reflection.cs deleted file mode 100644 index c76a6dd..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Reflection.cs +++ /dev/null @@ -1,799 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System; -using System.Linq; -using System.Reflection; -using System.ComponentModel; -using UnityEngine; -using ES3Types; - -namespace ES3Internal -{ - public static class ES3Reflection - { - public const string memberFieldPrefix = "m_"; - public const string componentTagFieldName = "tag"; - public const string componentNameFieldName = "name"; - public static readonly string[] excludedPropertyNames = new string[] { "runInEditMode", "useGUILayout", "hideFlags" }; - - public static readonly Type serializableAttributeType = typeof(System.SerializableAttribute); - public static readonly Type serializeFieldAttributeType = typeof(SerializeField); - public static readonly Type obsoleteAttributeType = typeof(System.ObsoleteAttribute); - public static readonly Type nonSerializedAttributeType = typeof(System.NonSerializedAttribute); - public static readonly Type es3SerializableAttributeType = typeof(ES3Serializable); - public static readonly Type es3NonSerializableAttributeType = typeof(ES3NonSerializable); - - public static Type[] EmptyTypes = new Type[0]; - - private static Assembly[] _assemblies = null; - private static Assembly[] Assemblies - { - get - { - - if (_assemblies == null) - { - var assemblyNames = new ES3Settings().assemblyNames; - var assemblyList = new List(); - - /* We only use a try/catch block for UWP because exceptions can be disabled on some other platforms (e.g. WebGL), but the non-try/catch method doesn't work on UWP */ -#if NETFX_CORE - for (int i = 0; i < assemblyNames.Length; i++) - { - try - { - var assembly = Assembly.Load(new AssemblyName(assemblyNames[i])); - if (assembly != null) - assemblyList.Add(assembly); - } - catch { } - } - -#else - var assemblies = AppDomain.CurrentDomain.GetAssemblies(); - foreach (var assembly in assemblies) - { - // This try/catch block is here to catch errors such as assemblies containing double-byte characters in their path. - // This obviously won't work if exceptions are disabled. - try - { - if (assemblyNames.Contains(assembly.GetName().Name)) - { - assemblyList.Add(assembly); - } - } - catch { } - } -#endif - _assemblies = assemblyList.ToArray(); - } - return _assemblies; - } - } - - public static ConstructorInfo GetConstructor(Type type, Type[] parameters) - { - return type.GetTypeInfo().GetConstructor(parameters); - } - - /* - * Gets the element type of a collection or array. - * Returns null if type is not a collection type. - */ - public static Type[] GetElementTypes(Type type) - { - if (IsGenericType(type)) - return ES3Reflection.GetGenericArguments(type); - else if (type.IsArray) - return new Type[] { ES3Reflection.GetElementType(type) }; - else - return null; - } - - public static List GetSerializableFields(Type type, List serializableFields = null, bool safe = true, string[] memberNames = null, BindingFlags bindings = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly) - { - if (type == null) - return new List(); - - var fields = type.GetFields(bindings); - - if (serializableFields == null) - serializableFields = new List(); - - foreach (var field in fields) - { - var fieldName = field.Name; - - // If a members array was provided as a parameter, only include the field if it's in the array. - if (memberNames != null) - if (!memberNames.Contains(fieldName)) - continue; - - var fieldType = field.FieldType; - - if (AttributeIsDefined(field, es3SerializableAttributeType)) - { - serializableFields.Add(field); - continue; - } - - if (AttributeIsDefined(field, es3NonSerializableAttributeType)) - continue; - - if (safe) - { - // If the field is private, only serialize it if it's explicitly marked as serializable. - if (!field.IsPublic && !AttributeIsDefined(field, serializeFieldAttributeType)) - continue; - } - - // Exclude const or readonly fields. - if (field.IsLiteral || field.IsInitOnly) - continue; - - // Don't store fields whose type is the same as the class the field is housed in unless it's stored by reference (to prevent cyclic references) - if (fieldType == type && !IsAssignableFrom(typeof(UnityEngine.Object), fieldType)) - continue; - - // If property is marked as obsolete or non-serialized, don't serialize it. - if (AttributeIsDefined(field, nonSerializedAttributeType) || AttributeIsDefined(field, obsoleteAttributeType)) - continue; - - if (!TypeIsSerializable(field.FieldType)) - continue; - - // Don't serialize member fields. - if (safe && fieldName.StartsWith(memberFieldPrefix) && field.DeclaringType.Namespace != null && field.DeclaringType.Namespace.Contains("UnityEngine")) - continue; - - serializableFields.Add(field); - } - - var baseType = BaseType(type); - if (baseType != null && baseType != typeof(System.Object) && baseType != typeof(UnityEngine.Object)) - GetSerializableFields(BaseType(type), serializableFields, safe, memberNames); - - return serializableFields; - } - - public static List GetSerializableProperties(Type type, List serializableProperties = null, bool safe = true, string[] memberNames = null, BindingFlags bindings = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly) - { - bool isComponent = IsAssignableFrom(typeof(UnityEngine.Component), type); - - // Only get private properties if we're not getting properties safely. - if (!safe) - bindings = bindings | BindingFlags.NonPublic; - - var properties = type.GetProperties(bindings); - - if (serializableProperties == null) - serializableProperties = new List(); - - foreach (var p in properties) - { - if (AttributeIsDefined(p, es3SerializableAttributeType)) - { - serializableProperties.Add(p); - continue; - } - - if (AttributeIsDefined(p, es3NonSerializableAttributeType)) - continue; - - var propertyName = p.Name; - - if (excludedPropertyNames.Contains(propertyName)) - continue; - - // If a members array was provided as a parameter, only include the property if it's in the array. - if (memberNames != null) - if (!memberNames.Contains(propertyName)) - continue; - - if (safe) - { - // If safe serialization is enabled, only get properties which are explicitly marked as serializable. - if (!AttributeIsDefined(p, serializeFieldAttributeType) && !AttributeIsDefined(p, es3SerializableAttributeType)) - continue; - } - - var propertyType = p.PropertyType; - - // Don't store properties whose type is the same as the class the property is housed in unless it's stored by reference (to prevent cyclic references) - if (propertyType == type && !IsAssignableFrom(typeof(UnityEngine.Object), propertyType)) - continue; - - if (!p.CanRead || !p.CanWrite) - continue; - - // Only support properties with indexing if they're an array. - if (p.GetIndexParameters().Length != 0 && !propertyType.IsArray) - continue; - - // Check that the type of the property is one which we can serialize. - // Also check whether an ES3Type exists for it. - if (!TypeIsSerializable(propertyType)) - continue; - - // Ignore certain properties on components. - if (isComponent) - { - // Ignore properties which are accessors for GameObject fields. - if (propertyName == componentTagFieldName || propertyName == componentNameFieldName) - continue; - } - - // If property is marked as obsolete or non-serialized, don't serialize it. - if (AttributeIsDefined(p, obsoleteAttributeType) || AttributeIsDefined(p, nonSerializedAttributeType)) - continue; - - serializableProperties.Add(p); - } - - var baseType = BaseType(type); - if (baseType != null && baseType != typeof(System.Object)) - GetSerializableProperties(baseType, serializableProperties, safe, memberNames); - - return serializableProperties; - } - - public static bool TypeIsSerializable(Type type) - { - if (type == null) - return false; - - if (AttributeIsDefined(type, es3NonSerializableAttributeType)) - return false; - - if (IsPrimitive(type) || IsValueType(type) || IsAssignableFrom(typeof(UnityEngine.Component), type) || IsAssignableFrom(typeof(UnityEngine.ScriptableObject), type)) - return true; - - var es3Type = ES3TypeMgr.GetOrCreateES3Type(type, false); - - if (es3Type != null && !es3Type.isUnsupported) - return true; - - if (TypeIsArray(type)) - { - if (TypeIsSerializable(type.GetElementType())) - return true; - return false; - } - - var genericArgs = type.GetGenericArguments(); - for (int i = 0; i < genericArgs.Length; i++) - if (!TypeIsSerializable(genericArgs[i])) - return false; - - /*if (HasParameterlessConstructor(type)) - return true;*/ - return false; - } - - public static System.Object CreateInstance(Type type) - { - if (IsAssignableFrom(typeof(UnityEngine.Component), type)) - return ES3ComponentType.CreateComponent(type); - else if (IsAssignableFrom(typeof(ScriptableObject), type)) - return ScriptableObject.CreateInstance(type); - else if (ES3Reflection.HasParameterlessConstructor(type)) - return Activator.CreateInstance(type); - else - { -#if NETFX_CORE - throw new NotSupportedException($"Cannot create an instance of {type} because it does not have a parameterless constructor, which is required on Universal Windows platform."); -#else - return System.Runtime.Serialization.FormatterServices.GetUninitializedObject(type); -#endif - } - } - - public static System.Object CreateInstance(Type type, params object[] args) - { - if (IsAssignableFrom(typeof(UnityEngine.Component), type)) - return ES3ComponentType.CreateComponent(type); - else if (IsAssignableFrom(typeof(ScriptableObject), type)) - return ScriptableObject.CreateInstance(type); - return Activator.CreateInstance(type, args); - } - - public static Array ArrayCreateInstance(Type type, int length) - { - return Array.CreateInstance(type, new int[] { length }); - } - - public static Array ArrayCreateInstance(Type type, int[] dimensions) - { - return Array.CreateInstance(type, dimensions); - } - - public static Type MakeGenericType(Type type, Type genericParam) - { - return type.MakeGenericType(genericParam); - } - - public static ES3ReflectedMember[] GetSerializableMembers(Type type, bool safe = true, string[] memberNames = null) - { - if (type == null) - return new ES3ReflectedMember[0]; - - var fieldInfos = GetSerializableFields(type, new List(), safe, memberNames); - var propertyInfos = GetSerializableProperties(type, new List(), safe, memberNames); - var reflectedFields = new ES3ReflectedMember[fieldInfos.Count + propertyInfos.Count]; - - for (int i = 0; i < fieldInfos.Count; i++) - reflectedFields[i] = new ES3ReflectedMember(fieldInfos[i]); - for (int i = 0; i < propertyInfos.Count; i++) - reflectedFields[i + fieldInfos.Count] = new ES3ReflectedMember(propertyInfos[i]); - - return reflectedFields; - } - - public static ES3ReflectedMember GetES3ReflectedProperty(Type type, string propertyName) - { - var propertyInfo = ES3Reflection.GetProperty(type, propertyName); - return new ES3ReflectedMember(propertyInfo); - } - - public static ES3ReflectedMember GetES3ReflectedMember(Type type, string fieldName) - { - var fieldInfo = ES3Reflection.GetField(type, fieldName); - return new ES3ReflectedMember(fieldInfo); - } - - /* - * Finds all classes of a specific type, and then returns an instance of each. - * Ignores classes which can't be instantiated (i.e. abstract classes, those without parameterless constructors). - */ - public static IList GetInstances() - { - var instances = new List(); - foreach (var assembly in Assemblies) - foreach (var type in assembly.GetTypes()) - if (IsAssignableFrom(typeof(T), type) && ES3Reflection.HasParameterlessConstructor(type) && !ES3Reflection.IsAbstract(type)) - instances.Add((T)Activator.CreateInstance(type)); - return instances; - } - - public static IList GetDerivedTypes(Type derivedType) - { - return - ( - from assembly in Assemblies - from type in assembly.GetTypes() - where IsAssignableFrom(derivedType, type) - select type - ).ToList(); - } - - public static bool IsAssignableFrom(Type a, Type b) - { - return a.IsAssignableFrom(b); - } - - public static Type GetGenericTypeDefinition(Type type) - { - return type.GetGenericTypeDefinition(); - } - - public static Type[] GetGenericArguments(Type type) - { - return type.GetGenericArguments(); - } - - public static int GetArrayRank(Type type) - { - return type.GetArrayRank(); - } - - public static string GetAssemblyQualifiedName(Type type) - { - return type.AssemblyQualifiedName; - } - - public static ES3ReflectedMethod GetMethod(Type type, string methodName, Type[] genericParameters, Type[] parameterTypes) - { - return new ES3ReflectedMethod(type, methodName, genericParameters, parameterTypes); - } - - public static bool TypeIsArray(Type type) - { - return type.IsArray; - } - - public static Type GetElementType(Type type) - { - return type.GetElementType(); - } - -#if NETFX_CORE - public static bool IsAbstract(Type type) - { - return type.GetTypeInfo().IsAbstract; - } - - public static bool IsInterface(Type type) - { - return type.GetTypeInfo().IsInterface; - } - - public static bool IsGenericType(Type type) - { - return type.GetTypeInfo().IsGenericType; - } - - public static bool IsValueType(Type type) - { - return type.GetTypeInfo().IsValueType; - } - - public static bool IsEnum(Type type) - { - return type.GetTypeInfo().IsEnum; - } - - public static bool HasParameterlessConstructor(Type type) - { - return GetParameterlessConstructor(type) != null; - } - - public static ConstructorInfo GetParameterlessConstructor(Type type) - { - foreach (var cInfo in type.GetTypeInfo().DeclaredConstructors) - if (!cInfo.IsStatic && cInfo.GetParameters().Length == 0) - return cInfo; - return null; - } - - public static string GetShortAssemblyQualifiedName(Type type) - { - if (IsPrimitive (type)) - return type.ToString (); - return type.FullName + "," + type.GetTypeInfo().Assembly.GetName().Name; - } - - public static PropertyInfo GetProperty(Type type, string propertyName) - { - var property = type.GetTypeInfo().GetDeclaredProperty(propertyName); - if (property == null && type.BaseType != typeof(object)) - return GetProperty(type.BaseType, propertyName); - return property; - } - - public static FieldInfo GetField(Type type, string fieldName) - { - return type.GetTypeInfo().GetDeclaredField(fieldName); - } - - public static MethodInfo[] GetMethods(Type type, string methodName) - { - return type.GetTypeInfo().GetDeclaredMethods(methodName); - } - - public static bool IsPrimitive(Type type) - { - return (type.GetTypeInfo().IsPrimitive || type == typeof(string) || type == typeof(decimal)); - } - - public static bool AttributeIsDefined(MemberInfo info, Type attributeType) - { - var attributes = info.GetCustomAttributes(attributeType, true); - foreach(var attribute in attributes) - return true; - return false; - } - - public static bool AttributeIsDefined(Type type, Type attributeType) - { - var attributes = type.GetTypeInfo().GetCustomAttributes(attributeType, true); - foreach(var attribute in attributes) - return true; - return false; - } - - public static bool ImplementsInterface(Type type, Type interfaceType) - { - return type.GetTypeInfo().ImplementedInterfaces.Contains(interfaceType); - } - - public static Type BaseType(Type type) - { - return type.GetTypeInfo().BaseType; - } -#else - public static bool IsAbstract(Type type) - { - return type.IsAbstract; - } - - public static bool IsInterface(Type type) - { - return type.IsInterface; - } - - public static bool IsGenericType(Type type) - { - return type.IsGenericType; - } - - public static bool IsValueType(Type type) - { - return type.IsValueType; - } - - public static bool IsEnum(Type type) - { - return type.IsEnum; - } - - public static bool HasParameterlessConstructor(Type type) - { - if (IsValueType(type) || GetParameterlessConstructor(type) != null) - return true; - return false; - } - - public static ConstructorInfo GetParameterlessConstructor(Type type) - { - var constructors = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - - foreach (var constructor in constructors) - if (constructor.GetParameters().Length == 0) - return constructor; - return null; - } - - public static string GetShortAssemblyQualifiedName(Type type) - { - if (IsPrimitive(type)) - return type.ToString(); - return type.FullName + "," + type.Assembly.GetName().Name; - } - - public static PropertyInfo GetProperty(Type type, string propertyName) - { - var property = type.GetProperty(propertyName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - if (property == null && BaseType(type) != typeof(object)) - return GetProperty(BaseType(type), propertyName); - return property; - } - - public static FieldInfo GetField(Type type, string fieldName) - { - var field = type.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - if (field == null && BaseType(type) != typeof(object)) - return GetField(BaseType(type), fieldName); - return field; - } - - public static MethodInfo[] GetMethods(Type type, string methodName) - { - return type.GetMethods().Where(t => t.Name == methodName).ToArray(); - } - - public static bool IsPrimitive(Type type) - { - return (type.IsPrimitive || type == typeof(string) || type == typeof(decimal)); - } - - public static bool AttributeIsDefined(MemberInfo info, Type attributeType) - { - return Attribute.IsDefined(info, attributeType, true); - } - - public static bool AttributeIsDefined(Type type, Type attributeType) - { - return type.IsDefined(attributeType, true); - } - - public static bool ImplementsInterface(Type type, Type interfaceType) - { - return (type.GetInterface(interfaceType.Name) != null); - } - - public static Type BaseType(Type type) - { - return type.BaseType; - } - - public static Type GetType(string typeString) - { - switch (typeString) - { - case "bool": - return typeof(bool); - case "byte": - return typeof(byte); - case "sbyte": - return typeof(sbyte); - case "char": - return typeof(char); - case "decimal": - return typeof(decimal); - case "double": - return typeof(double); - case "float": - return typeof(float); - case "int": - return typeof(int); - case "uint": - return typeof(uint); - case "long": - return typeof(long); - case "ulong": - return typeof(ulong); - case "short": - return typeof(short); - case "ushort": - return typeof(ushort); - case "string": - return typeof(string); - case "Vector2": - return typeof(Vector2); - case "Vector3": - return typeof(Vector3); - case "Vector4": - return typeof(Vector4); - case "Color": - return typeof(Color); - case "Transform": - return typeof(Transform); - case "Component": - return typeof(UnityEngine.Component); - case "GameObject": - return typeof(GameObject); - case "MeshFilter": - return typeof(MeshFilter); - case "Material": - return typeof(Material); - case "Texture2D": - return typeof(Texture2D); - case "UnityEngine.Object": - return typeof(UnityEngine.Object); - case "System.Object": - return typeof(object); - default: - return Type.GetType(typeString); - } - } - - public static string GetTypeString(Type type) - { - if (type == typeof(bool)) - return "bool"; - else if (type == typeof(byte)) - return "byte"; - else if (type == typeof(sbyte)) - return "sbyte"; - else if (type == typeof(char)) - return "char"; - else if (type == typeof(decimal)) - return "decimal"; - else if (type == typeof(double)) - return "double"; - else if (type == typeof(float)) - return "float"; - else if (type == typeof(int)) - return "int"; - else if (type == typeof(uint)) - return "uint"; - else if (type == typeof(long)) - return "long"; - else if (type == typeof(ulong)) - return "ulong"; - else if (type == typeof(short)) - return "short"; - else if (type == typeof(ushort)) - return "ushort"; - else if (type == typeof(string)) - return "string"; - else if (type == typeof(Vector2)) - return "Vector2"; - else if (type == typeof(Vector3)) - return "Vector3"; - else if (type == typeof(Vector4)) - return "Vector4"; - else if (type == typeof(Color)) - return "Color"; - else if (type == typeof(Transform)) - return "Transform"; - else if (type == typeof(UnityEngine.Component)) - return "Component"; - else if (type == typeof(GameObject)) - return "GameObject"; - else if (type == typeof(MeshFilter)) - return "MeshFilter"; - else if (type == typeof(Material)) - return "Material"; - else if (type == typeof(Texture2D)) - return "Texture2D"; - else if (type == typeof(UnityEngine.Object)) - return "UnityEngine.Object"; - else if (type == typeof(object)) - return "System.Object"; - else - return GetShortAssemblyQualifiedName(type); - } -#endif - - /* - * Allows us to use FieldInfo and PropertyInfo interchangably. - */ - public struct ES3ReflectedMember - { - // The FieldInfo or PropertyInfo for this field. - private FieldInfo fieldInfo; - private PropertyInfo propertyInfo; - public bool isProperty; - - public bool IsNull { get { return fieldInfo == null && propertyInfo == null; } } - public string Name { get { return (isProperty ? propertyInfo.Name : fieldInfo.Name); } } - public Type MemberType { get { return (isProperty ? propertyInfo.PropertyType : fieldInfo.FieldType); } } - public bool IsPublic { get { return (isProperty ? (propertyInfo.GetGetMethod(true).IsPublic && propertyInfo.GetSetMethod(true).IsPublic) : fieldInfo.IsPublic); } } - public bool IsProtected { get { return (isProperty ? (propertyInfo.GetGetMethod(true).IsFamily) : fieldInfo.IsFamily); } } - public bool IsStatic { get { return (isProperty ? (propertyInfo.GetGetMethod(true).IsStatic) : fieldInfo.IsStatic); } } - - public ES3ReflectedMember(System.Object fieldPropertyInfo) - { - if (fieldPropertyInfo == null) - { - this.propertyInfo = null; - this.fieldInfo = null; - isProperty = false; - return; - } - - isProperty = ES3Reflection.IsAssignableFrom(typeof(PropertyInfo), fieldPropertyInfo.GetType()); - if (isProperty) - { - this.propertyInfo = (PropertyInfo)fieldPropertyInfo; - this.fieldInfo = null; - } - else - { - this.fieldInfo = (FieldInfo)fieldPropertyInfo; - this.propertyInfo = null; - } - } - - public void SetValue(System.Object obj, System.Object value) - { - if (isProperty) - propertyInfo.SetValue(obj, value, null); - else - fieldInfo.SetValue(obj, value); - } - - public System.Object GetValue(System.Object obj) - { - if (isProperty) - return propertyInfo.GetValue(obj, null); - else - return fieldInfo.GetValue(obj); - } - } - - public class ES3ReflectedMethod - { - private MethodInfo method; - - public ES3ReflectedMethod(Type type, string methodName, Type[] genericParameters, Type[] parameterTypes) - { - MethodInfo nonGenericMethod = type.GetMethod(methodName, parameterTypes); - this.method = nonGenericMethod.MakeGenericMethod(genericParameters); - } - - public ES3ReflectedMethod(Type type, string methodName, Type[] genericParameters, Type[] parameterTypes, BindingFlags bindingAttr) - { - MethodInfo nonGenericMethod = type.GetMethod(methodName, bindingAttr, null, parameterTypes, null); - this.method = nonGenericMethod.MakeGenericMethod(genericParameters); - } - - public object Invoke(object obj, object[] parameters = null) - { - return method.Invoke(obj, parameters); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Reflection.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3Reflection.cs.meta deleted file mode 100644 index e8d30de..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Reflection.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 499c212fb9e3c410dacca179f55ba150 -timeCreated: 1499764821 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3SerializableDictionary.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3SerializableDictionary.cs deleted file mode 100644 index 74a76a8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3SerializableDictionary.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using System.Linq; - -namespace ES3Internal -{ - [System.Serializable] - public abstract class ES3SerializableDictionary : Dictionary, ISerializationCallbackReceiver - { - [SerializeField] - private List _Keys; - [SerializeField] - private List _Values; - - protected abstract bool KeysAreEqual(TKey a, TKey b); - protected abstract bool ValuesAreEqual(TVal a, TVal b); - - public void OnBeforeSerialize() - { - _Keys = new List(); - _Values = new List(); - foreach(KeyValuePair pair in this) - { - try - { - _Keys.Add(pair.Key); - _Values.Add(pair.Value); - } - catch { } - } - } - - // load dictionary from lists - public void OnAfterDeserialize() - { - // There are some situations where Unity will not get the serialized data correctly, returning null. - // In this case we don't want to change anything, otherwise we'll lose the data entirely. - if (_Keys == null || _Values == null) - return; - - if(_Keys.Count != _Values.Count) - throw new System.Exception(string.Format("Key count is different to value count after deserialising dictionary.")); - - this.Clear(); - - for (int i = 0; i < _Keys.Count; i++) - { - if (_Keys[i] != null) - { - try - { - this.Add(_Keys[i], _Values[i]); - } - catch { } - } - } - - _Keys = null; - _Values = null; - } - - public int RemoveNullValues() - { - var nullKeys = this.Where(pair => pair.Value == null) - .Select(pair => pair.Key) - .ToList(); - foreach (var nullKey in nullKeys) - Remove(nullKey); - return nullKeys.Count; - } - - // Changes the key of a value without changing it's position in the underlying Lists. - // Mainly used in the Editor where position might otherwise change while the user is editing it. - // Returns true if a change was made. - public bool ChangeKey(TKey oldKey, TKey newKey) - { - if(KeysAreEqual(oldKey, newKey)) - return false; - - var val = this [oldKey]; - Remove(oldKey); - this [newKey] = val; - return true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3SerializableDictionary.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3SerializableDictionary.cs.meta deleted file mode 100644 index 50a99d2..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3SerializableDictionary.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 681896bd0089c4f7296b3ecbd899f44d -timeCreated: 1519132287 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Spreadsheet.cs b/Assets/Plugins/Easy Save 3/Scripts/ES3Spreadsheet.cs deleted file mode 100644 index cd3c1cc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Spreadsheet.cs +++ /dev/null @@ -1,307 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using System.IO; -using ES3Internal; - -#if UNITY_VISUAL_SCRIPTING -[Unity.VisualScripting.IncludeInSettings(true)] -#elif BOLT_VISUAL_SCRIPTING -[Ludiq.IncludeInSettings(true)] -#endif -public class ES3Spreadsheet -{ - private int cols = 0; - private int rows = 0; - private Dictionary cells = new Dictionary(); - - private const string QUOTE = "\""; - private const char QUOTE_CHAR = '"'; - private const char COMMA_CHAR = ','; - private const char NEWLINE_CHAR = '\n'; - private const string ESCAPED_QUOTE = "\"\""; - private static char[] CHARS_TO_ESCAPE = { ',', '"', '\n', ' ' }; - - public int ColumnCount - { - get{ return cols; } - } - - public int RowCount - { - get{ return rows; } - } - - public int GetColumnLength(int col) - { - if (col >= cols) - return 0; - - int maxRow = -1; - - foreach(var index in cells.Keys) - if (index.col == col && index.row > maxRow) - maxRow = index.row; - - return maxRow+1; - } - - public int GetRowLength(int row) - { - if (row >= rows) - return 0; - - int maxCol = -1; - - foreach (var index in cells.Keys) - if (index.row == row && index.col > maxCol) - maxCol = index.col; - - return maxCol + 1; - } - - public void SetCell(int col, int row, object value) - { - var type = value.GetType(); - - // If we're writing a string, add it without formatting. - if (type == typeof(string)) - { - SetCellString(col, row, (string)value); - return; - } - - var settings = new ES3Settings(); - if (ES3Reflection.IsPrimitive(type)) - SetCellString(col, row, value.ToString()); - else - SetCellString(col, row, settings.encoding.GetString(ES3.Serialize(value, ES3TypeMgr.GetOrCreateES3Type(type)))); - - // Expand the spreadsheet if necessary. - if (col >= cols) - cols = (col + 1); - if (row >= rows) - rows = (row + 1); - } - - private void SetCellString(int col, int row, string value) - { - cells [new Index (col, row)] = value; - - // Expand the spreadsheet if necessary. - if(col >= cols) - cols = (col+1); - if (row >= rows) - rows = (row + 1); - } - - - // Don't create non-generic version of this. Generic parameter is necessary as no type data is stored in the CSV file. - public T GetCell(int col, int row) - { - var val = GetCell(typeof(T), col, row); - - if (val == null) - return default(T); - return (T)val; - } - - public object GetCell(System.Type type, int col, int row) - { - string value; - - if (col >= cols || row >= rows) - throw new System.IndexOutOfRangeException("Cell (" + col + ", " + row + ") is out of bounds of spreadsheet (" + cols + ", " + rows + ")."); - - if (!cells.TryGetValue(new Index(col, row), out value) || value == null) - return null; - - // If we're loading a string, simply return the string value. - if (type == typeof(string)) - { - var str = (object)value; - return str; - } - - var settings = new ES3Settings(); - return ES3.Deserialize(ES3TypeMgr.GetOrCreateES3Type(type, true), settings.encoding.GetBytes(value), settings); - } - - public void Load(string filePath) - { - Load(new ES3Settings (filePath)); - } - - public void Load(string filePath, ES3Settings settings) - { - Load(new ES3Settings (filePath, settings)); - } - - public void Load(ES3Settings settings) - { - Load(ES3Stream.CreateStream(settings, ES3FileMode.Read), settings); - } - - public void LoadRaw(string str) - { - Load(new MemoryStream (((new ES3Settings ()).encoding).GetBytes(str)), new ES3Settings()); - } - - public void LoadRaw(string str, ES3Settings settings) - { - Load(new MemoryStream ((settings.encoding).GetBytes(str)), settings); - } - - private void Load(Stream stream, ES3Settings settings) - { - using (var reader = new StreamReader(stream)) - { - int c_int; - char c; - string value = ""; - int col = 0; - int row = 0; - - // Read until the end of the stream. - while(true) - { - c_int = reader.Read(); - c = (char)c_int; - if(c == QUOTE_CHAR) - { - while (true) - { - c = (char)reader.Read(); - - if(c == QUOTE_CHAR) - { - // If this quote isn't escaped by another, it is the last quote, so we should stop parsing this value. - if(((char)reader.Peek()) != QUOTE_CHAR) - break; - else - c = (char)reader.Read(); - } - value += c; - } - } - // If this is the end of a column, row, or the stream, add the value to the spreadsheet. - else if(c == COMMA_CHAR || c == NEWLINE_CHAR || c_int == -1) - { - SetCell(col, row, value); - value = ""; - if(c == COMMA_CHAR) - col++; - else if(c == NEWLINE_CHAR) - { - col = 0; - row++; - } - else - break; - } - else - value += c; - } - } - } - - public void Save(string filePath) - { - Save(new ES3Settings (filePath), false); - } - - public void Save(string filePath, ES3Settings settings) - { - Save(new ES3Settings (filePath, settings), false); - } - - public void Save(ES3Settings settings) - { - Save(settings, false); - } - - public void Save(string filePath, bool append) - { - Save(new ES3Settings (filePath), append); - } - - public void Save(string filePath, ES3Settings settings, bool append) - { - Save(new ES3Settings (filePath, settings), append); - } - - public void Save(ES3Settings settings, bool append) - { - using (var writer = new StreamWriter(ES3Stream.CreateStream(settings, append ? ES3FileMode.Append : ES3FileMode.Write))) - { - // If data already exists and we're appending, we need to prepend a newline. - if(append && ES3.FileExists(settings)) - writer.Write(NEWLINE_CHAR); - - var array = ToArray(); - for(int row = 0; row < rows; row++) - { - if(row != 0) - writer.Write(NEWLINE_CHAR); - - for(int col = 0; col < cols; col++) - { - if(col != 0) - writer.Write(COMMA_CHAR); - - writer.Write( Escape(array [col, row]) ); - } - } - } - if(!append) - ES3IO.CommitBackup(settings); - } - - private static string Escape(string str, bool isAlreadyWrappedInQuotes=false) - { - if (str == "") - return "\"\""; - else if(str == null) - return null; - - // Now escape any other quotes. - if(str.Contains(QUOTE)) - str = str.Replace(QUOTE, ESCAPED_QUOTE); - - // If there's chars to escape, wrap the value in quotes. - if(str.IndexOfAny(CHARS_TO_ESCAPE) > -1) - str = QUOTE + str + QUOTE; - return str; - } - - private static string Unescape(string str) - { - if(str.StartsWith(QUOTE) && str.EndsWith(QUOTE)) - { - str = str.Substring(1, str.Length-2); - if(str.Contains(ESCAPED_QUOTE)) - str = str.Replace(ESCAPED_QUOTE, QUOTE); - } - return str; - } - - private string[,] ToArray() - { - var array = new string[cols, rows]; - foreach (var cell in cells) - array [cell.Key.col, cell.Key.row] = cell.Value; - return array; - } - - protected struct Index - { - public int col; - public int row; - - public Index(int col, int row) - { - this.col = col; - this.row = row; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/ES3Spreadsheet.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/ES3Spreadsheet.cs.meta deleted file mode 100644 index ad2f748..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/ES3Spreadsheet.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bb1f812633929432dabb61bb8de267ba -timeCreated: 1508838134 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Readers.meta b/Assets/Plugins/Easy Save 3/Scripts/Readers.meta deleted file mode 100644 index 3fce668..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Readers.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 23cb117b6fd3547afa9766976f6dbd18 -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs b/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs deleted file mode 100644 index fb3e06b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs +++ /dev/null @@ -1,571 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using System.IO; -using System.Text; -using System; -using ES3Types; -using System.Globalization; - -namespace ES3Internal -{ - /* - * Specific ES3Reader for reading JSON data. - * - * Note: Leading & trailing whitespace is ignored whenever - * reading characters which are part of the JSON syntax, - * i.e. { } [ ] , " " : - */ - public class ES3JSONReader : ES3Reader - { - private const char endOfStreamChar = (char)65535; - - public StreamReader baseReader; - - internal ES3JSONReader(Stream stream, ES3Settings settings, bool readHeaderAndFooter = true) : base(settings, readHeaderAndFooter) - { - this.baseReader = new StreamReader(stream); - - // Read opening brace from file if we're loading straight from file. - if(readHeaderAndFooter) - { - try - { - SkipOpeningBraceOfFile(); - } - catch - { - this.Dispose(); - throw new FormatException("Cannot load from file because the data in it is not JSON data, or the data is encrypted.\nIf the save data is encrypted, please ensure that encryption is enabled when you load, and that you are using the same password used to encrypt the data."); - } - } - } - - #region Property/Key Methods - - /* - * Reads the name of a property, and must be positioned (with or without whitespace) either: - * - Before the '"' of a property name. - * - Before the ',' separating properties. - * - Before the '}' or ']' terminating this list of properties. - * Can be used in conjunction with Read(ES3Type) to read a property. - */ - public override string ReadPropertyName() - { - char c = PeekCharIgnoreWhitespace(); - - // Check whether there are any properties left to read. - if(IsTerminator(c)) - return null; - else if(c == ',') - ReadCharIgnoreWhitespace(); - else if(!IsQuotationMark(c)) - throw new FormatException("Expected ',' separating properties or '\"' before property name, found '"+c+"'."); - - var propertyName = Read_string(); - if(propertyName == null) - throw new FormatException("Stream isn't positioned before a property."); - - ES3Debug.Log(""+propertyName+" (reading property)", null, serializationDepth); - - // Skip the ':' seperating property and value. - ReadCharIgnoreWhitespace(':'); - - return propertyName; - } - - /* - * Reads the type data prefixed to this key. - * If ignore is true, it will return null to save the computation of converting - * the string to a Type. - */ - protected override Type ReadKeyPrefix(bool ignoreType=false) - { - StartReadObject(); - - Type dataType = null; - - string propertyName = ReadPropertyName(); - if(propertyName == ES3Type.typeFieldName) - { - string typeString = Read_string(); - dataType = ignoreType ? null : ES3Reflection.GetType(typeString); - propertyName = ReadPropertyName(); - } - - if(propertyName != "value") - throw new FormatException("This data is not Easy Save Key Value data. Expected property name \"value\", found \""+propertyName+"\"."); - - return dataType; - } - - protected override void ReadKeySuffix() - { - EndReadObject(); - } - - - internal override bool StartReadObject() - { - base.StartReadObject(); - return ReadNullOrCharIgnoreWhitespace('{'); - } - - internal override void EndReadObject() - { - ReadCharIgnoreWhitespace('}'); - base.EndReadObject(); - } - - - internal override bool StartReadDictionary() - { - return StartReadObject(); - } - - internal override void EndReadDictionary(){} - - internal override bool StartReadDictionaryKey() - { - // If this is an empty Dictionary, return false. - if(PeekCharIgnoreWhitespace() == '}') - { - ReadCharIgnoreWhitespace(); - return false; - } - return true; - } - - internal override void EndReadDictionaryKey() - { - ReadCharIgnoreWhitespace(':'); - } - - internal override void StartReadDictionaryValue(){} - - internal override bool EndReadDictionaryValue() - { - char c = ReadCharIgnoreWhitespace(); - // If we find a ']', we reached the end of the array. - if(c == '}') - return true; - // Else, we should expect a comma. - else if(c != ',') - throw new FormatException("Expected ',' seperating Dictionary items or '}' terminating Dictionary, found '"+c+"'."); - return false; - } - - - internal override bool StartReadCollection() - { - return ReadNullOrCharIgnoreWhitespace('['); - } - - internal override void EndReadCollection(){} - - internal override bool StartReadCollectionItem() - { - // If this is an empty collection, return false. - if(PeekCharIgnoreWhitespace() == ']') - { - ReadCharIgnoreWhitespace(); - return false; - } - return true; - } - - internal override bool EndReadCollectionItem() - { - char c = ReadCharIgnoreWhitespace(); - // If we find a ']', we reached the end of the array. - if(c == ']') - return true; - // Else, we should expect a comma. - else if(c != ',') - throw new FormatException("Expected ',' seperating collection items or ']' terminating collection, found '"+c+"'."); - return false; - } - - #endregion - - #region Seeking Methods - - /* - * Reads a string value into a StreamWriter. - * Reader should be positioned after the opening quotation mark. - * Will also read the closing quotation mark. - * If the 'skip' parameter is true, data will not be written into a StreamWriter and will return null. - */ - private void ReadString(StreamWriter writer, bool skip=false) - { - bool endOfString = false; - // Read to end of string, or throw error if we reach end of stream. - while(!endOfString) - { - char c = ReadOrSkipChar(writer, skip); - switch(c) - { - case endOfStreamChar: - throw new FormatException("String without closing quotation mark detected."); - case '\\': - ReadOrSkipChar(writer, skip); - break; - default: - if(IsQuotationMark(c)) - endOfString = true; - break; - } - } - } - - /* - * Reads the current object in the stream. - * Stream position should be somewhere before the opening brace for the object. - * When this method successfully exits, it will be on the closing brace for the object. - * If the 'skip' parameter is true, data will not be written into a StreamWriter and will return null. - */ - internal override byte[] ReadElement(bool skip=false) - { - // If 'skip' is enabled, don't create a stream or writer as we'll discard all bytes we read. - StreamWriter writer = skip ? null : new StreamWriter(new MemoryStream(settings.bufferSize)); - - using(writer) - { - int nesting = 0; - char c = (char)baseReader.Peek(); - - // Determine if we're skipping a primitive type. - // First check if it's an opening object or array brace. - if(!IsOpeningBrace(c)) - { - // If we're skipping a string, use SkipString(). - if(c == '\"') - { - // Skip initial quotation mark as SkipString() requires this. - ReadOrSkipChar(writer, skip); - ReadString(writer, skip); - } - // Else we just need to read until we reach a closing brace. - else - // While we've not peeked a closing brace. - while(!IsEndOfValue((char)baseReader.Peek())) - ReadOrSkipChar(writer, skip); - - if(skip) - return null; - writer.Flush(); - return ((MemoryStream)writer.BaseStream).ToArray(); - } - - // Else, we're skipping a type surrounded by braces. - // Iterate through every character, logging nesting. - while(true) - { - c = ReadOrSkipChar(writer, skip); - - if(c == endOfStreamChar) // Detect premature end of stream, which denotes missing closing brace. - throw new FormatException("Missing closing brace detected, as end of stream was reached before finding it."); - - // Handle quoted strings. - // According to the RFC, only '\' and '"' must be escaped in strings. - if(IsQuotationMark(c)) - { - ReadString(writer, skip); - continue; - } - - // Handle braces and other characters. - switch(c) - { - case '{': // Entered another level of nesting. - case '[': - nesting++; - break; - case '}': // Exited a level of nesting. - case ']': - nesting--; - // If nesting < 1, we've come to the end of the object. - if(nesting<1) - { - if(skip) - return null; - writer.Flush(); - return ((MemoryStream)writer.BaseStream).ToArray(); - } - break; - default: - break; - } - } - } - } - - /* - * Reads the next char into a stream, or ignores it if 'skip' is true. - */ - private char ReadOrSkipChar(StreamWriter writer, bool skip) - { - char c = (char)baseReader.Read(); - if(!skip) writer.Write(c); - return c; - } - - #endregion - - #region JSON-specific methods. - - /* - * Reads a char from the stream and ignores leading and trailing whitespace. - */ - private char ReadCharIgnoreWhitespace(bool ignoreTrailingWhitespace=true) - { - char c; - // Skip leading whitespace and read char. - while(IsWhiteSpace(c = (char)baseReader.Read())) - {} - - // Skip trailing whitespace. - if(ignoreTrailingWhitespace) - while(IsWhiteSpace((char)baseReader.Peek())) - baseReader.Read(); - - return c; - } - - /* - * Reads a char, or the NULL value, from the stream and ignores leading and trailing whitespace. - * Returns true if NULL was read. - */ - private bool ReadNullOrCharIgnoreWhitespace(char expectedChar) - { - char c = ReadCharIgnoreWhitespace(); - - // Check for null - if(c == 'n') - { - var chars = new char[3]; - baseReader.ReadBlock(chars, 0, 3); - if((char)chars[0] == 'u' && (char)chars[1] == 'l' && (char)chars[2] == 'l') - return true; - } - - if(c != expectedChar) - { - if(c == endOfStreamChar) - throw new FormatException("End of stream reached when expecting '"+expectedChar+"'."); - else - throw new FormatException("Expected \'"+expectedChar+"\' or \"null\", found \'"+c+"\'."); - } - return false; - } - - /* - * Reads a char from the stream and ignores leading and trailing whitespace. - * Throws an error if the char isn't equal to the one specificed as a parameter, or if it's the end of stream. - */ - private char ReadCharIgnoreWhitespace(char expectedChar) - { - char c = ReadCharIgnoreWhitespace(); - if(c != expectedChar) - { - if(c == endOfStreamChar) - throw new FormatException("End of stream reached when expecting '"+expectedChar+"'."); - else - throw new FormatException("Expected \'"+expectedChar+"\', found \'"+c+"\'."); - } - return c; - } - - private bool ReadQuotationMarkOrNullIgnoreWhitespace() - { - char c = ReadCharIgnoreWhitespace(false); // Don't read trailing whitespace as this is the value. - - if(c == 'n') - { - var chars = new char[3]; - baseReader.ReadBlock(chars, 0, 3); - if((char)chars[0] == 'u' && (char)chars[1] == 'l' && (char)chars[2] == 'l') - return true; - } - else if(!IsQuotationMark(c)) - { - if(c == endOfStreamChar) - throw new FormatException("End of stream reached when expecting quotation mark."); - else - throw new FormatException("Expected quotation mark, found \'"+c+"\'."); - } - return false; - } - - /* - * Peeks the next char in the stream, ignoring leading whitespace, but not trailing whitespace. - */ - private char PeekCharIgnoreWhitespace(char expectedChar) - { - char c = PeekCharIgnoreWhitespace(); - if(c != expectedChar) - { - if(c == endOfStreamChar) - throw new FormatException("End of stream reached while peeking, when expecting '"+expectedChar+"'."); - else - throw new FormatException("Expected \'"+expectedChar+"\', found \'"+c+"\'."); - } - return c; - } - - /* - * Peeks the next char in the stream, ignoring leading whitespace, but not trailing whitespace. - * Throws an error if the char isn't equal to the one specificed as a parameter. - */ - private char PeekCharIgnoreWhitespace() - { - char c; - // Skip leading whitespace and read char. - while(IsWhiteSpace(c = (char)baseReader.Peek())) - baseReader.Read(); - return c; - } - - // Skips all whitespace immediately after the current position. - private void SkipWhiteSpace() - { - while(IsWhiteSpace((char)baseReader.Peek())) - baseReader.Read(); - } - - private void SkipOpeningBraceOfFile() - { - // Skip the whitespace and '{' at the beginning of the JSON file. - char firstChar = ReadCharIgnoreWhitespace(); - if(firstChar != '{') // If first char isn't '{', it's not valid JSON. - throw new FormatException("File is not valid JSON. Expected '{' at beginning of file, but found '"+firstChar+"'."); - } - - private static bool IsWhiteSpace(char c) - { - return (c == ' ' || c == '\t' || c == '\n' || c == '\r'); - } - - private static bool IsOpeningBrace(char c) - { - return (c == '{' || c == '['); - } - - private static bool IsEndOfValue(char c) - { - return (c == '}' || c == ' ' || c == '\t' || c == ']' || c == ',' || c== ':' || c == endOfStreamChar || c == '\n' || c == '\r'); - } - - private static bool IsTerminator(char c) - { - return (c == '}' || c == ']'); - } - - private static bool IsQuotationMark(char c) - { - return c == '\"' || c == '“' || c == '”'; - } - - private static bool IsEndOfStream(char c) - { - return c == endOfStreamChar; - } - - /* - * Reads a value (i.e. non-string, non-object) from the stream as a string. - * Used mostly in Read_[type]() methods. - */ - private string GetValueString() - { - StringBuilder builder = new StringBuilder(); - - while(!IsEndOfValue(PeekCharIgnoreWhitespace())) - builder.Append((char)baseReader.Read()); - - // If it's an empty value, return null. - if(builder.Length == 0) - return null; - return builder.ToString(); - } - - #endregion - - #region Primitive Read() Methods. - - internal override string Read_string() - { - if(ReadQuotationMarkOrNullIgnoreWhitespace()) - return null; - char c; - - StringBuilder sb = new StringBuilder(); - - while(!IsQuotationMark((c = (char)baseReader.Read()))) - { - // If escape mark is found, generate correct escaped character. - if(c == '\\') - { - c = (char)baseReader.Read(); - if(IsEndOfStream(c)) - throw new FormatException("Reached end of stream while trying to read string literal."); - - switch(c) - { - case 'b': - c = '\b'; - break; - case 'f': - c = '\f'; - break; - case 'n': - c = '\n'; - break; - case 'r': - c = '\r'; - break; - case 't': - c = '\t'; - break; - default: - break; - } - } - sb.Append(c); - } - return sb.ToString(); - } - - internal override long Read_ref() - { - if (ES3ReferenceMgr.Current == null) - throw new InvalidOperationException("An Easy Save 3 Manager is required to load references. To add one to your scene, exit playmode and go to Tools > Easy Save 3 > Add Manager to Scene"); - if (IsQuotationMark(PeekCharIgnoreWhitespace())) - return long.Parse(Read_string()); - return Read_long(); - } - - internal override char Read_char() { return char.Parse( Read_string()); } - internal override float Read_float() { return float.Parse( GetValueString(), CultureInfo.InvariantCulture); } - internal override int Read_int() { return int.Parse( GetValueString()); } - internal override bool Read_bool() { return bool.Parse( GetValueString()); } - internal override decimal Read_decimal() { return decimal.Parse( GetValueString(), CultureInfo.InvariantCulture); } - internal override double Read_double() { return double.Parse( GetValueString(), CultureInfo.InvariantCulture); } - internal override long Read_long() { return long.Parse( GetValueString()); } - internal override ulong Read_ulong() { return ulong.Parse( GetValueString()); } - internal override uint Read_uint() { return uint.Parse( GetValueString()); } - internal override byte Read_byte() { return (byte)int.Parse( GetValueString()); } - internal override sbyte Read_sbyte() { return (sbyte)int.Parse( GetValueString()); } - internal override short Read_short() { return (short)int.Parse( GetValueString()); } - internal override ushort Read_ushort() { return (ushort)int.Parse( GetValueString()); } - - internal override byte[] Read_byteArray(){ return System.Convert.FromBase64String(Read_string()); } - - #endregion - - - public override void Dispose() - { - baseReader.Dispose(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs.meta deleted file mode 100644 index 663a6bb..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8757682770a6c4537a3dcbed278277bc -timeCreated: 1499764822 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs b/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs deleted file mode 100644 index 51d9653..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs +++ /dev/null @@ -1,459 +0,0 @@ -using UnityEngine; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System; -using System.ComponentModel; -using ES3Types; -using ES3Internal; - -public abstract class ES3Reader : System.IDisposable -{ - /// The settings used to create this reader. - public ES3Settings settings; - - protected int serializationDepth = 0; - - #region ES3Reader Abstract Methods - - internal abstract int Read_int(); - internal abstract float Read_float(); - internal abstract bool Read_bool(); - internal abstract char Read_char(); - internal abstract decimal Read_decimal(); - internal abstract double Read_double(); - internal abstract long Read_long(); - internal abstract ulong Read_ulong(); - internal abstract byte Read_byte(); - internal abstract sbyte Read_sbyte(); - internal abstract short Read_short(); - internal abstract ushort Read_ushort(); - internal abstract uint Read_uint(); - internal abstract string Read_string(); - internal abstract byte[] Read_byteArray(); - internal abstract long Read_ref(); - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public abstract string ReadPropertyName(); - - protected abstract Type ReadKeyPrefix(bool ignore = false); - protected abstract void ReadKeySuffix(); - internal abstract byte[] ReadElement(bool skip=false); - - /// Disposes of the reader and it's underlying stream. - public abstract void Dispose(); - - // Seeks to the given key. Note that the stream position will not be reset. - internal virtual bool Goto(string key) - { - if (key == null) - throw new ArgumentNullException("Key cannot be NULL when loading data."); - - string currentKey; - while ((currentKey = ReadPropertyName()) != key) - { - if (currentKey == null) - return false; - Skip(); - } - return true; - } - - internal virtual bool StartReadObject() - { - serializationDepth++; - return false; - } - - internal virtual void EndReadObject() - { - serializationDepth--; - } - - internal abstract bool StartReadDictionary(); - internal abstract void EndReadDictionary(); - internal abstract bool StartReadDictionaryKey(); - internal abstract void EndReadDictionaryKey(); - internal abstract void StartReadDictionaryValue(); - internal abstract bool EndReadDictionaryValue(); - - internal abstract bool StartReadCollection(); - internal abstract void EndReadCollection(); - internal abstract bool StartReadCollectionItem(); - internal abstract bool EndReadCollectionItem(); - - #endregion - - internal ES3Reader(ES3Settings settings, bool readHeaderAndFooter = true) - { - this.settings = settings; - } - - // If this is not null, the next call to the Properties will return this name. - internal string overridePropertiesName = null; - /// Allows you to enumerate over each field name. This should only be used within an ES3Type file. - public virtual ES3ReaderPropertyEnumerator Properties - { - get - { - return new ES3ReaderPropertyEnumerator (this); - } - } - - internal virtual ES3ReaderRawEnumerator RawEnumerator - { - get - { - return new ES3ReaderRawEnumerator (this); - } - } - - /* - * Skips the current object in the stream. - * Stream position should be somewhere before the opening brace for the object. - * When this method successfully exits, it will be on the closing brace for the object. - */ - /// Skips the current object in the stream. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void Skip() - { - ReadElement(true); - } - - /// Reads a value of type T from the reader. - public virtual T Read() - { - return Read(ES3TypeMgr.GetOrCreateES3Type(typeof(T))); - } - - /// Reads a value of type T from the reader into an existing object. - /// The object we want to read our value into. - public virtual void ReadInto(object obj) - { - ReadInto(obj, ES3TypeMgr.GetOrCreateES3Type(typeof(T))); - } - - /// Reads a property (i.e. a property name and value) from the reader, ignoring the property name and only returning the value. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public T ReadProperty() - { - return ReadProperty(ES3TypeMgr.GetOrCreateES3Type(typeof(T))); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public T ReadProperty(ES3Type type) - { - ReadPropertyName(); - return Read(type); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public long ReadRefProperty() - { - ReadPropertyName(); - return Read_ref(); - } - - internal Type ReadType() - { - return ES3Reflection.GetType(Read(ES3Type_string.Instance)); - } - - /// Sets the value of a private property on an object. - /// The name of the property we want to set. - /// The value we want to set the property to. - /// The object containing the property we want to set. - /// The objectContainingProperty object. This is helpful if you're setting a private property on a struct or other immutable type and need to return the boxed value. - public object SetPrivateProperty(string name, object value, object objectContainingProperty) - { - var property = ES3Reflection.GetES3ReflectedProperty(objectContainingProperty.GetType(), name); - if (property.IsNull) - throw new MissingMemberException("A private property named " + name + " does not exist in the type " + objectContainingProperty.GetType()); - property.SetValue(objectContainingProperty, value); - return objectContainingProperty; - } - - /// Sets the value of a private field on an object. - /// The name of the field we want to set. - /// The value we want to set the field to. - /// The object containing the field we want to set. - /// The objectContainingField object. This is helpful if you're setting a private property on a struct or other immutable type and need to return the boxed value. - public object SetPrivateField(string name, object value, object objectContainingField) - { - var field = ES3Reflection.GetES3ReflectedMember(objectContainingField.GetType(), name); - if(field.IsNull) - throw new MissingMemberException("A private field named "+ name + " does not exist in the type "+objectContainingField.GetType()); - field.SetValue(objectContainingField, value); - return objectContainingField; - } - - #region Read(key) & Read(key, obj) methods - - /// Reads a value from the reader with the given key. - /// The key which uniquely identifies our value. - public virtual T Read(string key) - { - if(!Goto(key)) - throw new KeyNotFoundException("Key \"" + key + "\" was not found in file \""+settings.FullPath+"\". Use Load(key, defaultValue) if you want to return a default value if the key does not exist."); - - Type type = ReadTypeFromHeader(); - - T obj = Read(ES3TypeMgr.GetOrCreateES3Type(type)); - - //ReadKeySuffix(); //No need to read key suffix as we're returning. Doing so would throw an error at this point for BinaryReaders. - return obj; - } - - /// Reads a value from the reader with the given key, returning the default value if the key does not exist. - /// The key which uniquely identifies our value. - /// The value we want to return if this key does not exist in the reader. - public virtual T Read(string key, T defaultValue) - { - if(!Goto(key)) - return defaultValue; - - Type type = ReadTypeFromHeader(); - T obj = Read(ES3TypeMgr.GetOrCreateES3Type(type)); - - //ReadKeySuffix(); //No need to read key suffix as we're returning. Doing so would throw an error at this point for BinaryReaders. - return obj; - } - - /// Reads a value from the reader with the given key into the provided object. - /// The key which uniquely identifies our value. - /// The object we want to load the value into. - public virtual void ReadInto(string key, T obj) where T : class - { - if(!Goto(key)) - throw new KeyNotFoundException("Key \"" + key + "\" was not found in file \""+settings.FullPath+"\""); - - Type type = ReadTypeFromHeader(); - - ReadInto(obj, ES3TypeMgr.GetOrCreateES3Type(type)); - - //ReadKeySuffix(); //No need to read key suffix as we're returning. Doing so would throw an error at this point for BinaryReaders. - } - - protected virtual void ReadObject(object obj, ES3Type type) - { - // Check for null. - if(StartReadObject()) - return; - - type.ReadInto(this, obj); - - EndReadObject(); - } - - protected virtual T ReadObject(ES3Type type) - { - if(StartReadObject()) - return default(T); - - object obj = type.Read(this); - - EndReadObject(); - return (T)obj; - } - - - #endregion - - #region Read(ES3Type) & Read(obj,ES3Type) methods - - /* - * Parses the next JSON Object in the stream (i.e. must be between '{' and '}' chars). - * If the first character in the Stream is not a '{', it will throw an error. - * Will also read the terminating '}'. - * If we have reached the end of stream, it will return null. - */ - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual T Read(ES3Type type) - { - if (type == null || type.isUnsupported) - throw new NotSupportedException("Type of " + type + " is not currently supported, and could not be loaded using reflection."); - else if (type.isPrimitive) - return (T)type.Read(this); - else if (type.isCollection) - return (T)((ES3CollectionType)type).Read(this); - else if (type.isDictionary) - return (T)((ES3DictionaryType)type).Read(this); - else - return ReadObject(type); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void ReadInto(object obj, ES3Type type) - { - if(type == null || type.isUnsupported) - throw new NotSupportedException("Type of "+obj.GetType()+" is not currently supported, and could not be loaded using reflection."); - - else if(type.isCollection) - ((ES3CollectionType)type).ReadInto(this, obj); - else if(type.isDictionary) - ((ES3DictionaryType)type).ReadInto(this, obj); - else - ReadObject(obj, type); - } - - - #endregion - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - internal Type ReadTypeFromHeader() - { - // Check whether we need to determine the type by reading the header. - if(typeof(T) == typeof(object)) - return ReadKeyPrefix(); - else if(settings.typeChecking) - { - Type type = ReadKeyPrefix(); - - if(type == null) - throw new TypeLoadException("Trying to load data of type " + typeof(T) + ", but the type of data contained in file no longer exists. This may be because the type has been removed from your project or renamed."); - else if (type != typeof(T)) - throw new InvalidOperationException("Trying to load data of type " + typeof(T) + ", but data contained in file is type of " + type + "."); - - return type; - } - else - { - ReadKeyPrefix(true); - return typeof(T); - } - } - - /// Creates a new ES3Reader and loads the default file into it. - public static ES3Reader Create() - { - return Create(new ES3Settings()); - } - - /// Creates a new ES3Reader and loads a file in storage into it. - /// The relative or absolute path of the file we want to load into the reader. - public static ES3Reader Create(string filePath) - { - return Create(new ES3Settings(filePath)); - } - - /// Creates a new ES3Reader and loads a file in storage into it. - /// The relative or absolute path of the file we want to load into the reader. - /// The settings we want to use to override the default settings. - public static ES3Reader Create(string filePath, ES3Settings settings) - { - return Create(new ES3Settings(filePath, settings)); - } - - /// Creates a new ES3Reader and loads a file in storage into it. - /// The settings we want to use to override the default settings. - public static ES3Reader Create(ES3Settings settings) - { - Stream stream = ES3Stream.CreateStream(settings, ES3FileMode.Read); - if(stream == null) - return null; - - // Get the baseWriter using the given Stream. - if (settings.format == ES3.Format.JSON) - return new ES3JSONReader(stream, settings); - return null; - } - - /// Creates a new ES3Reader and loads the bytes provided into it. - public static ES3Reader Create(byte[] bytes) - { - return Create(bytes, new ES3Settings()); - } - - /// Creates a new ES3Reader and loads the bytes provided into it. - /// The settings we want to use to override the default settings. - public static ES3Reader Create(byte[] bytes, ES3Settings settings) - { - Stream stream = ES3Stream.CreateStream(new MemoryStream(bytes), settings, ES3FileMode.Read); - if(stream == null) - return null; - - // Get the baseWriter using the given Stream. - if(settings.format == ES3.Format.JSON) - return new ES3JSONReader(stream, settings); - return null; - } - - internal static ES3Reader Create(Stream stream, ES3Settings settings) - { - stream = ES3Stream.CreateStream(stream, settings, ES3FileMode.Read); - - // Get the baseWriter using the given Stream. - if(settings.format == ES3.Format.JSON) - return new ES3JSONReader(stream, settings); - return null; - } - - internal static ES3Reader Create(Stream stream, ES3Settings settings, bool readHeaderAndFooter) - { - // Get the baseWriter using the given Stream. - if(settings.format == ES3.Format.JSON) - return new ES3JSONReader(stream, settings, readHeaderAndFooter); - return null; - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public class ES3ReaderPropertyEnumerator - { - public ES3Reader reader; - - public ES3ReaderPropertyEnumerator(ES3Reader reader) - { - this.reader = reader; - } - - public IEnumerator GetEnumerator() - { - string propertyName; - while(true) - { - // Allows us to repeat a property name or insert one of our own. - if(reader.overridePropertiesName != null) - { - string tempName = reader.overridePropertiesName; - reader.overridePropertiesName = null; - yield return tempName; - } - else - { - if((propertyName = reader.ReadPropertyName()) == null) - yield break; - yield return propertyName; - } - } - } - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public class ES3ReaderRawEnumerator - { - public ES3Reader reader; - - public ES3ReaderRawEnumerator(ES3Reader reader) - { - this.reader = reader; - } - - public IEnumerator GetEnumerator() - { - while(true) - { - string key = reader.ReadPropertyName(); - if(key == null) - yield break; - - Type type = reader.ReadTypeFromHeader(); - - byte[] bytes = reader.ReadElement(); - - reader.ReadKeySuffix(); - - if(type != null) - yield return new KeyValuePair(key, new ES3Data(type, bytes)); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs.meta deleted file mode 100644 index 48dcb67..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f511cfa2663a045aeac7dfe13754efba -timeCreated: 1519132300 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3XMLReader.cs b/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3XMLReader.cs deleted file mode 100644 index 3b73629..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3XMLReader.cs +++ /dev/null @@ -1,5 +0,0 @@ - -public class ES3XMLReader -{ - // Not Implemented -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3XMLReader.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3XMLReader.cs.meta deleted file mode 100644 index b824bde..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Readers/ES3XMLReader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2ef972c40e0163f4c873b7e18c0e24fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Referencing.meta b/Assets/Plugins/Easy Save 3/Scripts/Referencing.meta deleted file mode 100644 index 54e00d8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Referencing.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7aae016e8c4b7924290cd0904f1509b5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Referencing/ES3GlobalReferences.cs b/Assets/Plugins/Easy Save 3/Scripts/Referencing/ES3GlobalReferences.cs deleted file mode 100644 index eb09e31..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Referencing/ES3GlobalReferences.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace ES3Internal -{ - public class ES3GlobalReferences : ScriptableObject - { -#if !UNITY_EDITOR || ES3GLOBAL_DISABLED - public static ES3GlobalReferences Instance{ get{ return null; } } - public UnityEngine.Object Get(long id){return null;} - public long GetOrAdd(UnityEngine.Object obj){return -1;} - public void RemoveInvalidKeys(){} -#else - -#if ES3GLOBAL_DISABLED - private static bool useGlobalReferences = false; -#else - private static bool useGlobalReferences = true; -#endif - - private const string globalReferencesPath = "ES3/ES3GlobalReferences"; - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public ES3RefIdDictionary refId = new ES3RefIdDictionary(); - - private static ES3GlobalReferences _globalReferences = null; - public static ES3GlobalReferences Instance - { - get - { - if (Application.isPlaying) - return null; - - if (!useGlobalReferences) - return null; - - if (_globalReferences == null) - { - _globalReferences = Resources.Load(globalReferencesPath); - - if (_globalReferences == null) - { - _globalReferences = ScriptableObject.CreateInstance(); - - // If this is the version being submitted to the Asset Store, don't include ES3Defaults. - if (Application.productName.Contains("ES3 Release")) - { - Debug.Log("This has been identified as a release build as the title contains 'ES3 Release', so ES3GlobalReferences will not be created."); - return _globalReferences; - } - - ES3Settings.CreateDefaultSettingsFolder(); - UnityEditor.AssetDatabase.CreateAsset(_globalReferences, PathToGlobalReferences()); - UnityEditor.AssetDatabase.SaveAssets(); - } - - } - - return _globalReferences; - } - } - - private long Get(UnityEngine.Object obj) - { - if (obj == null) - return -1; - - long id; - if (!refId.TryGetValue(obj, out id)) - return -1; - return id; - } - - public UnityEngine.Object Get(long id) - { - foreach(var kvp in refId) - if (kvp.Value == id) - return kvp.Key; - return null; - } - - public void RemoveInvalidKeys() - { - var newRefId = new ES3RefIdDictionary(); - foreach (var kvp in refId) - { - var obj = kvp.Key; - if (obj == null) - continue; - - if ((((obj.hideFlags & HideFlags.DontSave) == HideFlags.DontSave) || - ((obj.hideFlags & HideFlags.DontSaveInBuild) == HideFlags.DontSaveInBuild) || - ((obj.hideFlags & HideFlags.DontSaveInEditor) == HideFlags.DontSaveInEditor) || - ((obj.hideFlags & HideFlags.HideAndDontSave) == HideFlags.HideAndDontSave))) - { - var type = obj.GetType(); - // Meshes are marked with HideAndDontSave, but shouldn't be ignored. - if (type != typeof(Mesh) && type != typeof(Material)) - continue; - } - newRefId[obj] = kvp.Value; - } - refId = newRefId; - } - - public long GetOrAdd(UnityEngine.Object obj) - { - var id = Get(obj); - - // Only add items to global references when it's not playing. - if (!Application.isPlaying && id == -1 && UnityEditor.AssetDatabase.Contains(obj) && ES3ReferenceMgr.CanBeSaved(obj)) - { - id = ES3ReferenceMgrBase.GetNewRefID(); - refId.Add(obj, id); - - UnityEditor.EditorUtility.SetDirty(this); - } - - return id; - } - - private static string PathToGlobalReferences() - { - return ES3Settings.PathToEasySaveFolder() + "Resources/" + globalReferencesPath +".asset"; - } -#endif - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Referencing/ES3GlobalReferences.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Referencing/ES3GlobalReferences.cs.meta deleted file mode 100644 index 591df09..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Referencing/ES3GlobalReferences.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e6b16dc7c203450459bb86e24305f9ca -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots.meta b/Assets/Plugins/Easy Save 3/Scripts/Save Slots.meta deleted file mode 100644 index 7d24186..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0abb025d43952c64f9b96341b9760c8c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3CreateSlot.cs b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3CreateSlot.cs deleted file mode 100644 index 849c1b9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3CreateSlot.cs +++ /dev/null @@ -1,82 +0,0 @@ -#if ES3_TMPRO && ES3_UGUI - -using System; -using TMPro; -using UnityEngine; -using UnityEngine.UI; - -/// -/// A script attached to the Create Slot button to manage slot creation. -/// -public class ES3CreateSlot : MonoBehaviour -{ - [Tooltip("The button used to bring up the 'Create Slot' dialog.")] - public Button createButton; - [Tooltip("The ES3SlotDialog Component of the Create Slot dialog")] - public ES3SlotDialog createDialog; - [Tooltip("The TMP_Text input text field of the create slot dialog.")] - public TMP_InputField inputField; - [Tooltip("The ES3SlotManager this Create Slot Dialog belongs to.")] - public ES3SlotManager mgr; - - protected virtual void OnEnable() - { - // Whether we should show or hide this Create Slot button based on the settings in the slot manager. - gameObject.SetActive(mgr.showCreateSlotButton); - - // Make it so the Create Slot button brings up the Create Slot dialog. - createButton.onClick.AddListener(() => createDialog.gameObject.SetActive(true)); - - // Add listener to the confirmation button. - createDialog.confirmButton.onClick.AddListener(TryCreateNewSlot); - } - - protected virtual void OnDisable() - { - // Make sure the text field is empty for next time. - inputField.text = string.Empty; - // Remove all listeners. - createButton.onClick.RemoveAllListeners(); - createDialog.confirmButton.onClick.RemoveAllListeners(); - } - - // Called when the Create button is pressed in the Create New Slot dialog. - public virtual void TryCreateNewSlot() - { - // If the user hasn't specified a name, throw an error. - // Note that no other validation of the name is a required as this is handled using a REGEX in the TMP_InputField Component. - if (string.IsNullOrEmpty(inputField.text)) - { - mgr.ShowErrorDialog("You must specify a name for your save slot"); - return; - } - - // If a slot with this name already exists, require the user to enter a different name. - if (ES3.FileExists(mgr.GetSlotPath(inputField.text))) - { - mgr.ShowErrorDialog("A slot already exists with this name. Please choose a different name."); - return; - } - - // Create the slot. - CreateNewSlot(inputField.text); - // Clear the input field so the value isn't there when we reopen it. - inputField.text = ""; - // Hide the dialog. - createDialog.gameObject.SetActive(false); - } - - - // Creates a new slot by instantiating it in the UI and creating a save file for it. - protected virtual void CreateNewSlot(string slotName) - { - // Get the current timestamp. - var creationTimestamp = DateTime.Now; - // Create the slot in the UI. - var slot = mgr.InstantiateSlot(slotName, creationTimestamp); - // Move the slot to the top of the list. - slot.transform.SetSiblingIndex(1); - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3CreateSlot.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3CreateSlot.cs.meta deleted file mode 100644 index 33c82c8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3CreateSlot.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2f4ce35662bad7843b3b34f527102454 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3Slot.cs b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3Slot.cs deleted file mode 100644 index 2239e2d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3Slot.cs +++ /dev/null @@ -1,150 +0,0 @@ -#if ES3_TMPRO && ES3_UGUI - -using TMPro; -using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UI; - -/// -/// A Component added to a save slot to allow it to be selected, deleted, and un-deleted. -/// -public class ES3Slot : MonoBehaviour -{ - [Tooltip("The text label containing the slot name.")] - public TMP_Text nameLabel; - [Tooltip("The text label containing the last updated timestamp for the slot.")] - public TMP_Text timestampLabel; - - [Tooltip("The confirmation dialog to show if showConfirmationIfExists is true.")] - public GameObject confirmationDialog; - - // The manager this slot belongs to. This is set by the manager which creates it. - public ES3SlotManager mgr; - - [Tooltip("The button for selecting this slot.")] - public Button selectButton; - [Tooltip("The button for deleting this slot.")] - public Button deleteButton; - [Tooltip("The button for undoing the deletion of this slot.")] - public Button undoButton; - - // Whether this slot has been marked for deletion. - protected bool markedForDeletion = false; - -#region Initialisation and Clean-up - - // See Unity's docs for more info: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnEnable.html - public virtual void OnEnable() - { - // Add the button press listeners. - selectButton.onClick.AddListener(TrySelectSlot); - deleteButton.onClick.AddListener(MarkSlotForDeletion); - undoButton.onClick.AddListener(UnmarkSlotForDeletion); - } - - // See Unity's docs for more info: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDisable.html - public virtual void OnDisable() - { - // Remove all button press listeners. - selectButton.onClick.RemoveAllListeners(); - deleteButton.onClick.RemoveAllListeners(); - undoButton.onClick.RemoveAllListeners(); - - // If this slot is marked for deletion, delete it. - if (markedForDeletion) - DeleteSlot(); - } - -#endregion - -#region Select methods - - // Called when the Select Slot button is pressed. - protected virtual void TrySelectSlot() - { - // Manage the confirmation dialog if necessary. - if(mgr.showConfirmationIfExists) - { - if (confirmationDialog == null) - Debug.LogError("The confirmationDialog field of this ES3SelectSlot Component hasn't been set in the inspector.", this); - - // Display a confirmation dialog if we're overwriting a save slot. - if (ES3.FileExists(GetSlotPath())) - { - // Show the dialog. - confirmationDialog.SetActive(true); - // Register the event for the confirmation button. - confirmationDialog.GetComponent().confirmButton.onClick.AddListener(SelectSlot); - return; - } - } - - SelectSlot(); - } - - // Selects a slot and calls post-selection events if applicable. - protected virtual void SelectSlot() - { - // Hide the confirmation dialog if it's open. - confirmationDialog?.SetActive(false); - - // Set the path used by Auto Save. - ES3SlotManager.selectedSlotPath = GetSlotPath(); - - // When the default path used by Easy Save's methods. - ES3Settings.defaultSettings.path = ES3SlotManager.selectedSlotPath; - - // If we've specified an event to be called after the user selects a slot, invoke it. - mgr.onAfterSelectSlot?.Invoke(); - - // If we've specified a scene to load after the user selects a slot, load it. - if (!string.IsNullOrEmpty(mgr.loadSceneAfterSelectSlot)) - SceneManager.LoadScene(mgr.loadSceneAfterSelectSlot); - } - -#endregion - -#region Delete methods - - // Marks a slot to be deleted and displays an undo button. - protected virtual void MarkSlotForDeletion() - { - markedForDeletion = true; - // Make the Undo button visible and hide the Delete button. - undoButton.gameObject.SetActive(true); - deleteButton.gameObject.SetActive(false); - } - - // Unmarks a slot to be deleted and displays an delete button again. - protected virtual void UnmarkSlotForDeletion() - { - markedForDeletion = false; - // Make the Undo button visible and hide the Delete button. - undoButton.gameObject.SetActive(false); - deleteButton.gameObject.SetActive(true); - } - - // Deletes a save slot. - protected virtual void DeleteSlot() - { - // Delete the file linked to this slot. - ES3.DeleteFile(GetSlotPath()); - // Destroy this slot. - Destroy(this.gameObject); - } - -#endregion - -#region Utility methods - - // Gets the relative file path of the slot with the given slot name. - public virtual string GetSlotPath() - { - // Get the slot path from the manager. - return mgr.GetSlotPath(nameLabel.text); - } - -#endregion -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3Slot.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3Slot.cs.meta deleted file mode 100644 index c230458..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3Slot.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a276080975dbd4a46b4ef11085e19980 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotDialog.cs b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotDialog.cs deleted file mode 100644 index 5335a4c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotDialog.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if ES3_TMPRO && ES3_UGUI - -using UnityEngine; -using UnityEngine.UI; - -/// -/// A script attached to the error dialog and confirm dialog to provide events which other scripts can receive. -/// -public class ES3SlotDialog : MonoBehaviour -{ - [Tooltip("The UnityEngine.UI.Button Component for the Confirm button.")] - public Button confirmButton; - [Tooltip("The UnityEngine.UI.Button Component for the Cancel button.")] - public Button cancelButton; - - protected virtual void OnEnable() - { - // Make it so that the cancel button deactivates the dialog. - cancelButton.onClick.AddListener(() => gameObject.SetActive(false)); - } - - protected virtual void OnDisable() - { - // Remove any listeners when disabling this dialog. - cancelButton.onClick.RemoveAllListeners(); - } -} - -#endif diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotDialog.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotDialog.cs.meta deleted file mode 100644 index 3baa4d7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotDialog.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 343f4b43e9b862d42873f3e0af2c1f7e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotManager.cs b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotManager.cs deleted file mode 100644 index 5c90346..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotManager.cs +++ /dev/null @@ -1,208 +0,0 @@ -using UnityEngine; - -#if UNITY_EDITOR -using UnityEditor; -#endif - -#if ES3_TMPRO && ES3_UGUI - -using System; -using System.Collections.Generic; -using System.Linq; -using System.IO; -using TMPro; -using System.Text.RegularExpressions; -using UnityEngine.Events; -using UnityEngine.SceneManagement; - -public class ES3SlotManager : MonoBehaviour -{ - [Tooltip("Shows a confirmation if this slot already exists when we select it.")] - public bool showConfirmationIfExists = true; - [Tooltip("Whether the Create new slot button should be visible.")] - public bool showCreateSlotButton = true; - - [Space(16)] - - [Tooltip("The name of a scene to load after the user chooses a slot.")] - public string loadSceneAfterSelectSlot; - - [Space(16)] - - [Tooltip("An event called after a slot is selected, but before the scene specified by loadSceneAfterSelectSlot is loaded.")] - public UnityEvent onAfterSelectSlot; - - [Space(16)] - - [Tooltip("The subfolder we want to store our save files in. If this is a relative path, it will be relative to Application.persistentDataPath.")] - public string slotDirectory = "slots/"; - [Tooltip("The extension we want to use for our save files.")] - public string slotExtension = ".es3"; - - [Space(16)] - - [Tooltip("The template we'll instantiate to create our slots.")] - public GameObject slotTemplate; - [Tooltip("The dialog box for creating a new slot.")] - public GameObject createDialog; - [Tooltip("The dialog box for displaying an error to the user.")] - public GameObject errorDialog; - - // The relative path of the slot which has been selected, or null if none have been selected. - public static string selectedSlotPath = null; - - // A list of slots which have been created. - protected List slots = new List(); - - // If a file doesn't have a timestamp, it will return have this DateTime. - static DateTime falseDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - - // See Unity's docs for more info: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnEnable.html - protected virtual void OnEnable() - { - // Deactivate the slot template so it's not visible. - slotTemplate.SetActive(false); - // Destroy any existing slots and start from fresh if necessary. - DestroySlots(); - // Create our save slots if any exist. - InstantiateSlots(); - } - - // Finds the save slot files and instantiates a save slot for each of them. - protected virtual void InstantiateSlots() - { - // A list used to store our save slots so we can order them. - List<(string Name, DateTime Timestamp)> slots = new List<(string Name, DateTime Timestamp)>(); - - // If there are no slots to load, do nothing. - if (!ES3.DirectoryExists(slotDirectory)) - return; - - // Put each of our slots into a List so we can order them. - foreach (var file in ES3.GetFiles(slotDirectory)) - { - // Get the slot name, which is the filename without the extension. - var slotName = Path.GetFileNameWithoutExtension(file); - // Get the timestamp so that we can display this to the user and use it to order the slots. - var timestamp = ES3.GetTimestamp(GetSlotPath(slotName)); - // Add the data to the slot list. - slots.Add((Name: slotName, Timestamp: timestamp)); - } - - // Now order the slots by the timestamp. - slots = slots.OrderByDescending(x => x.Timestamp).ToList(); - - // Now create the slots. - foreach (var slot in slots) - InstantiateSlot(slot.Name, slot.Timestamp); - } - - // Instantiates a single save slot with a given slot name and timestamp. - public virtual GameObject InstantiateSlot(string slotName, DateTime timestamp) - { - // Create an instance of our slot. - var slot = Instantiate(slotTemplate, slotTemplate.transform.parent); - - // Add it to our slot list. - slots.Add(slot); - - // Ensure that we make it active as the template will be inactive. - slot.SetActive(true); - - var es3SelectSlot = slot.GetComponent(); - es3SelectSlot.nameLabel.text = slotName.Replace('_', ' '); - - // If the file doesn't have a timestamp, don't display the timestamp. - if (timestamp == falseDateTime) - es3SelectSlot.timestampLabel.text = ""; - // Otherwise, set the label for the timestamp. - else - es3SelectSlot.timestampLabel.text = $"{timestamp.ToString("yyyy-MM-dd")}\n{timestamp.ToString("HH:mm:ss")}"; - - return slot; - } - - // Shows the dialog displaying an error to the user. - public virtual void ShowErrorDialog(string errorMessage) - { - errorDialog.transform.Find("Dialog Box/Message").GetComponent().text = errorMessage; - errorDialog.SetActive(true); - } - - #region Utility Methods - - // Closes the slot window. - public virtual void Close() - { - gameObject.SetActive(false); - } - - // Destroys all slots which have been created, but doesn't delete their underlying save files. - protected virtual void DestroySlots() - { - foreach (var slot in slots) - Destroy(slot); - } - - // Gets the relative file path of the slot with the given slot name. - public virtual string GetSlotPath(string slotName) - { - // We convert any whitespace characters to underscores at this point to make the file more portable. - return slotDirectory + Regex.Replace(slotName, @"\s+", "_") + slotExtension; - } - #endregion -} -#endif - - -#if UNITY_EDITOR -// Manages the context menu items for creating the slots. -public class ES3SlotMenuItems : MonoBehaviour -{ - - [MenuItem("GameObject/Easy Save 3/Add Save Slots to Scene", false, 33)] - [MenuItem("Assets/Easy Save 3/Add Save Slots to Scene", false, 33)] - [MenuItem("Tools/Easy Save 3/Add Save Slots to Scene", false, 150)] - public static void AddSaveSlotsToScene() - { -#if !ES3_TMPRO || !ES3_UGUI - EditorUtility.DisplayDialog("Cannot create save slots", "The 'TextMeshPro' and 'Unity UI' packages must be installed in Window > Package Manager to use Easy Save's slot functionality.", "Ok"); -#else - var mgr = AddSlotsToScene(); - mgr.showConfirmationIfExists = true; - mgr.showCreateSlotButton = true; -#endif - } - - [MenuItem("GameObject/Easy Save 3/Add Load Slots to Scene", false, 33)] - [MenuItem("Assets/Easy Save 3/Add Load Slots to Scene", false, 33)] - [MenuItem("Tools/Easy Save 3/Add Load Slots to Scene", false, 150)] - public static void AddLoadSlotsToScene() - { -#if !ES3_TMPRO || !ES3_UGUI - EditorUtility.DisplayDialog("Cannot create save slots", "The 'TextMeshPro' and 'Unity UI' packages must be installed in Window > Package Manager to use Easy Save's slot functionality.", "Ok"); -#else - var mgr = AddSlotsToScene(); - mgr.showConfirmationIfExists = false; - mgr.showCreateSlotButton = false; - mgr.GetComponentInChildren().gameObject.SetActive(false); -#endif - } - -#if ES3_TMPRO && ES3_UGUI - static ES3SlotManager AddSlotsToScene() - { - if (!SceneManager.GetActiveScene().isLoaded) - EditorUtility.DisplayDialog("Could not add manager to scene", "Could not add Save Slots to scene because there is not currently a scene open.", "Ok"); - - var pathToEasySaveFolder = ES3Settings.PathToEasySaveFolder(); - - var prefab = AssetDatabase.LoadAssetAtPath(pathToEasySaveFolder + "Scripts/Save Slots/Easy Save Slots Canvas.prefab"); - var instance = (GameObject)Instantiate(prefab); - Undo.RegisterCreatedObjectUndo(instance, "Added Save Slots to Scene"); - - return instance.GetComponentInChildren(); - } -#endif -} -#endif diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotManager.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotManager.cs.meta deleted file mode 100644 index 676d668..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/ES3SlotManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3de4c36c55c98254bb7ff7a0e8abb993 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/Easy Save Slots Canvas.prefab b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/Easy Save Slots Canvas.prefab deleted file mode 100644 index 08947de..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/Easy Save Slots Canvas.prefab +++ /dev/null @@ -1,5837 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &227697084233801880 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6510372981587767654} - - component: {fileID: 9129049160540023737} - - component: {fileID: 7977534403295667252} - - component: {fileID: 1910295635512776200} - m_Layer: 5 - m_Name: Confirm Overwrite Dialog - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &6510372981587767654 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 227697084233801880} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7221071538683767638} - m_Father: {fileID: 804083565628261091} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -0.0025024414, y: 0} - m_SizeDelta: {x: -0.00012207031, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &9129049160540023737 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 227697084233801880} - m_CullTransparentMesh: 1 ---- !u!114 &7977534403295667252 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 227697084233801880} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 0.83137256} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1910295635512776200 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 227697084233801880} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 343f4b43e9b862d42873f3e0af2c1f7e, type: 3} - m_Name: - m_EditorClassIdentifier: - confirmButton: {fileID: 7601285642832972725} - cancelButton: {fileID: 2633150148093829090} ---- !u!1 &778081705398715221 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5703963434589713937} - - component: {fileID: 3658055107984586587} - - component: {fileID: 6592871272023480829} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5703963434589713937 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778081705398715221} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8678357867751317645} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3658055107984586587 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778081705398715221} - m_CullTransparentMesh: 1 ---- !u!114 &6592871272023480829 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778081705398715221} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Undo - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &822904977062493758 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3680143321170395058} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3680143321170395058 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 822904977062493758} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1536895412926387595} - m_Father: {fileID: 7804689091012748965} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &836675905516085355 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 528383846959897870} - - component: {fileID: 5129343448092708678} - - component: {fileID: 2621819639700020157} - - component: {fileID: 9138753302760037910} - m_Layer: 5 - m_Name: Easy Save Slots Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &528383846959897870 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 836675905516085355} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 804083565628261091} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!223 &5129343448092708678 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 836675905516085355} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 0 - m_AdditionalShaderChannelsFlag: 25 - m_UpdateRectTransformForStandalone: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!114 &2621819639700020157 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 836675905516085355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!114 &9138753302760037910 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 836675905516085355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!1 &922028763284146565 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 359879081980017183} - - component: {fileID: 1926378102428077790} - - component: {fileID: 8268605577064510332} - - component: {fileID: 7220571407814052566} - m_Layer: 5 - m_Name: Placeholder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &359879081980017183 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 922028763284146565} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9003183484765352435} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1926378102428077790 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 922028763284146565} - m_CullTransparentMesh: 1 ---- !u!114 &8268605577064510332 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 922028763284146565} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Enter text... - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 2150773298 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 2 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 1 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &7220571407814052566 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 922028763284146565} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 1 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: -1 - m_PreferredHeight: -1 - m_FlexibleWidth: -1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &1554752354656009635 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8510833521388026114} - - component: {fileID: 6445609501148732696} - - component: {fileID: 8555518781390954812} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8510833521388026114 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1554752354656009635} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1229489487384799989} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6445609501148732696 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1554752354656009635} - m_CullTransparentMesh: 1 ---- !u!114 &8555518781390954812 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1554752354656009635} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Overwrite - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &1657182529275396143 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3419565058348826956} - - component: {fileID: 6944538529121853475} - - component: {fileID: 1715362456499597444} - - component: {fileID: 5139978685814271184} - m_Layer: 5 - m_Name: Scrollbar Vertical - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3419565058348826956 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657182529275396143} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1085742841113106178} - m_Father: {fileID: 7344859775138317540} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: -17} - m_Pivot: {x: 1, y: 1} ---- !u!222 &6944538529121853475 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657182529275396143} - m_CullTransparentMesh: 1 ---- !u!114 &1715362456499597444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657182529275396143} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5139978685814271184 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657182529275396143} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1084193663292614137} - m_HandleRect: {fileID: 8958527683396373945} - m_Direction: 2 - m_Value: 1 - m_Size: 1 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &1859212875653586079 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8157695502783162488} - - component: {fileID: 6200792360693302134} - - component: {fileID: 6906627124829341101} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8157695502783162488 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1859212875653586079} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1691983619740009016} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6200792360693302134 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1859212875653586079} - m_CullTransparentMesh: 1 ---- !u!114 &6906627124829341101 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1859212875653586079} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Delete - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &1924892629595430890 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5397710400634954054} - - component: {fileID: 8710682499356130733} - - component: {fileID: 8294284232977114532} - m_Layer: 5 - m_Name: Message - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5397710400634954054 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1924892629595430890} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7221071538683767638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1280.55, y: -43.41} - m_SizeDelta: {x: 2561.1, y: 86.82} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8710682499356130733 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1924892629595430890} - m_CullTransparentMesh: 1 ---- !u!114 &8294284232977114532 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1924892629595430890} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Are you sure you wish to overwrite this slot? - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 60, y: 30, z: 60, w: 30} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &2070092984210319616 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 804083565628261091} - - component: {fileID: 7845572504540662869} - m_Layer: 5 - m_Name: Easy Save Slots - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &804083565628261091 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2070092984210319616} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2097614805063408415} - - {fileID: 7344859775138317540} - - {fileID: 8262158393657950217} - - {fileID: 6510372981587767654} - - {fileID: 477158559605161214} - m_Father: {fileID: 528383846959897870} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.0000012715658, y: 0} - m_AnchorMax: {x: 1.0000013, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &7845572504540662869 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2070092984210319616} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3de4c36c55c98254bb7ff7a0e8abb993, type: 3} - m_Name: - m_EditorClassIdentifier: - showConfirmationIfExists: 1 - showCreateSlotButton: 1 - loadSceneAfterSelectSlot: - onAfterSelectSlot: - m_PersistentCalls: - m_Calls: [] - slotDirectory: slots/ - slotExtension: .es3 - slotTemplate: {fileID: 8022580819519613445} - createDialog: {fileID: 8373966721220894130} - errorDialog: {fileID: 8318618281395750219} ---- !u!1 &2409827994240960753 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7681314502169415656} - - component: {fileID: 1110271056706632056} - - component: {fileID: 7335472061845956007} - m_Layer: 5 - m_Name: Message - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7681314502169415656 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2409827994240960753} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3180473802293061594} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 960.55005, y: -43.41} - m_SizeDelta: {x: 1921.1001, y: 86.82} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1110271056706632056 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2409827994240960753} - m_CullTransparentMesh: 1 ---- !u!114 &7335472061845956007 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2409827994240960753} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Choose a name for your slot.\nSlot names can only contain letters, numbers, - underscores or hypens. - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 60, y: 30, z: 60, w: 30} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &2551721120535776331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7221071538683767638} - - component: {fileID: 6317982540781920975} - - component: {fileID: 5133578672499775088} - - component: {fileID: 2924638383635714970} - - component: {fileID: 7424326716090463767} - m_Layer: 5 - m_Name: Dialog Box - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7221071538683767638 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2551721120535776331} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5397710400634954054} - - {fileID: 912102938962010302} - m_Father: {fileID: 6510372981587767654} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0.5500488, y: 0} - m_SizeDelta: {x: 1.1000977, y: 166.82} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6317982540781920975 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2551721120535776331} - m_CullTransparentMesh: 1 ---- !u!114 &5133578672499775088 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2551721120535776331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.37254903, g: 0.37254903, b: 0.37254903, a: 1} - m_RaycastTarget: 0 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2924638383635714970 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2551721120535776331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 1 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!114 &7424326716090463767 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2551721120535776331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!1 &2553596483019815131 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2447776643885934447} - - component: {fileID: 2742875169976258966} - - component: {fileID: 3011703528896334062} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2447776643885934447 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2553596483019815131} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8411725682250319468} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2742875169976258966 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2553596483019815131} - m_CullTransparentMesh: 1 ---- !u!114 &3011703528896334062 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2553596483019815131} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Cancel - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &3075009029606032462 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7015203149315746530} - - component: {fileID: 5857756724381957095} - - component: {fileID: 4072276694641500763} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7015203149315746530 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3075009029606032462} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 678331016428074167} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5857756724381957095 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3075009029606032462} - m_CullTransparentMesh: 1 ---- !u!114 &4072276694641500763 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3075009029606032462} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Ok - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &3076960929097298789 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7905355811559295984} - - component: {fileID: 6771126853477752255} - - component: {fileID: 5254856260169891147} - - component: {fileID: 4486387006958809316} - m_Layer: 5 - m_Name: Name - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7905355811559295984 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3076960929097298789} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4410783332432486161} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6771126853477752255 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3076960929097298789} - m_CullTransparentMesh: 1 ---- !u!114 &5254856260169891147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3076960929097298789} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: 'Slot name - -' - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4278190080 - m_fontColor: {r: 0, g: 0, b: 0, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &4486387006958809316 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3076960929097298789} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: -1 - m_PreferredHeight: -1 - m_FlexibleWidth: 1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &3086538383282623836 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 662423335065903893} - - component: {fileID: 9181130504492271240} - - component: {fileID: 6252306823012869867} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &662423335065903893 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3086538383282623836} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4758069996279868507} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &9181130504492271240 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3086538383282623836} - m_CullTransparentMesh: 1 ---- !u!114 &6252306823012869867 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3086538383282623836} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: X - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 67.1 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 1 - m_fontSizeMin: 18 - m_fontSizeMax: 100 - m_fontStyle: 0 - m_HorizontalAlignment: 4 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &3245306186468738951 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1691983619740009016} - - component: {fileID: 6642192180443143781} - - component: {fileID: 7751991120909510226} - - component: {fileID: 8475907803058291226} - m_Layer: 5 - m_Name: Delete Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1691983619740009016 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3245306186468738951} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8157695502783162488} - m_Father: {fileID: 5118098900746920580} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.87795395, y: 0} - m_AnchorMax: {x: 0.9999953, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6642192180443143781 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3245306186468738951} - m_CullTransparentMesh: 1 ---- !u!114 &7751991120909510226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3245306186468738951} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8475907803058291226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3245306186468738951} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 7751991120909510226} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &3334955895289606835 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8411725682250319468} - - component: {fileID: 4147091325948514686} - - component: {fileID: 2411422191827638545} - - component: {fileID: 6436317002456012355} - - component: {fileID: 7557582712467986611} - m_Layer: 5 - m_Name: Cancel Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8411725682250319468 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3334955895289606835} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2447776643885934447} - m_Father: {fileID: 275620576703482302} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1216.55, y: -40} - m_SizeDelta: {x: 512, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4147091325948514686 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3334955895289606835} - m_CullTransparentMesh: 1 ---- !u!114 &2411422191827638545 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3334955895289606835} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6436317002456012355 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3334955895289606835} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 2411422191827638545} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &7557582712467986611 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3334955895289606835} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 512 - m_PreferredHeight: -1 - m_FlexibleWidth: 0 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &3434278735327469617 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1085742841113106178} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1085742841113106178 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3434278735327469617} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8958527683396373945} - m_Father: {fileID: 3419565058348826956} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &4490092753834283333 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2997141904510809117} - - component: {fileID: 125859991047659189} - - component: {fileID: 3400419676609430346} - - component: {fileID: 535242885794584383} - - component: {fileID: 3922660322203538640} - m_Layer: 5 - m_Name: Create Slot Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2997141904510809117 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4490092753834283333} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6686820803998843850} - m_Father: {fileID: 4289516667294152637} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &125859991047659189 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4490092753834283333} - m_CullTransparentMesh: 1 ---- !u!114 &3400419676609430346 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4490092753834283333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &535242885794584383 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4490092753834283333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 3400419676609430346} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &3922660322203538640 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4490092753834283333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2f4ce35662bad7843b3b34f527102454, type: 3} - m_Name: - m_EditorClassIdentifier: - createButton: {fileID: 535242885794584383} - createDialog: {fileID: 5755268801348799295} - inputField: {fileID: 2795493733868018245} - mgr: {fileID: 7845572504540662869} ---- !u!1 &4576678882825410009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3180473802293061594} - - component: {fileID: 2429002304735755400} - - component: {fileID: 4212095828207967669} - - component: {fileID: 6764419099345873180} - - component: {fileID: 4682228661470258103} - m_Layer: 5 - m_Name: Dialog Box - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3180473802293061594 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4576678882825410009} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7681314502169415656} - - {fileID: 965724367919755620} - - {fileID: 275620576703482302} - m_Father: {fileID: 8262158393657950217} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0.5500488, y: 0} - m_SizeDelta: {x: 1.1000977, y: 246.82} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2429002304735755400 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4576678882825410009} - m_CullTransparentMesh: 1 ---- !u!114 &4212095828207967669 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4576678882825410009} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.37254903, g: 0.37254903, b: 0.37254903, a: 1} - m_RaycastTarget: 0 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6764419099345873180 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4576678882825410009} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 8 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 1 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!114 &4682228661470258103 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4576678882825410009} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!1 &5224959573832370671 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 678331016428074167} - - component: {fileID: 8378756170207362126} - - component: {fileID: 7398869318922626719} - - component: {fileID: 2013174903879173332} - - component: {fileID: 4488017568431993595} - m_Layer: 5 - m_Name: Ok Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &678331016428074167 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224959573832370671} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7015203149315746530} - m_Father: {fileID: 172553279337182247} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1024.55, y: -40} - m_SizeDelta: {x: 512, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8378756170207362126 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224959573832370671} - m_CullTransparentMesh: 1 ---- !u!114 &7398869318922626719 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224959573832370671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2013174903879173332 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224959573832370671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 7398869318922626719} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 8318618281395750219} - m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine - m_MethodName: SetActive - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &4488017568431993595 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224959573832370671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 512 - m_PreferredHeight: -1 - m_FlexibleWidth: 0 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &5237417892211142274 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8678357867751317645} - - component: {fileID: 381060378751931248} - - component: {fileID: 4923006584166995112} - - component: {fileID: 9209593699603412918} - m_Layer: 5 - m_Name: Undo Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &8678357867751317645 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5237417892211142274} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5703963434589713937} - m_Father: {fileID: 5118098900746920580} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.87795395, y: 0} - m_AnchorMax: {x: 0.9999953, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &381060378751931248 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5237417892211142274} - m_CullTransparentMesh: 1 ---- !u!114 &4923006584166995112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5237417892211142274} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &9209593699603412918 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5237417892211142274} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 0.6084906, b: 0.6084906, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 4923006584166995112} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &5281474113552254271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9063785980708458863} - - component: {fileID: 4724448663271761399} - - component: {fileID: 1790166047473223829} - - component: {fileID: 5883556695770795578} - - component: {fileID: 6066059941414685840} - m_Layer: 5 - m_Name: Dialog Box - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &9063785980708458863 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5281474113552254271} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 9196226033678845685} - - {fileID: 172553279337182247} - m_Father: {fileID: 477158559605161214} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0.5500488, y: 0} - m_SizeDelta: {x: 1.1000977, y: 166.82} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4724448663271761399 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5281474113552254271} - m_CullTransparentMesh: 1 ---- !u!114 &1790166047473223829 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5281474113552254271} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.37254903, g: 0.37254903, b: 0.37254903, a: 1} - m_RaycastTarget: 0 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5883556695770795578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5281474113552254271} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 1 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!114 &6066059941414685840 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5281474113552254271} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!1 &5509294014253021609 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6686820803998843850} - - component: {fileID: 2313067168631565838} - - component: {fileID: 1258178858737448886} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6686820803998843850 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5509294014253021609} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2997141904510809117} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2313067168631565838 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5509294014253021609} - m_CullTransparentMesh: 1 ---- !u!114 &1258178858737448886 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5509294014253021609} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Create new slot... - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 1 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &5645508579196221466 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4190989711801335683} - - component: {fileID: 3237141181350803119} - - component: {fileID: 3169463195894600480} - - component: {fileID: 2795493733868018245} - - component: {fileID: 3004195854664444915} - m_Layer: 5 - m_Name: Input Field - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4190989711801335683 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5645508579196221466} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 9003183484765352435} - m_Father: {fileID: 965724367919755620} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 960.55005, y: -32} - m_SizeDelta: {x: 1024, y: 64} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3237141181350803119 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5645508579196221466} - m_CullTransparentMesh: 1 ---- !u!114 &3169463195894600480 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5645508579196221466} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2795493733868018245 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5645508579196221466} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 3169463195894600480} - m_TextViewport: {fileID: 9003183484765352435} - m_TextComponent: {fileID: 7713630938400423614} - m_Placeholder: {fileID: 8268605577064510332} - m_VerticalScrollbar: {fileID: 0} - m_VerticalScrollbarEventHandler: {fileID: 0} - m_LayoutGroup: {fileID: 0} - m_ScrollSensitivity: 1 - m_ContentType: 9 - m_InputType: 0 - m_AsteriskChar: 42 - m_KeyboardType: 0 - m_LineType: 0 - m_HideMobileInput: 0 - m_HideSoftKeyboard: 0 - m_CharacterValidation: 6 - m_RegexValue: ^[A-Za-z0-9 _-]*$ - m_GlobalPointSize: 14 - m_CharacterLimit: 40 - m_OnEndEdit: - m_PersistentCalls: - m_Calls: [] - m_OnSubmit: - m_PersistentCalls: - m_Calls: [] - m_OnSelect: - m_PersistentCalls: - m_Calls: [] - m_OnDeselect: - m_PersistentCalls: - m_Calls: [] - m_OnTextSelection: - m_PersistentCalls: - m_Calls: [] - m_OnEndTextSelection: - m_PersistentCalls: - m_Calls: [] - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_OnTouchScreenKeyboardStatusChanged: - m_PersistentCalls: - m_Calls: [] - m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_CustomCaretColor: 0 - m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} - m_Text: - m_CaretBlinkRate: 0.85 - m_CaretWidth: 1 - m_ReadOnly: 0 - m_RichText: 0 - m_GlobalFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_OnFocusSelectAll: 1 - m_ResetOnDeActivation: 1 - m_KeepTextSelectionVisible: 0 - m_RestoreOriginalTextOnEscape: 1 - m_isRichTextEditingAllowed: 0 - m_LineLimit: 0 - isAlert: 0 - m_InputValidator: {fileID: 0} - m_ShouldActivateOnSelect: 1 ---- !u!114 &3004195854664444915 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5645508579196221466} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 1024 - m_PreferredHeight: 28.65 - m_FlexibleWidth: 0 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &6060211322104580489 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 172553279337182247} - - component: {fileID: 1312727016200366538} - - component: {fileID: 3828936150394379819} - m_Layer: 5 - m_Name: Buttons - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &172553279337182247 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6060211322104580489} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 678331016428074167} - m_Father: {fileID: 9063785980708458863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1280.55, y: -126.82} - m_SizeDelta: {x: 2561.1, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1312727016200366538 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6060211322104580489} - m_CullTransparentMesh: 1 ---- !u!114 &3828936150394379819 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6060211322104580489} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 0 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &6213020555374382827 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1229489487384799989} - - component: {fileID: 2929673207268402346} - - component: {fileID: 1911270645185741153} - - component: {fileID: 7601285642832972725} - - component: {fileID: 8822271410876871102} - m_Layer: 5 - m_Name: Ok Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1229489487384799989 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6213020555374382827} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8510833521388026114} - m_Father: {fileID: 912102938962010302} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1024.55, y: -40} - m_SizeDelta: {x: 512, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2929673207268402346 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6213020555374382827} - m_CullTransparentMesh: 1 ---- !u!114 &1911270645185741153 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6213020555374382827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7601285642832972725 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6213020555374382827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1911270645185741153} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &8822271410876871102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6213020555374382827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 512 - m_PreferredHeight: -1 - m_FlexibleWidth: 0 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &6353810478064825094 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7804689091012748965} - - component: {fileID: 2780552944613025980} - - component: {fileID: 6671369083363600556} - - component: {fileID: 2989372213058042155} - m_Layer: 5 - m_Name: Scrollbar Horizontal - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7804689091012748965 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6353810478064825094} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3680143321170395058} - m_Father: {fileID: 7344859775138317540} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 20} - m_Pivot: {x: 0, y: 0} ---- !u!222 &2780552944613025980 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6353810478064825094} - m_CullTransparentMesh: 1 ---- !u!114 &6671369083363600556 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6353810478064825094} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2989372213058042155 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6353810478064825094} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5247486544828026473} - m_HandleRect: {fileID: 1536895412926387595} - m_Direction: 0 - m_Value: 0 - m_Size: 1 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &6494926718082632338 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4758069996279868507} - - component: {fileID: 482836376555253182} - - component: {fileID: 6325169323148852011} - - component: {fileID: 2836132131898799597} - m_Layer: 5 - m_Name: Close button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4758069996279868507 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6494926718082632338} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 662423335065903893} - m_Father: {fileID: 2097614805063408415} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 312.07477, y: 0} - m_SizeDelta: {x: -664.1495, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &482836376555253182 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6494926718082632338} - m_CullTransparentMesh: 1 ---- !u!114 &6325169323148852011 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6494926718082632338} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2836132131898799597 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6494926718082632338} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 6325169323148852011} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_TargetAssemblyTypeName: ES3SlotManager, Assembly-CSharp-firstpass - m_MethodName: Close - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &6528518485116091745 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6215500638002970369} - - component: {fileID: 4056177978829570940} - - component: {fileID: 5537637480538723359} - - component: {fileID: 127499686798751469} - - component: {fileID: 2691753723453335975} - m_Layer: 5 - m_Name: Ok Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6215500638002970369 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6528518485116091745} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7320298432169032167} - m_Father: {fileID: 275620576703482302} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 704.55005, y: -40} - m_SizeDelta: {x: 512, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4056177978829570940 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6528518485116091745} - m_CullTransparentMesh: 1 ---- !u!114 &5537637480538723359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6528518485116091745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &127499686798751469 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6528518485116091745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5537637480538723359} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &2691753723453335975 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6528518485116091745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 512 - m_PreferredHeight: -1 - m_FlexibleWidth: 0 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &6564922620291155865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6689559758924168547} - - component: {fileID: 8008678918264296505} - - component: {fileID: 4021335340685333392} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6689559758924168547 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6564922620291155865} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8185917249969357584} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8008678918264296505 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6564922620291155865} - m_CullTransparentMesh: 1 ---- !u!114 &4021335340685333392 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6564922620291155865} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Cancel - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &6621937342088046306 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7320298432169032167} - - component: {fileID: 5052825284283623812} - - component: {fileID: 7491571305628988145} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7320298432169032167 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6621937342088046306} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6215500638002970369} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5052825284283623812 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6621937342088046306} - m_CullTransparentMesh: 1 ---- !u!114 &7491571305628988145 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6621937342088046306} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Create - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &6691068560139487730 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7344859775138317540} - - component: {fileID: 8785344256125759323} - - component: {fileID: 5433080459153496968} - - component: {fileID: 8410756268240643512} - m_Layer: 5 - m_Name: Scroll View - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7344859775138317540 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6691068560139487730} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4030629557809462554} - - {fileID: 7804689091012748965} - - {fileID: 3419565058348826956} - m_Father: {fileID: 804083565628261091} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.0000024968926, y: 0.0000017585522} - m_AnchorMax: {x: 0.9999924, y: 0.93055737} - m_AnchoredPosition: {x: -0.0025634766, y: 0} - m_SizeDelta: {x: -0.00024414062, y: -0.0000038146973} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8785344256125759323 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6691068560139487730} - m_CullTransparentMesh: 1 ---- !u!114 &5433080459153496968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6691068560139487730} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.37254903, g: 0.37254903, b: 0.37254903, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8410756268240643512 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6691068560139487730} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 4289516667294152637} - m_Horizontal: 1 - m_Vertical: 1 - m_MovementType: 1 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 20 - m_Viewport: {fileID: 4030629557809462554} - m_HorizontalScrollbar: {fileID: 2989372213058042155} - m_VerticalScrollbar: {fileID: 5139978685814271184} - m_HorizontalScrollbarVisibility: 1 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &6826567119909179406 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2097614805063408415} - - component: {fileID: 852941771104157521} - - component: {fileID: 7813161057074883940} - m_Layer: 5 - m_Name: Top Menu - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2097614805063408415 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6826567119909179406} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4758069996279868507} - m_Father: {fileID: 804083565628261091} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.9305587} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -0.0025024414, y: 0} - m_SizeDelta: {x: -0.00012207031, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &852941771104157521 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6826567119909179406} - m_CullTransparentMesh: 1 ---- !u!114 &7813161057074883940 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6826567119909179406} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &6958251483554130164 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4289516667294152637} - - component: {fileID: 8772139713777705692} - - component: {fileID: 5166689340155674944} - m_Layer: 5 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4289516667294152637 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6958251483554130164} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2997141904510809117} - - {fileID: 5118098900746920580} - m_Father: {fileID: 4030629557809462554} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: -0.000000025483851, y: -0.0000090125} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0.000051140785, y: -0.00036621094} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!114 &8772139713777705692 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6958251483554130164} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 1 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 1 - m_ReverseArrangement: 0 ---- !u!114 &5166689340155674944 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6958251483554130164} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!1 &6993944393264646893 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1391718756457329641} - - component: {fileID: 4840373446151619626} - - component: {fileID: 7953152382020575149} - - component: {fileID: 1071768783650491746} - m_Layer: 5 - m_Name: Timestamp - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1391718756457329641 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6993944393264646893} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4410783332432486161} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4840373446151619626 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6993944393264646893} - m_CullTransparentMesh: 1 ---- !u!114 &7953152382020575149 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6993944393264646893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: 1970-01-01\n00:00:00 - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4278190080 - m_fontColor: {r: 0, g: 0, b: 0, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &1071768783650491746 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6993944393264646893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: -1 - m_PreferredHeight: -1 - m_FlexibleWidth: 0.2 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &7134331461449050874 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1536895412926387595} - - component: {fileID: 5364377875195854159} - - component: {fileID: 5247486544828026473} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1536895412926387595 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7134331461449050874} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3680143321170395058} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5364377875195854159 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7134331461449050874} - m_CullTransparentMesh: 1 ---- !u!114 &5247486544828026473 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7134331461449050874} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &7155185919878424873 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8085438255842890859} - - component: {fileID: 6128946595273292893} - - component: {fileID: 7713630938400423614} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8085438255842890859 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7155185919878424873} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9003183484765352435} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6128946595273292893 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7155185919878424873} - m_CullTransparentMesh: 1 ---- !u!114 &7713630938400423614 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7155185919878424873} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: "\u200B" - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 3 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 1 - checkPaddingRequired: 0 - m_isRichText: 0 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &7406323647931909894 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 965724367919755620} - - component: {fileID: 1063237227146735862} - m_Layer: 5 - m_Name: Input - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &965724367919755620 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406323647931909894} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4190989711801335683} - m_Father: {fileID: 3180473802293061594} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 960.55005, y: -126.82} - m_SizeDelta: {x: 1921.1001, y: 64} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1063237227146735862 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406323647931909894} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 0 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &7742001482609049535 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8185917249969357584} - - component: {fileID: 6220213651524712046} - - component: {fileID: 491704064841729012} - - component: {fileID: 2633150148093829090} - - component: {fileID: 4662506516010723704} - m_Layer: 5 - m_Name: Cancel Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8185917249969357584 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7742001482609049535} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6689559758924168547} - m_Father: {fileID: 912102938962010302} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1536.55, y: -40} - m_SizeDelta: {x: 512, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6220213651524712046 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7742001482609049535} - m_CullTransparentMesh: 1 ---- !u!114 &491704064841729012 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7742001482609049535} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2633150148093829090 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7742001482609049535} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 491704064841729012} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &4662506516010723704 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7742001482609049535} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 512 - m_PreferredHeight: -1 - m_FlexibleWidth: 0 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &7915672778802806726 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 275620576703482302} - - component: {fileID: 8838198351200501007} - - component: {fileID: 4894706767227577061} - m_Layer: 5 - m_Name: Buttons - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &275620576703482302 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7915672778802806726} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6215500638002970369} - - {fileID: 8411725682250319468} - m_Father: {fileID: 3180473802293061594} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 960.55005, y: -206.82} - m_SizeDelta: {x: 1921.1001, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8838198351200501007 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7915672778802806726} - m_CullTransparentMesh: 1 ---- !u!114 &4894706767227577061 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7915672778802806726} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 0 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &7936609109844759730 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8958527683396373945} - - component: {fileID: 8813201124293575877} - - component: {fileID: 1084193663292614137} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8958527683396373945 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7936609109844759730} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1085742841113106178} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8813201124293575877 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7936609109844759730} - m_CullTransparentMesh: 1 ---- !u!114 &1084193663292614137 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7936609109844759730} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &8022580819519613445 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5118098900746920580} - - component: {fileID: 1780715327016553014} - - component: {fileID: 4507470412239918946} - m_Layer: 5 - m_Name: Slot Template - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5118098900746920580 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8022580819519613445} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4410783332432486161} - - {fileID: 1691983619740009016} - - {fileID: 8678357867751317645} - m_Father: {fileID: 4289516667294152637} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 123.291} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1780715327016553014 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8022580819519613445} - m_CullTransparentMesh: 1 ---- !u!114 &4507470412239918946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8022580819519613445} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a276080975dbd4a46b4ef11085e19980, type: 3} - m_Name: - m_EditorClassIdentifier: - nameLabel: {fileID: 5254856260169891147} - timestampLabel: {fileID: 7953152382020575149} - confirmationDialog: {fileID: 227697084233801880} - mgr: {fileID: 7845572504540662869} - selectButton: {fileID: 66341163422754781} - deleteButton: {fileID: 8475907803058291226} - undoButton: {fileID: 9209593699603412918} ---- !u!1 &8091780545226568761 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 912102938962010302} - - component: {fileID: 8480942050760195567} - - component: {fileID: 3988777506335540231} - m_Layer: 5 - m_Name: Buttons - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &912102938962010302 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8091780545226568761} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1229489487384799989} - - {fileID: 8185917249969357584} - m_Father: {fileID: 7221071538683767638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1280.55, y: -126.82} - m_SizeDelta: {x: 2561.1, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8480942050760195567 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8091780545226568761} - m_CullTransparentMesh: 1 ---- !u!114 &3988777506335540231 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8091780545226568761} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 0 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &8318618281395750219 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 477158559605161214} - - component: {fileID: 8113496190823968457} - - component: {fileID: 1965066094025303081} - m_Layer: 5 - m_Name: Error Dialog - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &477158559605161214 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8318618281395750219} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 9063785980708458863} - m_Father: {fileID: 804083565628261091} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -0.0025024414, y: 0} - m_SizeDelta: {x: -0.00012207031, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8113496190823968457 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8318618281395750219} - m_CullTransparentMesh: 1 ---- !u!114 &1965066094025303081 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8318618281395750219} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 0.83137256} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &8373966721220894130 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8262158393657950217} - - component: {fileID: 395325613929400925} - - component: {fileID: 2186876798825954774} - - component: {fileID: 5755268801348799295} - m_Layer: 5 - m_Name: Create Slot Dialog - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &8262158393657950217 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8373966721220894130} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3180473802293061594} - m_Father: {fileID: 804083565628261091} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -0.0025024414, y: 0} - m_SizeDelta: {x: -0.00012207031, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &395325613929400925 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8373966721220894130} - m_CullTransparentMesh: 1 ---- !u!114 &2186876798825954774 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8373966721220894130} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 0.83137256} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5755268801348799295 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8373966721220894130} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 343f4b43e9b862d42873f3e0af2c1f7e, type: 3} - m_Name: - m_EditorClassIdentifier: - confirmButton: {fileID: 127499686798751469} - cancelButton: {fileID: 6436317002456012355} ---- !u!1 &8515375379428936732 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4030629557809462554} - - component: {fileID: 6184990388370407863} - - component: {fileID: 6107708139847652190} - - component: {fileID: 987731258351059936} - m_Layer: 5 - m_Name: Viewport - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4030629557809462554 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8515375379428936732} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4289516667294152637} - m_Father: {fileID: 7344859775138317540} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!222 &6184990388370407863 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8515375379428936732} - m_CullTransparentMesh: 1 ---- !u!114 &6107708139847652190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8515375379428936732} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &987731258351059936 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8515375379428936732} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!1 &8862445455980678279 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9003183484765352435} - - component: {fileID: 2749940413523969162} - m_Layer: 5 - m_Name: Text Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &9003183484765352435 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8862445455980678279} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 359879081980017183} - - {fileID: 8085438255842890859} - m_Father: {fileID: 4190989711801335683} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2749940413523969162 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8862445455980678279} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: {x: -8, y: -5, z: -8, w: -5} - m_Softness: {x: 0, y: 0} ---- !u!1 &9169737605650680264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9196226033678845685} - - component: {fileID: 8037545544392690406} - - component: {fileID: 8963978087828997316} - m_Layer: 5 - m_Name: Message - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &9196226033678845685 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169737605650680264} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9063785980708458863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1280.55, y: -43.41} - m_SizeDelta: {x: 2561.1, y: 86.82} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8037545544392690406 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169737605650680264} - m_CullTransparentMesh: 1 ---- !u!114 &8963978087828997316 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169737605650680264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: This is the message to be changed at runtime - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 24 - m_fontSizeBase: 24 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_ActiveFontFeatures: 00000000 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 60, y: 30, z: 60, w: 30} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &9169880276160527266 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4410783332432486161} - - component: {fileID: 4487624314351920968} - - component: {fileID: 1865566949059028475} - - component: {fileID: 66341163422754781} - - component: {fileID: 4661821269329496302} - m_Layer: 5 - m_Name: Choose Slot Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4410783332432486161 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169880276160527266} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1391718756457329641} - - {fileID: 7905355811559295984} - m_Father: {fileID: 5118098900746920580} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: -0.0000051480074, y: 0} - m_AnchorMax: {x: 0.877954, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4487624314351920968 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169880276160527266} - m_CullTransparentMesh: 1 ---- !u!114 &1865566949059028475 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169880276160527266} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &66341163422754781 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169880276160527266} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1865566949059028475} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &4661821269329496302 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9169880276160527266} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 0 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 1 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 diff --git a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/Easy Save Slots Canvas.prefab.meta b/Assets/Plugins/Easy Save 3/Scripts/Save Slots/Easy Save Slots Canvas.prefab.meta deleted file mode 100644 index f67cf2c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Save Slots/Easy Save Slots Canvas.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: c7b06d0054ae75b41bc4f2b9d5528b04 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Settings.meta b/Assets/Plugins/Easy Save 3/Scripts/Settings.meta deleted file mode 100644 index 034ed77..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Settings.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 6c350197e0cac40839770b990d43d828 -folderAsset: yes -timeCreated: 1499765763 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3DefaultSettings.cs b/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3DefaultSettings.cs deleted file mode 100644 index 26e08ba..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3DefaultSettings.cs +++ /dev/null @@ -1,13 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -namespace ES3Internal -{ - public class ES3DefaultSettings : MonoBehaviour - { - [SerializeField] - public ES3SerializableSettings settings = null; - - public bool autoUpdateReferences = true; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3DefaultSettings.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3DefaultSettings.cs.meta deleted file mode 100644 index 5cb6de2..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3DefaultSettings.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c6d233887d0c64d7e8f3ebcb39bc8c82 -timeCreated: 1519132296 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Defaults.cs b/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Defaults.cs deleted file mode 100644 index 61e7a1a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Defaults.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class ES3Defaults : ScriptableObject -{ - [SerializeField] - public ES3SerializableSettings settings = new ES3SerializableSettings(); - - public bool addMgrToSceneAutomatically = false; - public bool autoUpdateReferences = true; - public bool addAllPrefabsToManager = true; - public int collectDependenciesDepth = 4; - public int collectDependenciesTimeout = 10; - public bool updateReferencesWhenSceneChanges = true; - public bool updateReferencesWhenSceneIsSaved = true; - public bool updateReferencesWhenSceneIsOpened = true; - [Tooltip("Folders listed here will be searched for references every time the reference manager is refreshed. Path should be relative to the project folder.")] - public string[] referenceFolders = new string[0]; - - public bool logDebugInfo = false; - public bool logWarnings = true; - public bool logErrors = true; -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Defaults.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Defaults.cs.meta deleted file mode 100644 index 4a6af3f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Defaults.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7b340139c9e4d054f904d8b452798652 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Settings.cs b/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Settings.cs deleted file mode 100644 index beb0f71..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Settings.cs +++ /dev/null @@ -1,386 +0,0 @@ -using UnityEngine; -using ES3Internal; -#if UNITY_EDITOR -using UnityEditor; -#endif - -#if UNITY_VISUAL_SCRIPTING -[Unity.VisualScripting.IncludeInSettings(true)] -#elif BOLT_VISUAL_SCRIPTING -[Ludiq.IncludeInSettings(true)] -#endif -public class ES3Settings : System.ICloneable -{ - - #region Default settings - private static ES3Settings _defaults = null; - private static ES3Defaults _defaultSettingsScriptableObject; - private const string defaultSettingsPath = "ES3/ES3Defaults"; - - public static ES3Defaults defaultSettingsScriptableObject - { - get - { - if (_defaultSettingsScriptableObject == null) - { - _defaultSettingsScriptableObject = Resources.Load(defaultSettingsPath); - -#if UNITY_EDITOR - if (_defaultSettingsScriptableObject == null) - { - _defaultSettingsScriptableObject = ScriptableObject.CreateInstance(); - - // If this is the version being submitted to the Asset Store, don't include ES3Defaults. - if (Application.productName.Contains("ES3 Release")) - { - Debug.Log("This has been identified as a release build as the title contains 'ES3 Release', so ES3Defaults will not be created."); - return _defaultSettingsScriptableObject; - } - - // Convert the old settings to the new settings if necessary. - var oldSettings = GetOldSettings(); - if (oldSettings != null) - { - oldSettings.CopyInto(_defaultSettingsScriptableObject.settings); - // Only enable warning logs by default for new installs as this may look like unexpected behaviour to some. - _defaultSettingsScriptableObject.logWarnings = false; - RemoveOldSettings(); - } - - CreateDefaultSettingsFolder(); - AssetDatabase.CreateAsset(_defaultSettingsScriptableObject, PathToDefaultSettings()); - AssetDatabase.SaveAssets(); - } -#endif - } - return _defaultSettingsScriptableObject; - } - } - - public static ES3Settings defaultSettings - { - get - { - if(_defaults == null) - { - if(defaultSettingsScriptableObject != null) - _defaults = defaultSettingsScriptableObject.settings; - } - return _defaults; - } - } - - private static ES3Settings _unencryptedUncompressedSettings = null; - internal static ES3Settings unencryptedUncompressedSettings - { - get - { - if (_unencryptedUncompressedSettings == null) - _unencryptedUncompressedSettings = new ES3Settings(ES3.EncryptionType.None, ES3.CompressionType.None); - return _unencryptedUncompressedSettings; - } - } - - #endregion - - #region Fields - - private static readonly string[] resourcesExtensions = new string[]{".txt", ".htm", ".html", ".xml", ".bytes", ".json", ".csv", ".yaml", ".fnt" }; - - [SerializeField] - private ES3.Location _location; - /// The location where we wish to store data. As it's not possible to save/load from File in WebGL, if the default location is File it will use PlayerPrefs instead. - public ES3.Location location - { - get - { - if(_location == ES3.Location.File && (Application.platform == RuntimePlatform.WebGLPlayer || Application.platform == RuntimePlatform.tvOS)) - return ES3.Location.PlayerPrefs; - return _location; - } - set{ _location = value; } - } - - /// The path associated with this ES3Settings object, if any. - public string path = "SaveFile.es3"; - /// The type of encryption to use when encrypting data, if any. - public ES3.EncryptionType encryptionType = ES3.EncryptionType.None; - /// The type of encryption to use when encrypting data, if any. - public ES3.CompressionType compressionType = ES3.CompressionType.None; - /// The password to use when encrypting data. - public string encryptionPassword = "password"; - /// The default directory in which to store files, and the location which relative paths should be relative to. - public ES3.Directory directory = ES3.Directory.PersistentDataPath; - /// What format to use when serialising and deserialising data. - public ES3.Format format = ES3.Format.JSON; - /// Whether we want to pretty print JSON. - public bool prettyPrint = true; - /// Any stream buffers will be set to this length in bytes. - public int bufferSize = 2048; - /// The text encoding to use for text-based format. Note that changing this may invalidate previous save data. - public System.Text.Encoding encoding = System.Text.Encoding.UTF8; - // Whether we should serialise children when serialising a GameObject. - public bool saveChildren = true; - // Whether we should apply encryption and/or compression to raw cached data if they're specified in the cached data's settings. - public bool postprocessRawCachedData = false; - - /// Whether we should check that the data we are loading from a file matches the method we are using to load it. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public bool typeChecking = true; - - /// Enabling this ensures that only serialisable fields are serialised. Otherwise, possibly unsafe fields and properties will be serialised. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public bool safeReflection = true; - /// Whether UnityEngine.Object members should be stored by value, reference or both. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public ES3.ReferenceMode memberReferenceMode = ES3.ReferenceMode.ByRef; - /// Whether the main save methods should save UnityEngine.Objects by value, reference, or both. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public ES3.ReferenceMode referenceMode = ES3.ReferenceMode.ByRefAndValue; - - /// How many levels of hierarchy Easy Save will serialise. This is used to protect against cyclic references. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public int serializationDepthLimit = 64; - - /// The names of the Assemblies we should try to load our ES3Types from. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public string[] assemblyNames = new string[] { "Assembly-CSharp-firstpass", "Assembly-CSharp"}; - - /// Gets the full, absolute path which this ES3Settings object identifies. - public string FullPath - { - get - { - if (path == null) - throw new System.NullReferenceException("The 'path' field of this ES3Settings is null, indicating that it was not possible to load the default settings from Resources. Please check that the ES3 Default Settings.prefab exists in Assets/Plugins/Resources/ES3/"); - - if(IsAbsolute(path)) - return path; - - if(location == ES3.Location.File) - { - if(directory == ES3.Directory.PersistentDataPath) - return ES3IO.persistentDataPath + "/" + path; - if(directory == ES3.Directory.DataPath) - return Application.dataPath + "/" + path; - throw new System.NotImplementedException("File directory \""+directory+"\" has not been implemented."); - } - if(location == ES3.Location.Resources) - { - // Check that it has valid extension - var extension = System.IO.Path.GetExtension(path); - bool hasValidExtension = false; - foreach (var ext in resourcesExtensions) - { - if (extension == ext) - { - hasValidExtension = true; - break; - } - } - - if(!hasValidExtension) - throw new System.ArgumentException("Extension of file in Resources must be .json, .bytes, .txt, .csv, .htm, .html, .xml, .yaml or .fnt, but path given was \"" + path + "\""); - - // Remove extension - string resourcesPath = path.Replace(extension, ""); - return resourcesPath; - } - return path; - } - } - - #endregion - - #region Constructors - - /// Creates a new ES3Settings object with the given path. - /// The path associated with this ES3Settings object. - /// The settings we want to use to override the default settings. - public ES3Settings(string path = null, ES3Settings settings = null) : this(true) - { - // if there are settings to merge, merge them. - if (settings != null) - settings.CopyInto(this); - - if (path != null) - this.path = path; - } - - /// Creates a new ES3Settings object with the given path. - /// The path associated with this ES3Settings object. - /// Accepts an ES3.EncryptionType, ES3.CompressionType, ES3.Location, ES3.Directory or ES3.ReferenceMode. - public ES3Settings(string path, params System.Enum[] enums) : this(enums) - { - if (path != null) - this.path = path; - } - - - /// Creates a new ES3Settings object with the given path. - /// The path associated with this ES3Settings object. - /// Accepts an ES3.EncryptionType, ES3.CompressionType, ES3.Location, ES3.Directory or ES3.ReferenceMode. - public ES3Settings(params System.Enum[] enums) : this(true) - { - foreach (var setting in enums) - { - if (setting is ES3.EncryptionType) - this.encryptionType = (ES3.EncryptionType)setting; - else if (setting is ES3.Location) - this.location = (ES3.Location)setting; - else if (setting is ES3.CompressionType) - this.compressionType = (ES3.CompressionType)setting; - else if (setting is ES3.ReferenceMode) - this.referenceMode = (ES3.ReferenceMode)setting; - else if (setting is ES3.Format) - this.format = (ES3.Format)setting; - else if (setting is ES3.Directory) - this.directory = (ES3.Directory)setting; - } - } - - /// Creates a new ES3Settings object with the given encryption settings. - /// The type of encryption to use, if any. - /// The password to use when encrypting data. - public ES3Settings(ES3.EncryptionType encryptionType, string encryptionPassword) : this(true) - { - this.encryptionType = encryptionType; - this.encryptionPassword = encryptionPassword; - } - - /// Creates a new ES3Settings object with the given path and encryption settings. - /// The path associated with this ES3Settings object. - /// The type of encryption to use, if any. - /// The password to use when encrypting data. - /// The settings we want to use to override the default settings. - public ES3Settings(string path, ES3.EncryptionType encryptionType, string encryptionPassword, ES3Settings settings = null) : this(path, settings) - { - this.encryptionType = encryptionType; - this.encryptionPassword = encryptionPassword; - } - - /* Base constructor which allows us to bypass defaults so it can be called by Editor serialization */ - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public ES3Settings(bool applyDefaults) - { - if (applyDefaults) - if (defaultSettings != null) - _defaults.CopyInto(this); - } - - #endregion - - #region Editor methods -#if UNITY_EDITOR - public static string pathToEasySaveFolder = null; - - public static string PathToEasySaveFolder() - { - // If the path has not yet been cached, get the path and cache it. - if (string.IsNullOrEmpty(pathToEasySaveFolder)) - { - string[] guids = AssetDatabase.FindAssets("ES3Window"); - if (guids.Length == 0) - ES3Debug.LogError("Could not locate the Easy Save 3 folder because the ES3Window script has been moved or removed."); - if (guids.Length > 1) - ES3Debug.LogError("Could not locate the Easy Save 3 folder because more than one ES3Window script exists in the project, but this needs to be unique to locate the folder."); - - pathToEasySaveFolder = AssetDatabase.GUIDToAssetPath(guids[0]).Split(new string[] { "Editor" }, System.StringSplitOptions.RemoveEmptyEntries)[0]; - } - return pathToEasySaveFolder; - } - - internal static string PathToDefaultSettings() - { - return PathToEasySaveFolder() + "Resources/"+defaultSettingsPath+".asset"; - } - - internal static void CreateDefaultSettingsFolder() - { - if (AssetDatabase.IsValidFolder(PathToEasySaveFolder() + "Resources/ES3")) - return; - // Remove leading slash from PathToEasySaveFolder. - AssetDatabase.CreateFolder(PathToEasySaveFolder().Remove(PathToEasySaveFolder().Length - 1, 1), "Resources"); - AssetDatabase.CreateFolder(PathToEasySaveFolder() + "Resources", "ES3"); - } - - private static ES3SerializableSettings GetOldSettings() - { - var go = Resources.Load(defaultSettingsPath.Replace("ES3Defaults", "ES3 Default Settings")); - if(go != null) - { - var c = go.GetComponent(); - if (c != null && c.settings != null) - return c.settings; - } - return null; - } - - private static void RemoveOldSettings() - { - AssetDatabase.DeleteAsset(PathToDefaultSettings().Replace("ES3Defaults.asset", "ES3 Default Settings.prefab")); - } -#endif - #endregion - - #region Utility methods - - private static bool IsAbsolute(string path) - { - if (path.Length > 0 && (path[0] == '/' || path[0] == '\\')) - return true; - if (path.Length > 1 && path[1] == ':') - return true; - return false; - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public object Clone() - { - var settings = new ES3Settings(); - CopyInto(settings); - return settings; - } - - private void CopyInto(ES3Settings newSettings) - { - newSettings._location = _location; - newSettings.directory = directory; - newSettings.format = format; - newSettings.prettyPrint = prettyPrint; - newSettings.path = path; - newSettings.encryptionType = encryptionType; - newSettings.encryptionPassword = encryptionPassword; - newSettings.compressionType = compressionType; - newSettings.bufferSize = bufferSize; - newSettings.encoding = encoding; - newSettings.typeChecking = typeChecking; - newSettings.safeReflection = safeReflection; - newSettings.referenceMode = referenceMode; - newSettings.memberReferenceMode = memberReferenceMode; - newSettings.assemblyNames = assemblyNames; - newSettings.saveChildren = saveChildren; - newSettings.serializationDepthLimit = serializationDepthLimit; - newSettings.postprocessRawCachedData = postprocessRawCachedData; - } - - #endregion -} - -/* - * A serializable version of the settings we can use as a field in the Editor, which doesn't automatically - * assign defaults to itself, so we get no serialization errors. - */ -[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] -[System.Serializable] -public class ES3SerializableSettings : ES3Settings -{ - public ES3SerializableSettings() : base(false){} - public ES3SerializableSettings(bool applyDefaults) : base(applyDefaults){} - public ES3SerializableSettings(string path) : base(false) { this.path = path; } - public ES3SerializableSettings(string path, ES3.Location location) : base(false) { this.location = location; } - -#if UNITY_EDITOR - public bool showAdvancedSettings = false; -#endif -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Settings.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Settings.cs.meta deleted file mode 100644 index 2b45b24..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Settings/ES3Settings.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b7b35a33d52a04187b51d5e2e2e5b0c8 -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams.meta b/Assets/Plugins/Easy Save 3/Scripts/Streams.meta deleted file mode 100644 index 327f802..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 37ab5860b18cc4976bb573d0554aa453 -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3FileStream.cs b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3FileStream.cs deleted file mode 100644 index 43a23b5..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3FileStream.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.IO; - -namespace ES3Internal -{ - public enum ES3FileMode {Read, Write, Append} - - public class ES3FileStream : FileStream - { - private bool isDisposed = false; - - public ES3FileStream( string path, ES3FileMode fileMode, int bufferSize, bool useAsync) - : base( GetPath(path, fileMode), GetFileMode(fileMode), GetFileAccess(fileMode), FileShare.None, bufferSize, useAsync) - { - } - - // Gets a temporary path if necessary. - protected static string GetPath(string path, ES3FileMode fileMode) - { - string directoryPath = ES3IO.GetDirectoryPath(path); - // Attempt to create the directory incase it does not exist if we are storing data. - if (fileMode != ES3FileMode.Read && directoryPath != ES3IO.persistentDataPath) - ES3IO.CreateDirectory(directoryPath); - if(fileMode != ES3FileMode.Write || fileMode == ES3FileMode.Append) - return path; - return (fileMode == ES3FileMode.Write) ? path + ES3IO.temporaryFileSuffix : path; - } - - protected static FileMode GetFileMode(ES3FileMode fileMode) - { - if (fileMode == ES3FileMode.Read) - return FileMode.Open; - else if (fileMode == ES3FileMode.Write) - return FileMode.Create; - else - return FileMode.Append; - } - - protected static FileAccess GetFileAccess(ES3FileMode fileMode) - { - if (fileMode == ES3FileMode.Read) - return FileAccess.Read; - else if (fileMode == ES3FileMode.Write) - return FileAccess.Write; - else - return FileAccess.Write; - } - - protected override void Dispose (bool disposing) - { - // Ensure we only perform disposable once. - if(isDisposed) - return; - isDisposed = true; - - base.Dispose(disposing); - - - // If this is a file writer, we need to replace the temp file. - /*if(fileMode == ES3FileMode.Write && fileMode != ES3FileMode.Append) - { - // Delete the old file before overwriting it. - ES3IO.DeleteFile(path); - // Rename temporary file to new file. - ES3IO.MoveFile(path + ES3.temporaryFileSuffix, path); - }*/ - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3FileStream.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3FileStream.cs.meta deleted file mode 100644 index 40077cf..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3FileStream.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0daff17c3279448f994a7a93d305046a -timeCreated: 1499764821 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3PlayerPrefsStream.cs b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3PlayerPrefsStream.cs deleted file mode 100644 index 95606ff..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3PlayerPrefsStream.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.IO; -using UnityEngine; - -namespace ES3Internal -{ - internal class ES3PlayerPrefsStream : MemoryStream - { - private string path; - private bool append; - private bool isWriteStream = false; - private bool isDisposed = false; - - // This constructor should be used for read streams only. - public ES3PlayerPrefsStream(string path) : base(GetData(path,false)) - { - this.path = path; - this.append = false; - } - - // This constructor should be used for write streams only. - public ES3PlayerPrefsStream(string path, int bufferSize, bool append=false) : base(bufferSize) - { - this.path = path; - this.append = append; - this.isWriteStream = true; - } - - private static byte[] GetData(string path, bool isWriteStream) - { - if(!PlayerPrefs.HasKey(path)) - throw new FileNotFoundException("File \""+path+"\" could not be found in PlayerPrefs"); - return System.Convert.FromBase64String(PlayerPrefs.GetString(path)); - } - - protected override void Dispose (bool disposing) - { - if(isDisposed) - return; - isDisposed = true; - if(isWriteStream && this.Length > 0) - { - if (append) - { - // Convert data back to bytes before appending, as appending Base-64 strings directly can corrupt the data. - var sourceBytes = System.Convert.FromBase64String(PlayerPrefs.GetString(path)); - var appendBytes = this.ToArray(); - var finalBytes = new byte[sourceBytes.Length + appendBytes.Length]; - System.Buffer.BlockCopy(sourceBytes, 0, finalBytes, 0, sourceBytes.Length); - System.Buffer.BlockCopy(appendBytes, 0, finalBytes, sourceBytes.Length, appendBytes.Length); - - PlayerPrefs.SetString(path, System.Convert.ToBase64String(finalBytes)); - - PlayerPrefs.Save(); - } - else - PlayerPrefs.SetString(path + ES3IO.temporaryFileSuffix, System.Convert.ToBase64String(this.ToArray())); - // Save the timestamp to a separate key. - PlayerPrefs.SetString("timestamp_" + path, System.DateTime.UtcNow.Ticks.ToString()); - } - base.Dispose(disposing); - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3PlayerPrefsStream.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3PlayerPrefsStream.cs.meta deleted file mode 100644 index 690bef4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3PlayerPrefsStream.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: df45161eabf2549c28f00352d4f970dc -timeCreated: 1499764823 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3ResourcesStream.cs b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3ResourcesStream.cs deleted file mode 100644 index fcbe196..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3ResourcesStream.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.IO; -using UnityEngine; - -namespace ES3Internal -{ - internal class ES3ResourcesStream : MemoryStream - { - // Check that data exists by checking stream is not empty. - public bool Exists{ get{ return this.Length > 0; } } - - // Used when creating - public ES3ResourcesStream(string path) : base(GetData(path)) - { - } - - private static byte[] GetData(string path) - { - var textAsset = Resources.Load(path) as TextAsset; - - // If data doesn't exist in Resources, return an empty byte array. - if(textAsset == null) - return new byte[0]; - - return textAsset.bytes; - } - - protected override void Dispose (bool disposing) - { - base.Dispose(disposing); - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3ResourcesStream.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3ResourcesStream.cs.meta deleted file mode 100644 index 06046cf..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3ResourcesStream.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fe24380d3aca84a4d97e668349d86d37 -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs deleted file mode 100644 index 99fcb63..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System.IO; -using System.IO.Compression; -using UnityEngine; -using System; - -namespace ES3Internal -{ - public static class ES3Stream - { - public static Stream CreateStream(ES3Settings settings, ES3FileMode fileMode) - { - bool isWriteStream = (fileMode != ES3FileMode.Read); - Stream stream = null; - - // If we're using File as our location, check that the path is in a valid format. - if(settings.location == ES3.Location.File) - new FileInfo(settings.FullPath); - - try - { - if (settings.location == ES3.Location.InternalMS) - { - // There's no point in creating an empty MemoryStream if we're only reading from it. - if (!isWriteStream) - return null; - stream = new MemoryStream(settings.bufferSize); - } - else if (settings.location == ES3.Location.File) - { - if (!isWriteStream && !ES3IO.FileExists(settings.FullPath)) - return null; - stream = new ES3FileStream(settings.FullPath, fileMode, settings.bufferSize, false); - } - else if (settings.location == ES3.Location.PlayerPrefs) - { - if (isWriteStream) - stream = new ES3PlayerPrefsStream(settings.FullPath, settings.bufferSize, (fileMode == ES3FileMode.Append)); - else - { - if (!PlayerPrefs.HasKey(settings.FullPath)) - return null; - stream = new ES3PlayerPrefsStream(settings.FullPath); - } - } - else if (settings.location == ES3.Location.Resources) - { - if (!isWriteStream) - { - var resourcesStream = new ES3ResourcesStream(settings.FullPath); - if (resourcesStream.Exists) - stream = resourcesStream; - else - { - resourcesStream.Dispose(); - return null; - } - } - else if (UnityEngine.Application.isEditor) - throw new System.NotSupportedException("Cannot write directly to Resources folder. Try writing to a directory outside of Resources, and then manually move the file there."); - else - throw new System.NotSupportedException("Cannot write to Resources folder at runtime. Use a different save location at runtime instead."); - } - - return CreateStream(stream, settings, fileMode); - } - catch(System.Exception e) - { - if (stream != null) - stream.Dispose(); - throw e; - } - } - - public static Stream CreateStream(Stream stream, ES3Settings settings, ES3FileMode fileMode) - { - try - { - bool isWriteStream = (fileMode != ES3FileMode.Read); - - #if !DISABLE_ENCRYPTION - // Encryption - if(settings.encryptionType != ES3.EncryptionType.None && stream.GetType() != typeof(UnbufferedCryptoStream)) - { - EncryptionAlgorithm alg = null; - if(settings.encryptionType == ES3.EncryptionType.AES) - alg = new AESEncryptionAlgorithm(); - stream = new UnbufferedCryptoStream(stream, !isWriteStream, settings.encryptionPassword, settings.bufferSize, alg); - } - #endif - - // Compression - if (settings.compressionType != ES3.CompressionType.None && stream.GetType() != typeof(GZipStream)) - { - if (settings.compressionType == ES3.CompressionType.Gzip) - stream = isWriteStream ? new GZipStream(stream, CompressionMode.Compress) : new GZipStream(stream, CompressionMode.Decompress); - } - - return stream; - } - catch (System.Exception e) - { - if (stream != null) - stream.Dispose(); - if (e.GetType() == typeof(System.Security.Cryptography.CryptographicException)) - throw new System.Security.Cryptography.CryptographicException("Could not decrypt file. Please ensure that you are using the same password used to encrypt the file."); - else - throw e; - } - } - - public static void CopyTo(Stream source, Stream destination) - { - #if UNITY_2019_1_OR_NEWER - source.CopyTo(destination); - #else - byte[] buffer = new byte[2048]; - int bytesRead; - while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) - destination.Write(buffer, 0, bytesRead); - #endif - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs.meta deleted file mode 100644 index ed9f16c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b4ec91ea5d66749aca7d5555b767728a -timeCreated: 1499764822 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types.meta b/Assets/Plugins/Easy Save 3/Scripts/Types.meta deleted file mode 100644 index 40da695..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1b8a01835c8014ce9bef4d4e31eb057b -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types.meta deleted file mode 100644 index 092cfa1..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1995368ea5d4c45878840cfba12bd7bd -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES32DArrayType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES32DArrayType.cs deleted file mode 100644 index b3cff18..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES32DArrayType.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; -using System.Linq; - -namespace ES3Types -{ - public class ES32DArrayType : ES3CollectionType - { - public ES32DArrayType(Type type) : base(type){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode unityObjectType) - { - var array = (System.Array)obj; - - if(elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - //writer.StartWriteCollection(); - - for(int i=0; i < array.GetLength(0); i++) - { - writer.StartWriteCollectionItem(i); - writer.StartWriteCollection(); - for(int j=0; j < array.GetLength(1); j++) - { - writer.StartWriteCollectionItem(j); - writer.Write(array.GetValue(i,j), elementType, unityObjectType); - writer.EndWriteCollectionItem(j); - } - writer.EndWriteCollection(); - writer.EndWriteCollectionItem(i); - } - - //writer.EndWriteCollection(); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - /*if(reader.StartReadCollection()) - return null; - - // Create a List to store the items as a 1D array, which we can work out the positions of by calculating the lengths of the two dimensions. - var items = new List(); - int length1 = 0; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - - ReadICollection(reader, items, elementType); - length1++; - - if(reader.EndReadCollectionItem()) - break; - } - - int length2 = items.Count / length1; - - var array = new T[length1,length2]; - - for(int i=0; i(); - int length1 = 0; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - - ReadICollection(reader, items, elementType); - length1++; - - if(reader.EndReadCollectionItem()) - break; - } - - int length2 = items.Count / length1; - - var array = ES3Reflection.ArrayCreateInstance(elementType.type, new int[]{length1, length2}); - - for(int i=0; i(ES3Reader reader, object obj) - { - ReadInto(reader, obj); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var array = (Array)obj; - - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - bool iHasBeenRead = false; - - for(int i=0; i < array.GetLength(0); i++) - { - bool jHasBeenRead = false; - - if(!reader.StartReadCollectionItem()) - throw new IndexOutOfRangeException("The collection we are loading is smaller than the collection provided as a parameter."); - - reader.StartReadCollection(); - for(int j=0; j < array.GetLength(1); j++) - { - if(!reader.StartReadCollectionItem()) - throw new IndexOutOfRangeException("The collection we are loading is smaller than the collection provided as a parameter."); - reader.ReadInto(array.GetValue(i,j), elementType); - jHasBeenRead = reader.EndReadCollectionItem(); - } - - if(!jHasBeenRead) - throw new IndexOutOfRangeException("The collection we are loading is larger than the collection provided as a parameter."); - - reader.EndReadCollection(); - - iHasBeenRead = reader.EndReadCollectionItem(); - } - - if(!iHasBeenRead) - throw new IndexOutOfRangeException("The collection we are loading is larger than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES32DArrayType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES32DArrayType.cs.meta deleted file mode 100644 index 5d924b3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES32DArrayType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 16f7aabe86b814cc8a059954a1c78d25 -timeCreated: 1519132280 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES33DArrayType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES33DArrayType.cs deleted file mode 100644 index a424e12..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES33DArrayType.cs +++ /dev/null @@ -1,164 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types - { - public class ES33DArrayType : ES3CollectionType - { - public ES33DArrayType(Type type) : base(type){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - var array = (System.Array)obj; - - if(elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - //writer.StartWriteCollection(); - - for(int i=0; i < array.GetLength(0); i++) - { - writer.StartWriteCollectionItem(i); - writer.StartWriteCollection(); - - for(int j=0; j < array.GetLength(1); j++) - { - writer.StartWriteCollectionItem(j); - writer.StartWriteCollection(); - - for(int k=0; k < array.GetLength(2); k++) - { - writer.StartWriteCollectionItem(k); - writer.Write(array.GetValue(i,j,k), elementType, memberReferenceMode); - writer.EndWriteCollectionItem(k); - } - writer.EndWriteCollection(); - writer.EndWriteCollectionItem(j); - } - writer.EndWriteCollection(); - writer.EndWriteCollectionItem(i); - } - //writer.EndWriteCollection(); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - } - - public override object Read(ES3Reader reader) - { - if(reader.StartReadCollection()) - return null; - - // Create a List to store the items as a 1D array, which we can work out the positions of by calculating the lengths of the two dimensions. - var items = new List(); - int length1 = 0; - int length2 = 0; - - // Iterate through each sub-array - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - reader.StartReadCollection(); - - length1++; - - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - - ReadICollection(reader, items, elementType); - length2++; - - if(reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - if(reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - - length2 = length2/length1; - int length3 = items.Count / length2 / length1; - - var array = ES3Reflection.ArrayCreateInstance(elementType.type, new int[]{length1,length2,length3}); - - for(int i=0; i(ES3Reader reader, object obj) - { - ReadInto(reader, obj); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var array = (Array)obj; - - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - bool iHasBeenRead = false; - - for(int i=0; i < array.GetLength(0); i++) - { - bool jHasBeenRead = false; - - if(!reader.StartReadCollectionItem()) - throw new IndexOutOfRangeException("The collection we are loading is smaller than the collection provided as a parameter."); - - reader.StartReadCollection(); - - for(int j=0; j < array.GetLength(1); j++) - { - bool kHasBeenRead = false; - - if(!reader.StartReadCollectionItem()) - throw new IndexOutOfRangeException("The collection we are loading is smaller than the collection provided as a parameter."); - - reader.StartReadCollection(); - - for(int k=0; k < array.GetLength(2); k++) - { - if(!reader.StartReadCollectionItem()) - throw new IndexOutOfRangeException("The collection we are loading is smaller than the collection provided as a parameter."); - reader.ReadInto(array.GetValue(i,j,k), elementType); - kHasBeenRead = reader.EndReadCollectionItem(); - } - - if(!kHasBeenRead) - throw new IndexOutOfRangeException("The collection we are loading is larger than the collection provided as a parameter."); - - reader.EndReadCollection(); - - jHasBeenRead = reader.EndReadCollectionItem(); - } - - if(!jHasBeenRead) - throw new IndexOutOfRangeException("The collection we are loading is larger than the collection provided as a parameter."); - - reader.EndReadCollection(); - - iHasBeenRead = reader.EndReadCollectionItem(); - } - - if(!iHasBeenRead) - throw new IndexOutOfRangeException("The collection we are loading is larger than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES33DArrayType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES33DArrayType.cs.meta deleted file mode 100644 index f87024d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES33DArrayType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f60b75065118c4199aeaa2c3c31ecc0f -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs deleted file mode 100644 index d27c2d7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3ArrayType : ES3CollectionType - { - public ES3ArrayType(Type type) : base(type){} - public ES3ArrayType(Type type, ES3Type elementType) : base(type, elementType){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - var array = (System.Array)obj; - - if(elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - //writer.StartWriteCollection(); - - for(int i=0; i(); - if (!ReadICollection(reader, list, elementType)) - return null; - - var array = ES3Reflection.ArrayCreateInstance(elementType.type, list.Count); - int i = 0; - foreach (var item in list) - { - array.SetValue(item, i); - i++; - } - - return array; - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - ReadICollectionInto(reader, (ICollection)obj, elementType); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var collection = (IList)obj; - - if (collection.Count == 0) - ES3Debug.LogWarning("LoadInto/ReadInto expects a collection containing instances to load data in to, but the collection is empty."); - - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - int itemsLoaded = 0; - - // Iterate through each item in the collection and try to load it. - foreach(var item in collection) - { - itemsLoaded++; - - if(!reader.StartReadCollectionItem()) - break; - - reader.ReadInto(item, elementType); - - // If we find a ']', we reached the end of the array. - if(reader.EndReadCollectionItem()) - break; - - // If there's still items to load, but we've reached the end of the collection we're loading into, throw an error. - if(itemsLoaded == collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is longer than the collection provided as a parameter."); - } - - // If we loaded fewer items than the parameter collection, throw index out of range exception. - if(itemsLoaded != collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is shorter than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs.meta deleted file mode 100644 index bcdc911..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 80139e4c0efc5414caff6bb50527d63d -timeCreated: 1519132289 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs deleted file mode 100644 index ecaa2e5..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public abstract class ES3CollectionType : ES3Type - { - public ES3Type elementType; - - /*protected ES3Reflection.ES3ReflectedMethod readMethod = null; - protected ES3Reflection.ES3ReflectedMethod readIntoMethod = null;*/ - - public abstract object Read(ES3Reader reader); - public abstract void ReadInto(ES3Reader reader, object obj); - public abstract void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode); - - public ES3CollectionType(Type type) : base(type) - { - elementType = ES3TypeMgr.GetOrCreateES3Type(ES3Reflection.GetElementTypes(type)[0], false); - isCollection = true; - - // If the element type is null (i.e. unsupported), make this ES3Type null. - if(elementType == null) - isUnsupported = true; - } - - public ES3CollectionType(Type type, ES3Type elementType) : base(type) - { - this.elementType = elementType; - isCollection = true; - } - - [UnityEngine.Scripting.Preserve] - public override void Write(object obj, ES3Writer writer) - { - Write(obj, writer, ES3.ReferenceMode.ByRefAndValue); - } - - protected virtual bool ReadICollection(ES3Reader reader, ICollection collection, ES3Type elementType) - { - if(reader.StartReadCollection()) - return false; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - collection.Add(reader.Read(elementType)); - - if(reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - - return true; - } - - protected virtual void ReadICollectionInto(ES3Reader reader, ICollection collection, ES3Type elementType) - { - ReadICollectionInto(reader, collection, elementType); - } - - [UnityEngine.Scripting.Preserve] - protected virtual void ReadICollectionInto(ES3Reader reader, ICollection collection, ES3Type elementType) - { - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - int itemsLoaded = 0; - - // Iterate through each item in the collection and try to load it. - foreach(var item in collection) - { - itemsLoaded++; - - if(!reader.StartReadCollectionItem()) - break; - - reader.ReadInto(item, elementType); - - // If we find a ']', we reached the end of the array. - if(reader.EndReadCollectionItem()) - break; - - // If there's still items to load, but we've reached the end of the collection we're loading into, throw an error. - if(itemsLoaded == collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is longer than the collection provided as a parameter."); - } - - // If we loaded fewer items than the parameter collection, throw index out of range exception. - if(itemsLoaded != collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is shorter than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - - /* - * Calls the Read method using reflection so we don't need to provide a generic parameter. - */ - /*public virtual object Read(ES3Reader reader) - { - if(readMethod == null) - readMethod = ES3Reflection.GetMethod(this.GetType(), "Read", new Type[]{elementType.type}, new Type[]{typeof(ES3Reader)}); - return readMethod.Invoke(this, new object[]{reader}); - } - - public virtual void ReadInto(ES3Reader reader, object obj) - { - if(readIntoMethod == null) - readIntoMethod = ES3Reflection.GetMethod(this.GetType(), "ReadInto", new Type[]{elementType.type}, new Type[]{typeof(ES3Reader), typeof(object)}); - readIntoMethod.Invoke(this, new object[]{reader, obj}); - }*/ - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs.meta deleted file mode 100644 index d02b40d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4758f55361e6f4485afe7dfdd3a3a372 -timeCreated: 1519132284 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ConcurrentDictionaryType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ConcurrentDictionaryType.cs deleted file mode 100644 index e7966bd..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ConcurrentDictionaryType.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3ConcurrentDictionaryType : ES3Type - { - public ES3Type keyType; - public ES3Type valueType; - - protected ES3Reflection.ES3ReflectedMethod readMethod = null; - protected ES3Reflection.ES3ReflectedMethod readIntoMethod = null; - - public ES3ConcurrentDictionaryType(Type type) : base(type) - { - var types = ES3Reflection.GetElementTypes(type); - keyType = ES3TypeMgr.GetOrCreateES3Type(types[0], false); - valueType = ES3TypeMgr.GetOrCreateES3Type(types[1], false); - - // If either the key or value type is unsupported, make this type NULL. - if(keyType == null || valueType == null) - isUnsupported = true;; - - isDictionary = true; - } - - public ES3ConcurrentDictionaryType(Type type, ES3Type keyType, ES3Type valueType) : base(type) - { - this.keyType = keyType; - this.valueType = valueType; - - // If either the key or value type is unsupported, make this type NULL. - if (keyType == null || valueType == null) - isUnsupported = true; ; - - isDictionary = true; - } - - public override void Write(object obj, ES3Writer writer) - { - Write(obj, writer, writer.settings.memberReferenceMode); - } - - public void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - var dict = (IDictionary)obj; - - //writer.StartWriteDictionary(dict.Count); - - int i=0; - foreach(System.Collections.DictionaryEntry kvp in dict) - { - writer.StartWriteDictionaryKey(i); - writer.Write(kvp.Key, keyType, memberReferenceMode); - writer.EndWriteDictionaryKey(i); - writer.StartWriteDictionaryValue(i); - writer.Write(kvp.Value, valueType, memberReferenceMode); - writer.EndWriteDictionaryValue(i); - i++; - } - - //writer.EndWriteDictionary(); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - ReadInto(reader, obj); - } - - /* - * Allows us to call the generic Read method using Reflection so we can define the generic parameter at runtime. - * It also caches the method to improve performance in later calls. - */ - public object Read(ES3Reader reader) - { - if(reader.StartReadDictionary()) - return null; - - var dict = (IDictionary)ES3Reflection.CreateInstance(type); - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadDictionaryKey()) - return dict; - var key = reader.Read(keyType); - reader.EndReadDictionaryKey(); - - reader.StartReadDictionaryValue(); - var value = reader.Read(valueType); - - dict.Add(key,value); - - if(reader.EndReadDictionaryValue()) - break; - } - - reader.EndReadDictionary(); - - return dict; - } - - public void ReadInto(ES3Reader reader, object obj) - { - if(reader.StartReadDictionary()) - throw new NullReferenceException("The Dictionary we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - var dict = (IDictionary)obj; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadDictionaryKey()) - return; - var key = reader.Read(keyType); - - if(!dict.Contains(key)) - throw new KeyNotFoundException("The key \"" + key + "\" in the Dictionary we are loading does not exist in the Dictionary we are loading into"); - var value = dict[key]; - reader.EndReadDictionaryKey(); - - reader.StartReadDictionaryValue(); - - reader.ReadInto(value, valueType); - - if(reader.EndReadDictionaryValue()) - break; - } - - reader.EndReadDictionary(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ConcurrentDictionaryType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ConcurrentDictionaryType.cs.meta deleted file mode 100644 index 02b70a3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ConcurrentDictionaryType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 57aa1763324cfbd4ea9782b0ea036900 -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3DictionaryType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3DictionaryType.cs deleted file mode 100644 index 104755b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3DictionaryType.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3DictionaryType : ES3Type - { - public ES3Type keyType; - public ES3Type valueType; - - protected ES3Reflection.ES3ReflectedMethod readMethod = null; - protected ES3Reflection.ES3ReflectedMethod readIntoMethod = null; - - public ES3DictionaryType(Type type) : base(type) - { - var types = ES3Reflection.GetElementTypes(type); - keyType = ES3TypeMgr.GetOrCreateES3Type(types[0], false); - valueType = ES3TypeMgr.GetOrCreateES3Type(types[1], false); - - // If either the key or value type is unsupported, make this type NULL. - if(keyType == null || valueType == null) - isUnsupported = true;; - - isDictionary = true; - } - - public ES3DictionaryType(Type type, ES3Type keyType, ES3Type valueType) : base(type) - { - this.keyType = keyType; - this.valueType = valueType; - - // If either the key or value type is unsupported, make this type NULL. - if (keyType == null || valueType == null) - isUnsupported = true; ; - - isDictionary = true; - } - - public override void Write(object obj, ES3Writer writer) - { - Write(obj, writer, writer.settings.memberReferenceMode); - } - - public void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - var dict = (IDictionary)obj; - - //writer.StartWriteDictionary(dict.Count); - - int i=0; - foreach(System.Collections.DictionaryEntry kvp in dict) - { - writer.StartWriteDictionaryKey(i); - writer.Write(kvp.Key, keyType, memberReferenceMode); - writer.EndWriteDictionaryKey(i); - writer.StartWriteDictionaryValue(i); - writer.Write(kvp.Value, valueType, memberReferenceMode); - writer.EndWriteDictionaryValue(i); - i++; - } - - //writer.EndWriteDictionary(); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - ReadInto(reader, obj); - } - - /* - * Allows us to call the generic Read method using Reflection so we can define the generic parameter at runtime. - * It also caches the method to improve performance in later calls. - */ - public object Read(ES3Reader reader) - { - if(reader.StartReadDictionary()) - return null; - - var dict = (IDictionary)ES3Reflection.CreateInstance(type); - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadDictionaryKey()) - return dict; - var key = reader.Read(keyType); - reader.EndReadDictionaryKey(); - - reader.StartReadDictionaryValue(); - var value = reader.Read(valueType); - - dict.Add(key,value); - - if(reader.EndReadDictionaryValue()) - break; - } - - reader.EndReadDictionary(); - - return dict; - } - - public void ReadInto(ES3Reader reader, object obj) - { - if(reader.StartReadDictionary()) - throw new NullReferenceException("The Dictionary we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - var dict = (IDictionary)obj; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadDictionaryKey()) - return; - var key = reader.Read(keyType); - - if(!dict.Contains(key)) - throw new KeyNotFoundException("The key \"" + key + "\" in the Dictionary we are loading does not exist in the Dictionary we are loading into"); - var value = dict[key]; - reader.EndReadDictionaryKey(); - - reader.StartReadDictionaryValue(); - - reader.ReadInto(value, valueType); - - if(reader.EndReadDictionaryValue()) - break; - } - - reader.EndReadDictionary(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3DictionaryType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3DictionaryType.cs.meta deleted file mode 100644 index ee845c5..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3DictionaryType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2bc573810521e44bea185a4fa7c415e9 -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3HashSetType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3HashSetType.cs deleted file mode 100644 index ebac2d7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3HashSetType.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; -using System.Linq; -using System.Reflection; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3HashSetType : ES3CollectionType - { - public ES3HashSetType(Type type) : base(type){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - if (obj == null) { writer.WriteNull(); return; }; - - var list = (IEnumerable)obj; - - if (elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - int count = 0; - foreach (var item in list) - count++; - - //writer.StartWriteCollection(count); - - int i = 0; - foreach (object item in list) - { - writer.StartWriteCollectionItem(i); - writer.Write(item, elementType, memberReferenceMode); - writer.EndWriteCollectionItem(i); - i++; - } - - //writer.EndWriteCollection(); - } - - public override object Read(ES3Reader reader) - { - var val = Read(reader); - if (val == null) - return default(T); - return (T)val; - } - - - public override object Read(ES3Reader reader) - { - /*var method = typeof(ES3CollectionType).GetMethod("ReadICollection", BindingFlags.Instance | BindingFlags.NonPublic).MakeGenericMethod(elementType.type); - if(!(bool)method.Invoke(this, new object[] { reader, list, elementType })) - return null;*/ - - var genericParam = ES3Reflection.GetGenericArguments(type)[0]; - var listType = ES3Reflection.MakeGenericType(typeof(List<>), genericParam); - var list = (IList)ES3Reflection.CreateInstance(listType); - - if (!reader.StartReadCollection()) - { - // Iterate through each character until we reach the end of the array. - while (true) - { - if (!reader.StartReadCollectionItem()) - break; - list.Add(reader.Read(elementType)); - - if (reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - } - - return ES3Reflection.CreateInstance(type, list); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - ReadInto(reader, obj); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - throw new NotImplementedException("Cannot use LoadInto/ReadInto with HashSet because HashSets do not maintain the order of elements"); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3HashSetType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3HashSetType.cs.meta deleted file mode 100644 index 1301c2e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3HashSetType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e2a5f03b11de242bf9f3c6766875188b -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs deleted file mode 100644 index 931b02f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3ListType : ES3CollectionType - { - public ES3ListType(Type type) : base(type){} - public ES3ListType(Type type, ES3Type elementType) : base(type, elementType){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - if(obj == null){ writer.WriteNull(); return; }; - - var list = (IList)obj; - - if(elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - //writer.StartWriteCollection(); - - int i = 0; - foreach(object item in list) - { - writer.StartWriteCollectionItem(i); - writer.Write(item, elementType, memberReferenceMode); - writer.EndWriteCollectionItem(i); - i++; - } - - //writer.EndWriteCollection(); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - - /*var list = new List(); - if(!ReadICollection(reader, list, elementType)) - return null; - return list;*/ - } - - public override void ReadInto(ES3Reader reader, object obj) - { - ReadICollectionInto(reader, (ICollection)obj, elementType); - } - - public override object Read(ES3Reader reader) - { - var instance = (IList)ES3Reflection.CreateInstance(type); - - if(reader.StartReadCollection()) - return null; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - instance.Add(reader.Read(elementType)); - - if(reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var collection = (IList)obj; - - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - int itemsLoaded = 0; - - // Iterate through each item in the collection and try to load it. - foreach(var item in collection) - { - itemsLoaded++; - - if(!reader.StartReadCollectionItem()) - break; - - reader.ReadInto(item, elementType); - - // If we find a ']', we reached the end of the array. - if(reader.EndReadCollectionItem()) - break; - - // If there's still items to load, but we've reached the end of the collection we're loading into, throw an error. - if(itemsLoaded == collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is longer than the collection provided as a parameter."); - } - - // If we loaded fewer items than the parameter collection, throw index out of range exception. - if(itemsLoaded != collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is shorter than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs.meta deleted file mode 100644 index 628bd82..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3502f1923072c49498bb91827fae42eb -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3NativeArrayType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3NativeArrayType.cs deleted file mode 100644 index 36b3065..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3NativeArrayType.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; -using System.Linq; -using Unity.Collections; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3NativeArrayType : ES3CollectionType - { - public ES3NativeArrayType(Type type) : base(type){} - public ES3NativeArrayType(Type type, ES3Type elementType) : base(type, elementType){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - if (elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - var enumerable = (IEnumerable)obj; - - int i = 0; - foreach(var item in enumerable) - { - writer.StartWriteCollectionItem(i); - writer.Write(item, elementType, memberReferenceMode); - writer.EndWriteCollectionItem(i); - i++; - } - } - - public override object Read(ES3Reader reader) - { - var array = ReadAsArray(reader); - - return ES3Reflection.CreateInstance(type, new object[] { array, Allocator.Persistent }); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - ReadInto(reader, obj); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var array = ReadAsArray(reader); - var copyFromMethod = ES3Reflection.GetMethods(type, "CopyFrom").First(m => ES3Reflection.TypeIsArray(m.GetParameters()[0].GetType())); - copyFromMethod.Invoke(obj, new object[] { array }); - } - - private System.Array ReadAsArray(ES3Reader reader) - { - var list = new List(); - if (!ReadICollection(reader, list, elementType)) - return null; - - var array = ES3Reflection.ArrayCreateInstance(elementType.type, list.Count); - int i = 0; - foreach (var item in list) - { - array.SetValue(item, i); - i++; - } - - return array; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3NativeArrayType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3NativeArrayType.cs.meta deleted file mode 100644 index fb46dc1..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3NativeArrayType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0dee780de7e2d074bb6ceff11f18d540 -timeCreated: 1519132289 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3QueueType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3QueueType.cs deleted file mode 100644 index e204a53..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3QueueType.cs +++ /dev/null @@ -1,147 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3QueueType : ES3CollectionType - { - public ES3QueueType(Type type) : base(type){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - var list = (ICollection)obj; - - if(elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - //writer.StartWriteCollection(); - - int i = 0; - foreach(object item in list) - { - writer.StartWriteCollectionItem(i); - writer.Write(item, elementType, memberReferenceMode); - writer.EndWriteCollectionItem(i); - i++; - } - - //writer.EndWriteCollection(); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - /*if(reader.StartReadCollection()) - return null; - - var queue = new Queue(); - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - queue.Enqueue(reader.Read(elementType)); - if(reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - return queue;*/ - } - - public override void ReadInto(ES3Reader reader, object obj) - { - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - int itemsLoaded = 0; - - var queue = (Queue)obj; - - // Iterate through each item in the collection and try to load it. - foreach(var item in queue) - { - itemsLoaded++; - - if(!reader.StartReadCollectionItem()) - break; - - reader.ReadInto(item, elementType); - - // If we find a ']', we reached the end of the array. - if(reader.EndReadCollectionItem()) - break; - // If there's still items to load, but we've reached the end of the collection we're loading into, throw an error. - if(itemsLoaded == queue.Count) - throw new IndexOutOfRangeException("The collection we are loading is longer than the collection provided as a parameter."); - } - - // If we loaded fewer items than the parameter collection, throw index out of range exception. - if(itemsLoaded != queue.Count) - throw new IndexOutOfRangeException("The collection we are loading is shorter than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - - public override object Read(ES3Reader reader) - { - var instance = (IList)ES3Reflection.CreateInstance(ES3Reflection.MakeGenericType(typeof(List<>), elementType.type)); - - if(reader.StartReadCollection()) - return null; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if (!reader.StartReadCollectionItem()) - break; - instance.Add(reader.Read(elementType)); - - if (reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - - return ES3Reflection.CreateInstance(type, instance); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - int itemsLoaded = 0; - - var collection = (ICollection)obj; - - // Iterate through each item in the collection and try to load it. - foreach(var item in collection) - { - itemsLoaded++; - - if(!reader.StartReadCollectionItem()) - break; - - reader.ReadInto(item, elementType); - - // If we find a ']', we reached the end of the array. - if(reader.EndReadCollectionItem()) - break; - // If there's still items to load, but we've reached the end of the collection we're loading into, throw an error. - if(itemsLoaded == collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is longer than the collection provided as a parameter."); - } - - // If we loaded fewer items than the parameter collection, throw index out of range exception. - if(itemsLoaded != collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is shorter than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3QueueType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3QueueType.cs.meta deleted file mode 100644 index 98238b8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3QueueType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0832bfdeae2dc410db8d4963332335c7 -timeCreated: 1519132279 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3StackType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3StackType.cs deleted file mode 100644 index 2b20dbf..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3StackType.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; -using System.Reflection; -using System.Linq; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3StackType : ES3CollectionType - { - public ES3StackType(Type type) : base(type){} - - public override void Write(object obj, ES3Writer writer, ES3.ReferenceMode memberReferenceMode) - { - var list = (ICollection)obj; - - if(elementType == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - - //writer.StartWriteCollection(); - - int i = 0; - foreach(object item in list) - { - writer.StartWriteCollectionItem(i); - writer.Write(item, elementType, memberReferenceMode); - writer.EndWriteCollectionItem(i); - i++; - } - - //writer.EndWriteCollection(); - } - - public override object Read(ES3Reader reader) - { - return Read(reader); - /*if(reader.StartReadCollection()) - return null; - - var stack = new Stack(); - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - stack.Push(reader.Read(elementType)); - if(reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - return stack;*/ - } - - public override void ReadInto(ES3Reader reader, object obj) - { - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - int itemsLoaded = 0; - - var stack = (Stack)obj; - - // Iterate through each item in the collection and try to load it. - foreach(var item in stack) - { - itemsLoaded++; - - if(!reader.StartReadCollectionItem()) - break; - - reader.ReadInto(item, elementType); - - // If we find a ']', we reached the end of the array. - if(reader.EndReadCollectionItem()) - break; - // If there's still items to load, but we've reached the end of the collection we're loading into, throw an error. - if(itemsLoaded == stack.Count) - throw new IndexOutOfRangeException("The collection we are loading is longer than the collection provided as a parameter."); - } - - // If we loaded fewer items than the parameter collection, throw index out of range exception. - if(itemsLoaded != stack.Count) - throw new IndexOutOfRangeException("The collection we are loading is shorter than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - - public override object Read(ES3Reader reader) - { - var instance = (IList)ES3Reflection.CreateInstance(ES3Reflection.MakeGenericType(typeof(List<>), elementType.type)); - - if(reader.StartReadCollection()) - return null; - - // Iterate through each character until we reach the end of the array. - while(true) - { - if(!reader.StartReadCollectionItem()) - break; - instance.Add(reader.Read(elementType)); - - if(reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - - ES3Reflection.GetMethods(instance.GetType(), "Reverse").FirstOrDefault(t => !t.IsStatic).Invoke(instance, new object[]{}); - return ES3Reflection.CreateInstance(type, instance); - - } - - public override void ReadInto(ES3Reader reader, object obj) - { - if(reader.StartReadCollection()) - throw new NullReferenceException("The Collection we are trying to load is stored as null, which is not allowed when using ReadInto methods."); - - int itemsLoaded = 0; - - var collection = (ICollection)obj; - - // Iterate through each item in the collection and try to load it. - foreach(var item in collection) - { - itemsLoaded++; - - if(!reader.StartReadCollectionItem()) - break; - - reader.ReadInto(item, elementType); - - // If we find a ']', we reached the end of the array. - if(reader.EndReadCollectionItem()) - break; - // If there's still items to load, but we've reached the end of the collection we're loading into, throw an error. - if(itemsLoaded == collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is longer than the collection provided as a parameter."); - } - - // If we loaded fewer items than the parameter collection, throw index out of range exception. - if(itemsLoaded != collection.Count) - throw new IndexOutOfRangeException("The collection we are loading is shorter than the collection provided as a parameter."); - - reader.EndReadCollection(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3StackType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3StackType.cs.meta deleted file mode 100644 index 549bb64..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3StackType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 45a74cb7ab3d648208c9f89b7be930a7 -timeCreated: 1519132284 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3TupleType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3TupleType.cs deleted file mode 100644 index cb61fc6..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3TupleType.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3TupleType : ES3Type - { - public ES3Type[] es3Types; - public Type[] types; - - protected ES3Reflection.ES3ReflectedMethod readMethod = null; - protected ES3Reflection.ES3ReflectedMethod readIntoMethod = null; - - public ES3TupleType(Type type) : base(type) - { - types = ES3Reflection.GetElementTypes(type); - es3Types = new ES3Type[types.Length]; - - for(int i=0; i(ES3Reader reader) - { - var objects = new object[types.Length]; - - if (reader.StartReadCollection()) - return null; - - for(int i=0; i(es3Types[i]); - reader.EndReadCollectionItem(); - } - - reader.EndReadCollection(); - - var constructor = type.GetConstructor(types); - var instance = constructor.Invoke(objects); - - return instance; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3TupleType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3TupleType.cs.meta deleted file mode 100644 index eb7440c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3TupleType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8d2309c133bf4514784522dda2afb0fc -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3Type_ArrayList.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3Type_ArrayList.cs deleted file mode 100644 index fa97fdb..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3Type_ArrayList.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("_items", "_size", "_version")] - public class ES3Type_ArrayList : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_ArrayList() : base(typeof(System.Collections.ArrayList)) { Instance = this; } - - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (System.Collections.ArrayList)obj; - - writer.WritePrivateField("_items", instance); - writer.WritePrivateField("_size", instance); - writer.WritePrivateField("_version", instance); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (System.Collections.ArrayList)obj; - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - - case "_items": - instance = (System.Collections.ArrayList)reader.SetPrivateField("_items", reader.Read(), instance); - break; - case "_size": - instance = (System.Collections.ArrayList)reader.SetPrivateField("_size", reader.Read(), instance); - break; - case "_version": - instance = (System.Collections.ArrayList)reader.SetPrivateField("_version", reader.Read(), instance); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new System.Collections.ArrayList(); - ReadObject(reader, instance); - return instance; - } - } - - - public class ES3UserType_ArrayListArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3UserType_ArrayListArray() : base(typeof(System.Collections.ArrayList[]), ES3Type_ArrayList.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3Type_ArrayList.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3Type_ArrayList.cs.meta deleted file mode 100644 index fe44bb4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3Type_ArrayList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 49ea5f9a0f640d440a9bd514cd7a7ad0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs deleted file mode 100644 index b63a593..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public abstract class ES3ComponentType : ES3UnityObjectType - { - public ES3ComponentType(Type type) : base(type) { } - - protected abstract void WriteComponent(object obj, ES3Writer writer); - protected abstract void ReadComponent(ES3Reader reader, object obj); - - protected const string gameObjectPropertyName = "goID"; - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = obj as Component; - if (obj != null && instance == null) - throw new ArgumentException("Only types of UnityEngine.Component can be written with this method, but argument given is type of " + obj.GetType()); - - var refMgr = ES3ReferenceMgrBase.GetManagerFromScene(instance.gameObject.scene); - - if (refMgr != null) - { - // Write the reference of the GameObject so we know what one to attach it to. - writer.WriteProperty(gameObjectPropertyName, refMgr.Add(instance.gameObject).ToString(), ES3Type_string.Instance); - } - WriteComponent(instance, writer); - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - ReadComponent(reader, obj); - } - - protected override object ReadUnityObject(ES3Reader reader) - { - throw new NotImplementedException(); - } - - /* - * It's IMPORTANT that we override ReadObject in ES3UnityObjectType rather than use ReadUnityObject because otherwise the first IF statement will never be called, - * and we will never get the reference ID for the Component we're loading, so if we create a new Component we cannot assign it's correct reference ID. - */ - protected override object ReadObject(ES3Reader reader) - { - var refMgr = ES3ReferenceMgrBase.Current; - long id = -1; - UnityEngine.Object instance = null; - - foreach (string propertyName in reader.Properties) - { - if (propertyName == ES3ReferenceMgrBase.referencePropertyName) - { - id = reader.Read_ref(); - instance = refMgr.Get(id, true); - - /*if (instance != null) - break;*/ - } - else if (propertyName == gameObjectPropertyName) - { - long goID = reader.Read_ref(); - - // If we already have an instance for this Component, don't attempt to create a new GameObject for it. - if (instance != null) - break; - - var go = (GameObject)refMgr.Get(goID, type); - - if (go == null) - { - go = new GameObject("Easy Save 3 Loaded GameObject"); -#if UNITY_EDITOR - go.AddComponent().SetMessage("This GameObject was created because Easy Save could not find a GameObject in the scene with the same instance ID as the GameObject the Component we are loading is attached to.\nTo prevent this from being created, use the LoadInto methods to tell Easy Save what Component the data should be loaded in to."); -#endif - refMgr.Add(go, goID); - } - instance = GetOrAddComponent(go, type); - refMgr.Add(instance, id); - break; - } - else - { - reader.overridePropertiesName = propertyName; - if (instance == null) - { - var go = new GameObject("Easy Save 3 Loaded GameObject"); -#if UNITY_EDITOR - go.AddComponent().SetMessage("This GameObject was created because Easy Save could not find a GameObject in the scene with the same instance ID as the GameObject the Component we are loading is attached to.\nTo prevent this from being created, use the LoadInto methods to tell Easy Save what Component the data should be loaded in to."); -#endif - instance = GetOrAddComponent(go, type); - refMgr.Add(instance, id); - refMgr.Add(go); - } - break; - } - } - - if(instance != null) - ReadComponent(reader, instance); - - return instance; - } - - private static Component GetOrAddComponent(GameObject go, Type type) - { - var c = go.GetComponent(type); - if (c != null) - return c; - return go.AddComponent(type); - - /*if (type == typeof(Transform)) - return go.GetComponent(type); - // Manage types which can only have a single Component attached. - else if (type == typeof(MeshFilter) || type.Name.ToString().Contains("Renderer") || ES3Reflection.AttributeIsDefined(type, typeof(DisallowMultipleComponent))) - return GetOrCreateComponentIfNotExists(go, type); - return go.AddComponent(type);*/ - } - - public static Component CreateComponent(Type type) - { - GameObject go = new GameObject("Easy Save 3 Loaded Component"); -#if UNITY_EDITOR - // If we're running in the Editor, add a description explaining why this object was created. - go.AddComponent().SetMessage("This GameObject was created because Easy Save tried to load a Component with an instance ID which does not exist in this scene.\nTo prevent this from being created, use the LoadInto methods to tell Easy Save what Component the data should be loaded in to.\nThis can also happen if you load a class which references another object, but that object has not yet been loaded. In this case, you should load the object the class references before loading the class."); -#endif - if (type == typeof(Transform)) - return go.GetComponent(type); - return GetOrAddComponent(go, type); - } - - // Creates a Component if one doesn't exist, or returns the existing instance. - /*public static Component GetOrCreateComponentIfNotExists(GameObject go, Type type) - { - Component mf; - if ((mf = go.GetComponent(type)) != null) - return mf; - return go.AddComponent(type); - }*/ - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs.meta deleted file mode 100644 index c7ba402..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6d82e3d10b49c4028bca528611e53210 -timeCreated: 1499764822 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3GenericType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3GenericType.cs deleted file mode 100644 index 5056ecd..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3GenericType.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public abstract class ES3GenericType : ES3Type - { - public Type[] genericArguments; - public ES3Type[] genericArgumentES3Types; - - public ES3Type argumentES3Type; - public Type genericArgument; - - ES3Reflection.ES3ReflectedMember hasValueProperty; - ES3Reflection.ES3ReflectedMember valueProperty; - - public ES3GenericType(Type type) : base(type) - { - genericArguments = ES3Reflection.GetGenericArguments(type); - genericArgumentES3Types = new ES3Type[genericArguments.Length]; - - for (int i = 0; i < genericArguments.Length; i++) - { - genericArgumentES3Types[i] = ES3TypeMgr.GetOrCreateES3Type(genericArguments[i], false); - if (genericArgumentES3Types[i] == null || genericArgumentES3Types[i].isUnsupported) - this.isUnsupported = true; - } - } - - - public override void Write(object obj, ES3Writer writer) - { - var hasValue = (bool)hasValueProperty.GetValue(obj); - writer.WriteProperty("HasValue", hasValue, ES3Type_bool.Instance); - - if (hasValue) - { - var value = valueProperty.GetValue(obj); - writer.WriteProperty("Value", value, argumentES3Type); - } - } - - public override object Read(ES3Reader reader) - { - var hasValue = reader.ReadProperty(ES3Type_bool.Instance); - - if (!hasValue) - { - // Call parameterless constructor to set it as null. - var constructor = ES3Reflection.GetConstructor(type, new Type[0]); - return constructor.Invoke(new object[0]); - } - else - { - var value = reader.ReadProperty(argumentES3Type); - var constructor = ES3Reflection.GetConstructor(type, new Type[] { genericArgument }); - return constructor.Invoke(new object[] { value }); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3GenericType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3GenericType.cs.meta deleted file mode 100644 index 077962e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3GenericType.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e9b5a36560db414458d423f1d7c1a36c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs deleted file mode 100644 index 093caad..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public abstract class ES3ObjectType : ES3Type - { - public ES3ObjectType(Type type) : base(type) {} - - protected abstract void WriteObject(object obj, ES3Writer writer); - protected abstract object ReadObject(ES3Reader reader); - - protected virtual void ReadObject(ES3Reader reader, object obj) - { - throw new NotSupportedException("ReadInto is not supported for type "+type); - } - - public override void Write(object obj, ES3Writer writer) - { - if (!WriteUsingDerivedType(obj, writer)) - { - var baseType = ES3Reflection.BaseType(obj.GetType()); - if (baseType != typeof(object)) - { - var es3Type = ES3TypeMgr.GetOrCreateES3Type(baseType, false); - // If it's a Dictionary or Collection, we need to write it as a field with a property name. - if (es3Type != null && (es3Type.isDictionary || es3Type.isCollection)) - writer.WriteProperty("_Values", obj, es3Type); - } - - WriteObject(obj, writer); - } - } - - public override object Read(ES3Reader reader) - { - string propertyName; - while(true) - { - propertyName = ReadPropertyName(reader); - - if(propertyName == ES3Type.typeFieldName) - return ES3TypeMgr.GetOrCreateES3Type(reader.ReadType()).Read(reader); - else - { - reader.overridePropertiesName = propertyName; - - return ReadObject(reader); - } - } - } - - public override void ReadInto(ES3Reader reader, object obj) - { - string propertyName; - while(true) - { - propertyName = ReadPropertyName(reader); - - if(propertyName == ES3Type.typeFieldName) - { - ES3TypeMgr.GetOrCreateES3Type(reader.ReadType()).ReadInto(reader, obj); - return; - } - // This is important we return if the enumerator returns null, otherwise we will encounter an endless cycle. - else if (propertyName == null) - return; - else - { - reader.overridePropertiesName = propertyName; - ReadObject(reader, obj); - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs.meta deleted file mode 100644 index fd73df3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2becffd8c9d4e4e0db6031d9680eae48 -timeCreated: 1499764821 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Property.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Property.cs deleted file mode 100644 index 26e6369..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Property.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.ComponentModel; - -namespace ES3Internal -{ - public class ES3Member - { - public string name; - public Type type; - public bool isProperty; - public ES3Reflection.ES3ReflectedMember reflectedMember; - public bool useReflection = false; - - public ES3Member(string name, Type type, bool isProperty) - { - this.name = name; - this.type = type; - this.isProperty = isProperty; - } - - public ES3Member(ES3Reflection.ES3ReflectedMember reflectedMember) - { - this.reflectedMember = reflectedMember; - this.name = reflectedMember.Name; - this.type = reflectedMember.MemberType; - this.isProperty = reflectedMember.isProperty; - this.useReflection = true; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Property.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Property.cs.meta deleted file mode 100644 index f3f82e0..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Property.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b987e63c8e10f448c8364eaceddd96e5 -timeCreated: 1519132295 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ScriptableObjectType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ScriptableObjectType.cs deleted file mode 100644 index d388055..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ScriptableObjectType.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public abstract class ES3ScriptableObjectType : ES3UnityObjectType - { - public ES3ScriptableObjectType(Type type) : base(type) {} - - protected abstract void WriteScriptableObject(object obj, ES3Writer writer); - protected abstract void ReadScriptableObject(ES3Reader reader, object obj); - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = obj as ScriptableObject; - if(obj != null && instance == null) - throw new ArgumentException("Only types of UnityEngine.ScriptableObject can be written with this method, but argument given is type of "+obj.GetType()); - - // If this object is in the instance manager, store it's instance ID with it. - /*var refMgr = ES3ReferenceMgrBase.Current; - if(refMgr != null) - writer.WriteRef(instance);*/ - WriteScriptableObject(instance, writer); - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - ReadScriptableObject(reader, obj); - } - - protected override object ReadUnityObject(ES3Reader reader) - { - throw new NotImplementedException(); - } - - - protected override object ReadObject(ES3Reader reader) - { - var refMgr = ES3ReferenceMgrBase.Current; - long id = -1; - UnityEngine.Object instance = null; - - foreach(string propertyName in reader.Properties) - { - if(propertyName == ES3ReferenceMgrBase.referencePropertyName && refMgr != null) - { - id = reader.Read_ref(); - instance = refMgr.Get(id, type); - - if (instance != null) - break; - } - else - { - reader.overridePropertiesName = propertyName; - - if (instance == null) - { - instance = ScriptableObject.CreateInstance(type); - if (refMgr != null) - refMgr.Add(instance, id); - } - - break; - } - } - - ReadScriptableObject(reader, instance); - return instance; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ScriptableObjectType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ScriptableObjectType.cs.meta deleted file mode 100644 index f3d9c7b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3ScriptableObjectType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a26529496f04146959460074ab1a9b3f -timeCreated: 1519132293 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Type.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Type.cs deleted file mode 100644 index c2d5a3a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3Type.cs +++ /dev/null @@ -1,194 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; -using System.Linq; - -namespace ES3Types -{ - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - [UnityEngine.Scripting.Preserve] - public abstract class ES3Type - { - public const string typeFieldName = "__type"; - - public ES3Member[] members; - public Type type; - public bool isPrimitive = false; - public bool isValueType = false; - public bool isCollection = false; - public bool isDictionary = false; - public bool isTuple = false; - public bool isEnum = false; - public bool isES3TypeUnityObject = false; - public bool isReflectedType = false; - public bool isUnsupported = false; - public int priority = 0; - - protected ES3Type(Type type) - { - // It's important the type is added here, otherwise it may cause a StackOverflow if the class has a field of the same type as itself (or collection). - ES3TypeMgr.Add(type, this); - this.type = type; - this.isValueType = ES3Reflection.IsValueType(type); - } - - public abstract void Write(object obj, ES3Writer writer); - public abstract object Read(ES3Reader reader); - - public virtual void ReadInto(ES3Reader reader, object obj) - { - throw new NotImplementedException("Self-assigning Read is not implemented or supported on this type."); - } - - protected bool WriteUsingDerivedType(object obj, ES3Writer writer) - { - var objType = obj.GetType(); - - if(objType != this.type) - { - writer.WriteType(objType); - ES3TypeMgr.GetOrCreateES3Type(objType).Write(obj, writer); - return true; - } - return false; - } - - protected void ReadUsingDerivedType(ES3Reader reader, object obj) - { - ES3TypeMgr.GetOrCreateES3Type(reader.ReadType()).ReadInto(reader, obj); - } - - internal string ReadPropertyName(ES3Reader reader) - { - if(reader.overridePropertiesName != null) - { - string propertyName = reader.overridePropertiesName; - reader.overridePropertiesName = null; - return propertyName; - } - return reader.ReadPropertyName(); - } - - #region Reflection Methods - - protected void WriteProperties(object obj, ES3Writer writer) - { - if(members == null) - GetMembers(writer.settings.safeReflection); - - for(int i=0; i(reader); - foreach (DictionaryEntry kvp in loaded) - dict[kvp.Key] = kvp.Value; - } - else if(baseType.isCollection) - { - var loaded = (IEnumerable)baseType.Read(reader); - - var type = baseType.GetType(); - - if (type == typeof(ES3ListType)) - foreach (var item in loaded) - ((IList)obj).Add(item); - else if (type == typeof(ES3QueueType)) - { - var method = baseType.type.GetMethod("Enqueue"); - foreach (var item in loaded) - method.Invoke(obj, new object[] { item }); - } - else if (type == typeof(ES3StackType)) - { - var method = baseType.type.GetMethod("Push"); - foreach (var item in loaded) - method.Invoke(obj, new object[] { item }); - } - else if (type == typeof(ES3HashSetType)) - { - var method = baseType.type.GetMethod("Add"); - foreach (var item in loaded) - method.Invoke(obj, new object[] { item }); - } - } - } - - if (property == null) - reader.Skip(); - else - { - var type = ES3TypeMgr.GetOrCreateES3Type(property.type); - - if(ES3Reflection.IsAssignableFrom(typeof(ES3DictionaryType), type.GetType())) - property.reflectedMember.SetValue(obj, ((ES3DictionaryType)type).Read(reader)); - else if(ES3Reflection.IsAssignableFrom(typeof(ES3CollectionType), type.GetType())) - property.reflectedMember.SetValue(obj, ((ES3CollectionType)type).Read(reader)); - else - { - object readObj = reader.Read(type); - property.reflectedMember.SetValue(obj, readObj); - } - } - } - return obj; - } - - protected void GetMembers(bool safe) - { - GetMembers(safe, null); - } - - protected void GetMembers(bool safe, string[] memberNames) - { - var serializedMembers = ES3Reflection.GetSerializableMembers(type, safe, memberNames); - - members = new ES3Member[serializedMembers.Length]; - for(int i=0; i types = null; - - // We cache the last accessed type as we quite often use the same type multiple times, - // so this improves performance as another lookup is not required. - private static ES3Type lastAccessedType = null; - - public static ES3Type GetOrCreateES3Type(Type type, bool throwException = true) - { - if (types == null) - Init(); - - if (type != typeof(object) && lastAccessedType != null && lastAccessedType.type == type) - return lastAccessedType; - - // If type doesn't exist, create one. - if (types.TryGetValue(type, out lastAccessedType)) - return lastAccessedType; - return (lastAccessedType = CreateES3Type(type, throwException)); - } - - public static ES3Type GetES3Type(Type type) - { - if (types == null) - Init(); - - if (types.TryGetValue(type, out lastAccessedType)) - return lastAccessedType; - return null; - } - - internal static void Add(Type type, ES3Type es3Type) - { - if (types == null) - Init(); - - var existingType = GetES3Type(type); - if (existingType != null && existingType.priority > es3Type.priority) - return; - - lock (_lock) - { - types[type] = es3Type; - } - } - - internal static ES3Type CreateES3Type(Type type, bool throwException = true) - { - ES3Type es3Type; - - if (ES3Reflection.IsEnum(type)) - return new ES3Type_enum(type); - else if (ES3Reflection.TypeIsArray(type)) - { - int rank = ES3Reflection.GetArrayRank(type); - if (rank == 1) - es3Type = new ES3ArrayType(type); - else if (rank == 2) - es3Type = new ES32DArrayType(type); - else if (rank == 3) - es3Type = new ES33DArrayType(type); - else if (throwException) - throw new NotSupportedException("Only arrays with up to three dimensions are supported by Easy Save."); - else - return null; - } - else if (ES3Reflection.IsGenericType(type) && ES3Reflection.ImplementsInterface(type, typeof(IEnumerable))) - { - Type genericType = ES3Reflection.GetGenericTypeDefinition(type); - if (typeof(List<>).IsAssignableFrom(genericType)) - es3Type = new ES3ListType(type); - else if (typeof(Dictionary<,>).IsAssignableFrom(genericType)) - es3Type = new ES3DictionaryType(type); - else if (genericType == typeof(Queue<>)) - es3Type = new ES3QueueType(type); - else if (genericType == typeof(Stack<>)) - es3Type = new ES3StackType(type); - else if (genericType == typeof(HashSet<>)) - es3Type = new ES3HashSetType(type); - else if (genericType == typeof(Unity.Collections.NativeArray<>)) - es3Type = new ES3NativeArrayType(type); - // Else see if there is an ES3Type with the generic type definition. - else if ((es3Type = GetES3Type(genericType)) != null) - es3Type = GetGenericES3Type(type, throwException); - } - else if (ES3Reflection.IsPrimitive(type)) // ERROR: We should not have to create an ES3Type for a primitive. - { - if (types == null || types.Count == 0) // If the type list is not initialised, it is most likely an initialisation error. - throw new TypeLoadException("ES3Type for primitive could not be found, and the type list is empty. Please contact Easy Save developers at https://www.moodkie.com/contact"); - else // Else it's a different error, possibly an error in the specific ES3Type for that type. - throw new TypeLoadException("ES3Type for primitive could not be found, but the type list has been initialised and is not empty. Please contact Easy Save developers using the form at https://www.moodkie.com/contact."); - } - else - { - // See if there's a generic ES3Type. If not, let it fall through to the reflected ES3Types. - if((es3Type = GetGenericES3Type(type, false)) != null) - { - } - else if (ES3Reflection.IsAssignableFrom(typeof(Component), type)) - es3Type = new ES3ReflectedComponentType(type); - else if (ES3Reflection.IsAssignableFrom(typeof(ScriptableObject), type)) - es3Type = new ES3ReflectedScriptableObjectType(type); - else if (ES3Reflection.IsAssignableFrom(typeof(UnityEngine.Object), type)) - es3Type = new ES3ReflectedUnityObjectType(type); - else if (ES3Reflection.IsValueType(type)) - es3Type = new ES3ReflectedValueType(type); - /*else if (ES3Reflection.HasParameterlessConstructor(type) || ES3Reflection.IsAbstract(type) || ES3Reflection.IsInterface(type)) - es3Type = new ES3ReflectedObjectType(type);*/ - /*else if (throwException) - throw new NotSupportedException("Type of " + type + " is not supported as it does not have a parameterless constructor. Only value types, Components or ScriptableObjects are supportable without a parameterless constructor. However, you may be able to create an ES3Type script to add support for it.");*/ - else - es3Type = new ES3ReflectedObjectType(type); - } - - if (es3Type == null || es3Type.type == null || es3Type.isUnsupported) - { - if(throwException) - throw new NotSupportedException($"ES3Type.type is null when trying to create an ES3Type for {type}, possibly because the element type is not supported."); - return null; - } - - Add(type, es3Type); - return es3Type; - } - - static ES3Type GetGenericES3Type(Type type, bool throwException) - { - if (!ES3Reflection.IsGenericType(type)) - return null; - - if (type.Name.StartsWith("Tuple`")) - return new ES3TupleType(type); - - Type genericType = ES3Reflection.GetGenericTypeDefinition(type); - - var es3Type = GetES3Type(genericType); - - if(es3Type != null) - { - // Get the constructor which accepts a Type as a parameter. - var constructor = ES3Reflection.GetConstructor(es3Type.GetType(), new Type[] { typeof(Type) }); - - if (constructor == null) - { - if (throwException) - throw new NotSupportedException($"Generic type {type} is not supported by Easy Save as it's generic type definition {genericType} does not have a constructor which accepts a Type as a parameter."); - return null; - } - return (ES3Type)constructor.Invoke(new object[] { type }); - } - - if (throwException) - throw new NotSupportedException("Generic type \"" + type.ToString() + "\" is not supported by Easy Save."); - - return null; - } - - internal static void Init() - { - lock (_lock) - { - types = new Dictionary(); - - var instances = ES3Reflection.GetInstances(); // ES3Types add themselves to the manager when instantiated to ensure they don't cause cyclic references if they contain a field which is the same type as themselves. - - /*foreach(var instance in instances) - ES3TypeMgr.Add(instance.type, instance);*/ - - // Check that the type list was initialised correctly. - if (types == null || types.Count == 0) - throw new TypeLoadException("Type list could not be initialised. Please contact Easy Save developers on mail@moodkie.com."); - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3TypeMgr.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3TypeMgr.cs.meta deleted file mode 100644 index 3b697d6..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3TypeMgr.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ed6202a98cbc545a0842c63cf8894b99 -timeCreated: 1499764823 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs deleted file mode 100644 index 03e61bc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public abstract class ES3UnityObjectType : ES3ObjectType - { - public ES3UnityObjectType(Type type) : base(type) - { - this.isValueType = false; - isES3TypeUnityObject = true; - } - - protected abstract void WriteUnityObject(object obj, ES3Writer writer); - protected abstract void ReadUnityObject(ES3Reader reader, object obj); - protected abstract object ReadUnityObject(ES3Reader reader); - - protected override void WriteObject(object obj, ES3Writer writer) - { - WriteObject(obj, writer, ES3.ReferenceMode.ByRefAndValue); - } - - public virtual void WriteObject(object obj, ES3Writer writer, ES3.ReferenceMode mode) - { - if(WriteUsingDerivedType(obj, writer, mode)) - return; - var instance = obj as UnityEngine.Object; - if(obj != null && instance == null) - throw new ArgumentException("Only types of UnityEngine.Object can be written with this method, but argument given is type of "+obj.GetType()); - - // If this object is in the instance manager, store it's instance ID with it. - if(mode != ES3.ReferenceMode.ByValue) - { - var refMgr = ES3ReferenceMgrBase.Current; - if (refMgr == null) - throw new InvalidOperationException($"An Easy Save 3 Manager is required to save references. To add one to your scene, exit playmode and go to Tools > Easy Save 3 > Add Manager to Scene. Object being saved by reference is {instance.GetType()} with name {instance.name}."); - writer.WriteRef(instance); - if(mode == ES3.ReferenceMode.ByRef) - return; - } - WriteUnityObject(instance, writer); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var refMgr = ES3ReferenceMgrBase.Current; - if (refMgr != null) - { - foreach (string propertyName in reader.Properties) - { - if (propertyName == ES3ReferenceMgrBase.referencePropertyName) - // If the object we're loading into isn't registered with the reference manager, register it. - refMgr.Add((UnityEngine.Object)obj, reader.Read_ref()); - else - { - reader.overridePropertiesName = propertyName; - break; - } - } - } - ReadUnityObject(reader, obj); - } - - protected override object ReadObject(ES3Reader reader) - { - var refMgr = ES3ReferenceMgrBase.Current; - if(refMgr == null) - return ReadUnityObject(reader); - - long id = -1; - UnityEngine.Object instance = null; - - foreach(string propertyName in reader.Properties) - { - if(propertyName == ES3ReferenceMgrBase.referencePropertyName) - { - if(refMgr == null) - throw new InvalidOperationException($"An Easy Save 3 Manager is required to save references. To add one to your scene, exit playmode and go to Tools > Easy Save 3 > Add Manager to Scene. Object being saved by reference is {instance.GetType()} with name {instance.name}."); - id = reader.Read_ref(); - instance = refMgr.Get(id, type); - - if(instance != null) - break; - } - else - { - reader.overridePropertiesName = propertyName; - if (instance == null) - { - instance = (UnityEngine.Object)ReadUnityObject(reader); - refMgr.Add(instance, id); - } - break; - } - } - - ReadUnityObject(reader, instance); - return instance; - } - - protected bool WriteUsingDerivedType(object obj, ES3Writer writer, ES3.ReferenceMode mode) - { - var objType = obj.GetType(); - - if (objType != this.type) - { - writer.WriteType(objType); - - var es3Type = ES3TypeMgr.GetOrCreateES3Type(objType); - if (es3Type is ES3UnityObjectType) - ((ES3UnityObjectType)es3Type).WriteObject(obj, writer, mode); - else - es3Type.Write(obj, writer); - - return true; - } - return false; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs.meta deleted file mode 100644 index ac4d029..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6206e73d6e9414301b5475296e1103a2 -timeCreated: 1519132286 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types.meta deleted file mode 100644 index f2de032..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 01ada09c8494e744a87f6e4bc52f3235 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_BigInteger.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_BigInteger.cs deleted file mode 100644 index f9fae40..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_BigInteger.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Numerics; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3Properties("bytes")] - public class ES3Type_BigInteger : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_BigInteger() : base(typeof(BigInteger)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - BigInteger casted = (BigInteger)obj; - writer.WriteProperty("bytes", casted.ToByteArray(), ES3Type_byteArray.Instance); - } - - public override object Read(ES3Reader reader) - { - return new BigInteger(reader.ReadProperty(ES3Type_byteArray.Instance)); - } - } - - public class ES3Type_BigIntegerArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_BigIntegerArray() : base(typeof(BigInteger[]), ES3Type_BigInteger.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_BigInteger.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_BigInteger.cs.meta deleted file mode 100644 index 70524b5..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_BigInteger.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b3375f14105a7074b92a27519e7a9bb4 -timeCreated: 1538210707 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Nullable.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Nullable.cs deleted file mode 100644 index ec9f6da..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Nullable.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_Nullable : ES3Type - { - public ES3Type argumentES3Type; - public Type genericArgument; - - ES3Reflection.ES3ReflectedMember hasValueProperty; - ES3Reflection.ES3ReflectedMember valueProperty; - - public ES3Type_Nullable() : base(typeof(Nullable<>)) - { - } - - public ES3Type_Nullable(Type type) : base(type) - { - hasValueProperty = ES3Reflection.GetES3ReflectedProperty(type, "HasValue"); - valueProperty = ES3Reflection.GetES3ReflectedProperty(type, "Value"); - - genericArgument = ES3Reflection.GetGenericArguments(type)[0]; - argumentES3Type = ES3TypeMgr.GetOrCreateES3Type(genericArgument, false); - isUnsupported = (argumentES3Type == null); - } - - public override void Write(object obj, ES3Writer writer) - { - var hasValue = (bool)hasValueProperty.GetValue(obj); - writer.WriteProperty("HasValue", hasValue, ES3Type_bool.Instance); - - if(hasValue) - { - var value = valueProperty.GetValue(obj); - writer.WriteProperty("Value", value, argumentES3Type); - } - } - - public override object Read(ES3Reader reader) - { - var hasValue = reader.ReadProperty(ES3Type_bool.Instance); - - if(!hasValue) - { - // Call parameterless constructor to set it as null. - var constructor = ES3Reflection.GetConstructor(type, new Type[0]); - return constructor.Invoke(new object[0]); - } - else - { - var value = reader.ReadProperty(argumentES3Type); - var constructor = ES3Reflection.GetConstructor(type, new Type[] { genericArgument }); - return constructor.Invoke(new object[] { value }); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Nullable.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Nullable.cs.meta deleted file mode 100644 index f2d12d4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Nullable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 16763ff62e066b44a98d652e9e43db81 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Random.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Random.cs deleted file mode 100644 index 1a51b47..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Random.cs +++ /dev/null @@ -1,71 +0,0 @@ -/* - * System.Random is no longer serializable at runtime due to Unity changing the implementation away from .NET. - */ - -using System; -using UnityEngine; - -namespace ES3Types -{ -#if !UNITY_2021_2_OR_NEWER - - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("inext", "inextp", "SeedArray")] - public class ES3Type_Random : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_Random() : base(typeof(System.Random)){ Instance = this; } - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (System.Random)obj; - - writer.WritePrivateField("inext", instance); - writer.WritePrivateField("inextp", instance); - writer.WritePrivateField("SeedArray", instance); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (System.Random)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "inext": - reader.SetPrivateField("inext", reader.Read(), instance); - break; - case "inextp": - reader.SetPrivateField("inextp", reader.Read(), instance); - break; - case "SeedArray": - reader.SetPrivateField("SeedArray", reader.Read(), instance); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new System.Random(); - ReadObject(reader, instance); - return instance; - } - } - - public class ES3Type_RandomArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_RandomArray() : base(typeof(System.Random[]), ES3Type_Random.Instance) - { - Instance = this; - } - } -#endif -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Random.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Random.cs.meta deleted file mode 100644 index a207ee3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Random.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 84232cc4cb5a646249f6ebe5eeee1e97 -timeCreated: 1538210707 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Type.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Type.cs deleted file mode 100644 index 1a3cf7e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Type.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3Properties()] - public class ES3Type_Type : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Type() : base(typeof(System.Type)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Type type = (Type)obj; - writer.WriteProperty("assemblyQualifiedName", type.AssemblyQualifiedName); - } - - public override object Read(ES3Reader reader) - { - return Type.GetType(reader.ReadProperty()); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Type.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Type.cs.meta deleted file mode 100644 index 6e403dc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/NET Types/ES3Type_Type.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 1fe3873c075a7c2409980f2e5e400017 -timeCreated: 1538210707 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types.meta deleted file mode 100644 index ec25ae6..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 045cb4c329b0141ea8d3acd96dff32c2 -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_DateTime.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_DateTime.cs deleted file mode 100644 index 0dbd8eb..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_DateTime.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_DateTime : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_DateTime() : base(typeof(DateTime)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WriteProperty("ticks", ((DateTime)obj).Ticks, ES3Type_long.Instance); - } - - public override object Read(ES3Reader reader) - { - reader.ReadPropertyName(); - return new DateTime(reader.Read(ES3Type_long.Instance)); - } - } - - public class ES3Type_DateTimeArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_DateTimeArray() : base(typeof(DateTime[]), ES3Type_DateTime.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_DateTime.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_DateTime.cs.meta deleted file mode 100644 index ed6ed0a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_DateTime.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9c9737ff78c714548af339e220b90303 -timeCreated: 1519132292 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ES3Ref.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ES3Ref.cs deleted file mode 100644 index 9fffa4c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ES3Ref.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_ES3Ref : ES3Type - { - public static ES3Type Instance = new ES3Type_ES3Ref(); - - public ES3Type_ES3Ref() : base(typeof(long)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive(((long)obj).ToString()); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)new ES3Ref(reader.Read_ref()); - } - } - - public class ES3Type_ES3RefArray : ES3ArrayType - { - public static ES3Type Instance = new ES3Type_ES3RefArray(); - - public ES3Type_ES3RefArray() : base(typeof(ES3Ref[]), ES3Type_ES3Ref.Instance) - { - Instance = this; - } - } - - public class ES3Type_ES3RefDictionary : ES3DictionaryType - { - public static ES3Type Instance = new ES3Type_ES3RefDictionary(); - - public ES3Type_ES3RefDictionary() : base(typeof(Dictionary), ES3Type_ES3Ref.Instance, ES3Type_ES3Ref.Instance) - { - Instance = this; - } - } -} - -public class ES3Ref -{ - public long id; - public ES3Ref(long id) - { - this.id = id; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ES3Ref.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ES3Ref.cs.meta deleted file mode 100644 index a88c0e0..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ES3Ref.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ab1dd0b4209f2c144ad424236e639426 -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_UIntPtr.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_UIntPtr.cs deleted file mode 100644 index 05e8b49..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_UIntPtr.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_UIntPtr : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_UIntPtr() : base(typeof(UIntPtr)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((ulong)obj); - } - - public override object Read(ES3Reader reader) - { - return (object)reader.Read_ulong(); - } - } - - public class ES3Type_UIntPtrArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_UIntPtrArray() : base(typeof(UIntPtr[]), ES3Type_UIntPtr.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_UIntPtr.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_UIntPtr.cs.meta deleted file mode 100644 index e1a3ccb..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_UIntPtr.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6fe9eb4dc6fa54989a516115e34602df -timeCreated: 1519132288 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_bool.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_bool.cs deleted file mode 100644 index 3a4dd53..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_bool.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_bool : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_bool() : base(typeof(bool)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((bool)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_bool(); - } - } - - public class ES3Type_boolArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_boolArray() : base(typeof(bool[]), ES3Type_bool.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_bool.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_bool.cs.meta deleted file mode 100644 index 81ea5f7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_bool.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6fa779d8184f649f897074ba540ab1f9 -timeCreated: 1519132288 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byte.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byte.cs deleted file mode 100644 index 00504ff..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byte.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_byte : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_byte() : base(typeof(byte)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((byte)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_byte(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byte.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byte.cs.meta deleted file mode 100644 index d72b280..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byte.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0c6f8718240d84f40a9d4b3ac41b3398 -timeCreated: 1519132280 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byteArray.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byteArray.cs deleted file mode 100644 index 6ea34b3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byteArray.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_byteArray : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_byteArray() : base(typeof(byte[])) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((byte[])obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_byteArray(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byteArray.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byteArray.cs.meta deleted file mode 100644 index 614f5dc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_byteArray.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 59bd4a4624c4a4082bb3b8333a399ee2 -timeCreated: 1519132286 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_char.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_char.cs deleted file mode 100644 index 47c7466..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_char.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_char : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_char() : base(typeof(char)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((char)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_char(); - } - } - public class ES3Type_charArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_charArray() : base(typeof(char[]), ES3Type_char.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_char.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_char.cs.meta deleted file mode 100644 index 4e5cc82..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_char.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fdc3981e5018244468c97a2bbcbb610a -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_decimal.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_decimal.cs deleted file mode 100644 index 50e9428..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_decimal.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_decimal : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_decimal() : base(typeof(decimal)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((decimal)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_decimal(); - } - } - - public class ES3Type_decimalArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_decimalArray() : base(typeof(decimal[]), ES3Type_decimal.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_decimal.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_decimal.cs.meta deleted file mode 100644 index 78ea5c7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_decimal.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 030f062403dc345f78476442992e3c9c -timeCreated: 1519132279 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_double.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_double.cs deleted file mode 100644 index 6ca2dd3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_double.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_double : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_double() : base(typeof(double)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((double)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_double(); - } - } - - public class ES3Type_doubleArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_doubleArray() : base(typeof(double[]), ES3Type_double.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_double.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_double.cs.meta deleted file mode 100644 index 5ccb756..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_double.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c445261bbbfc24045863aa3c2c097a73 -timeCreated: 1519132296 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs deleted file mode 100644 index 311101a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_enum : ES3Type - { - public static ES3Type Instance = null; - private Type underlyingType = null; - - public ES3Type_enum(Type type) : base(type) - { - isPrimitive = true; - isEnum = true; - Instance = this; - underlyingType = Enum.GetUnderlyingType(type); - } - - public override void Write(object obj, ES3Writer writer) - { - if(underlyingType == typeof(int)) writer.WritePrimitive((int)obj); - else if(underlyingType == typeof(bool)) writer.WritePrimitive((bool)obj); - else if(underlyingType == typeof(byte)) writer.WritePrimitive((byte)obj); - else if(underlyingType == typeof(char)) writer.WritePrimitive((char)obj); - else if(underlyingType == typeof(decimal)) writer.WritePrimitive((decimal)obj); - else if(underlyingType == typeof(double)) writer.WritePrimitive((double)obj); - else if(underlyingType == typeof(float)) writer.WritePrimitive((float)obj); - else if(underlyingType == typeof(long)) writer.WritePrimitive((long)obj); - else if(underlyingType == typeof(sbyte)) writer.WritePrimitive((sbyte)obj); - else if(underlyingType == typeof(short)) writer.WritePrimitive((short)obj); - else if(underlyingType == typeof(uint)) writer.WritePrimitive((uint)obj); - else if(underlyingType == typeof(ulong)) writer.WritePrimitive((ulong)obj); - else if(underlyingType == typeof(ushort)) writer.WritePrimitive((ushort)obj); - else - throw new System.InvalidCastException("The underlying type " + underlyingType + " of Enum "+type+" is not supported"); - - } - - public override object Read(ES3Reader reader) - { - if(underlyingType == typeof(int)) return Enum.ToObject (type, reader.Read_int()); - else if(underlyingType == typeof(bool)) return Enum.ToObject (type, reader.Read_bool()); - else if(underlyingType == typeof(byte)) return Enum.ToObject (type, reader.Read_byte()); - else if(underlyingType == typeof(char)) return Enum.ToObject (type, reader.Read_char()); - else if(underlyingType == typeof(decimal)) return Enum.ToObject (type, reader.Read_decimal()); - else if(underlyingType == typeof(double)) return Enum.ToObject (type, reader.Read_double()); - else if(underlyingType == typeof(float)) return Enum.ToObject (type, reader.Read_float()); - else if(underlyingType == typeof(long)) return Enum.ToObject (type, reader.Read_long()); - else if(underlyingType == typeof(sbyte)) return Enum.ToObject (type, reader.Read_sbyte()); - else if(underlyingType == typeof(short)) return Enum.ToObject (type, reader.Read_short()); - else if(underlyingType == typeof(uint)) return Enum.ToObject (type, reader.Read_uint()); - else if(underlyingType == typeof(ulong)) return Enum.ToObject (type, reader.Read_ulong()); - else if(underlyingType == typeof(ushort)) return Enum.ToObject (type, reader.Read_ushort()); - else - throw new System.InvalidCastException("The underlying type " + underlyingType + " of Enum "+type+" is not supported"); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs.meta deleted file mode 100644 index 822eee4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0bc176cf7e9c84850b4ead41131e66af -timeCreated: 1519132280 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_float.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_float.cs deleted file mode 100644 index 220485d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_float.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_float : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_float() : base(typeof(float)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((float)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_float(); - } - } - - public class ES3Type_floatArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_floatArray() : base(typeof(float[]), ES3Type_float.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_float.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_float.cs.meta deleted file mode 100644 index a27a1f6..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_float.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f40643b43129b41ff9143c8a23741391 -timeCreated: 1519132300 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_int.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_int.cs deleted file mode 100644 index 6061fac..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_int.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_int : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_int() : base(typeof(int)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((int)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_int(); - } - } - - public class ES3Type_intArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_intArray() : base(typeof(int[]), ES3Type_int.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_int.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_int.cs.meta deleted file mode 100644 index 53a2beb..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_int.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 13efdffd9de75437f8eb6d09e595e70d -timeCreated: 1519132280 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_intptr.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_intptr.cs deleted file mode 100644 index f2bd8dc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_intptr.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_IntPtr : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_IntPtr() : base(typeof(IntPtr)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((long)(IntPtr)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)(IntPtr)reader.Read_long(); - } - } - - public class ES3Type_IntPtrArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_IntPtrArray() : base(typeof(IntPtr[]), ES3Type_IntPtr.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_intptr.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_intptr.cs.meta deleted file mode 100644 index 09cb3a1..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_intptr.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8fe212a329d2d46a482270d9a93d704f -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_long.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_long.cs deleted file mode 100644 index df2271a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_long.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_long : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_long() : base(typeof(long)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((long)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_long(); - } - } - - public class ES3Type_longArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_longArray() : base(typeof(long[]), ES3Type_long.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_long.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_long.cs.meta deleted file mode 100644 index 792ad5e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_long.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b534e98b9d5dc4219978a5aada0d11b0 -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_sbyte.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_sbyte.cs deleted file mode 100644 index 3e8f210..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_sbyte.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_sbyte : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_sbyte() : base(typeof(sbyte)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((sbyte)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_sbyte(); - } - } - - public class ES3Type_sbyteArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_sbyteArray() : base(typeof(sbyte[]), ES3Type_sbyte.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_sbyte.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_sbyte.cs.meta deleted file mode 100644 index 383ec75..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_sbyte.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5aaea33736cb64165b06b21ccffb4dde -timeCreated: 1519132286 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_short.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_short.cs deleted file mode 100644 index 391c72a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_short.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_short : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_short() : base(typeof(short)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((short)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_short(); - } - } - - public class ES3Type_shortArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_shortArray() : base(typeof(short[]), ES3Type_short.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_short.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_short.cs.meta deleted file mode 100644 index 8088746..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_short.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 62ef5aa170d8444eb9613f6733dace9c -timeCreated: 1519132286 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_string.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_string.cs deleted file mode 100644 index ef8d159..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_string.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_string : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_string() : base(typeof(string)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((string)obj); - } - - public override object Read(ES3Reader reader) - { - return reader.Read_string(); - } - } - - public class ES3Type_StringArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_StringArray() : base(typeof(string[]), ES3Type_string.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_string.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_string.cs.meta deleted file mode 100644 index 5c50346..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_string.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 138987e042d4e4283a967a0958ab0a52 -timeCreated: 1519132280 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_uint.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_uint.cs deleted file mode 100644 index 854f5c8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_uint.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_uint : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_uint() : base(typeof(uint)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((uint)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_uint(); - } - } - - public class ES3Type_uintArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_uintArray() : base(typeof(uint[]), ES3Type_uint.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_uint.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_uint.cs.meta deleted file mode 100644 index 4c9fcc2..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_uint.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2c39c4f1168884e94b9e7e6087affd2d -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ulong.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ulong.cs deleted file mode 100644 index d18b692..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ulong.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_ulong : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ulong() : base(typeof(ulong)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((ulong)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_ulong(); - } - } - - public class ES3Type_ulongArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_ulongArray() : base(typeof(ulong[]), ES3Type_ulong.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ulong.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ulong.cs.meta deleted file mode 100644 index 2e8f548..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ulong.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f25dca3f336094cababceb772c7e390b -timeCreated: 1519132300 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ushort.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ushort.cs deleted file mode 100644 index 11c9e8e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ushort.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_ushort : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ushort() : base(typeof(ushort)) - { - isPrimitive = true; - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - writer.WritePrimitive((ushort)obj); - } - - public override object Read(ES3Reader reader) - { - return (T)(object)reader.Read_ushort(); - } - } - - public class ES3Type_ushortArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_ushortArray() : base(typeof(ushort[]), ES3Type_ushort.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ushort.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ushort.cs.meta deleted file mode 100644 index 37c6b4e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_ushort.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 33d86db06b1954996a48d38a75c76dd9 -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types.meta deleted file mode 100644 index cdc6e25..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4082e405acc0345388494ffa52b63839 -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedComponentType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedComponentType.cs deleted file mode 100644 index a1d1ca0..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedComponentType.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - internal class ES3ReflectedComponentType : ES3ComponentType - { - public ES3ReflectedComponentType(Type type) : base(type) - { - isReflectedType = true; - GetMembers(true); - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - WriteProperties(obj, writer); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - ReadProperties(reader, obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedComponentType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedComponentType.cs.meta deleted file mode 100644 index 9a62402..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedComponentType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2b125647af96a4b5494ca82d1da9a9e6 -timeCreated: 1499764821 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs deleted file mode 100644 index 2c57caa..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - internal class ES3ReflectedObjectType : ES3ObjectType - { - public ES3ReflectedObjectType(Type type) : base(type) - { - isReflectedType = true; - GetMembers(true); - } - - protected override void WriteObject(object obj, ES3Writer writer) - { - WriteProperties(obj, writer); - } - - protected override object ReadObject(ES3Reader reader) - { - var obj = ES3Reflection.CreateInstance(this.type); - ReadProperties(reader, obj); - return obj; - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - ReadProperties(reader, obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs.meta deleted file mode 100644 index 99d776e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d239970ac781b4079bda34e2999dc775 -timeCreated: 1519132297 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedScriptableObjectType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedScriptableObjectType.cs deleted file mode 100644 index b53b487..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedScriptableObjectType.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - internal class ES3ReflectedScriptableObjectType : ES3ScriptableObjectType - { - public ES3ReflectedScriptableObjectType(Type type) : base(type) - { - isReflectedType = true; - GetMembers(true); - } - - protected override void WriteScriptableObject(object obj, ES3Writer writer) - { - WriteProperties(obj, writer); - } - - protected override void ReadScriptableObject(ES3Reader reader, object obj) - { - ReadProperties(reader, obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedScriptableObjectType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedScriptableObjectType.cs.meta deleted file mode 100644 index 45d7433..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedScriptableObjectType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: dd9e88c6e3735412ab2033c284212528 -timeCreated: 1519132298 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedType.cs deleted file mode 100644 index b195113..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedType.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - internal class ES3ReflectedType : ES3Type - { - public ES3ReflectedType(Type type) : base(type) - { - isReflectedType = true; - } - - // Constructs a reflected ES3Type, only serializing members which are in the provided members array. - public ES3ReflectedType(Type type, string[] members) : this(type) - { - GetMembers(false, members); - } - - public override void Write(object obj, ES3Writer writer) - { - // Manage NULL values. - if(obj == null){writer.WriteNull(); return;}; - - UnityEngine.Object unityObj = obj as UnityEngine.Object; - bool isUnityEngineObject = (unityObj != null); - - // If this is a derived type, write the type as a property and use it's specific ES3Type. - var objType = obj.GetType(); - if(objType != this.type) - { - writer.WriteType(objType); - ES3TypeMgr.GetOrCreateES3Type(objType).Write(obj, writer); - return; - } - - if(isUnityEngineObject) - writer.WriteRef(unityObj); - - if(members == null) - GetMembers(writer.settings.safeReflection); - for(int i=0; i(ES3Reader reader) - { - if(members == null) - GetMembers(reader.settings.safeReflection); - - object obj; - string propertyName = reader.ReadPropertyName(); - - // If we're loading a derived type, use it's specific ES3Type. - if(propertyName == ES3Type.typeFieldName) - return ES3TypeMgr.GetOrCreateES3Type(reader.ReadType()).Read(reader); - - // If we're loading a reference, load it. Else, create an instance. - if(propertyName == ES3ReferenceMgrBase.referencePropertyName) - { - long id = reader.Read_ref(); - obj = ES3ReferenceMgrBase.Current.Get(id, type); - if(obj == null) - { - // If an instance isn't already registered for this object, create an instance and register the reference. - obj = ES3Reflection.CreateInstance(this.type); - ES3ReferenceMgrBase.Current.Add((UnityEngine.Object)obj, id); - } - } - else - { - reader.overridePropertiesName = propertyName; - obj = ES3Reflection.CreateInstance(this.type); - } - - // Iterate through each property in the file and try to load it using the appropriate - // ES3Property in the members array. - ReadProperties(reader, obj); - - return obj; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - if(members == null) - GetMembers(reader.settings.safeReflection); - - string propertyName = reader.ReadPropertyName(); - - // If we're loading a derived type, use it's specific ES3Type. - if(propertyName == ES3Type.typeFieldName) - { - ES3TypeMgr.GetOrCreateES3Type(reader.ReadType()).ReadInto(reader, obj); - return; - } - else - reader.overridePropertiesName = propertyName; - - // Iterate through each property in the file and try to load it using the appropriate - // ES3Property in the members array. - ReadProperties(reader, obj); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedType.cs.meta deleted file mode 100644 index 3a91f09..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d859cda1b74634568a53487bd1651001 -timeCreated: 1499764823 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedUnityObjectType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedUnityObjectType.cs deleted file mode 100644 index 946a2f1..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedUnityObjectType.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - internal class ES3ReflectedUnityObjectType : ES3UnityObjectType - { - public ES3ReflectedUnityObjectType(Type type) : base(type) - { - isReflectedType = true; - GetMembers(true); - } - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - WriteProperties(obj, writer); - } - - protected override object ReadUnityObject(ES3Reader reader) - { - var obj = ES3Reflection.CreateInstance(this.type); - ReadProperties(reader, obj); - return obj; - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - ReadProperties(reader, obj); - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedUnityObjectType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedUnityObjectType.cs.meta deleted file mode 100644 index c9d5889..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedUnityObjectType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f8c48527c8cb247f1be391e0ca112968 -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedValueType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedValueType.cs deleted file mode 100644 index 0af9af9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedValueType.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - internal class ES3ReflectedValueType : ES3Type - { - public ES3ReflectedValueType(Type type) : base(type) - { - isReflectedType = true; - GetMembers(true); - } - - public override void Write(object obj, ES3Writer writer) - { - WriteProperties(obj, writer); - } - - public override object Read(ES3Reader reader) - { - var obj = ES3Reflection.CreateInstance(this.type); - - if(obj == null) - throw new NotSupportedException("Cannot create an instance of "+this.type+". However, you may be able to add support for it using a custom ES3Type file. For more information see: http://docs.moodkie.com/easy-save-3/es3-guides/controlling-serialization-using-es3types/"); - // Make sure we return the result of ReadProperties as properties aren't assigned by reference. - return ReadProperties(reader, obj); - } - - public override void ReadInto(ES3Reader reader, object obj) - { - throw new NotSupportedException("Cannot perform self-assigning load on a value type."); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedValueType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedValueType.cs.meta deleted file mode 100644 index 2099910..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedValueType.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f8bc4124377914b60b46b243480f0eb5 -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types.meta deleted file mode 100644 index 7389163..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a14e00d7328764c16803c1a5f854286b -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types.meta deleted file mode 100644 index 4873446..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 96e5384a630b34a90a22b84d95f3dac9 -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider.cs deleted file mode 100644 index 51801af..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("center", "size", "enabled", "isTrigger", "contactOffset", "sharedMaterial")] - public class ES3Type_BoxCollider : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_BoxCollider() : base(typeof(UnityEngine.BoxCollider)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.BoxCollider)obj; - - writer.WriteProperty("center", instance.center); - writer.WriteProperty("size", instance.size); - writer.WriteProperty("enabled", instance.enabled); - writer.WriteProperty("isTrigger", instance.isTrigger); - writer.WriteProperty("contactOffset", instance.contactOffset); - writer.WritePropertyByRef("material", instance.sharedMaterial); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.BoxCollider)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "center": - instance.center = reader.Read(); - break; - case "size": - instance.size = reader.Read(); - break; - case "enabled": - instance.enabled = reader.Read(); - break; - case "isTrigger": - instance.isTrigger = reader.Read(); - break; - case "contactOffset": - instance.contactOffset = reader.Read(); - break; - case "material": -#if UNITY_6000_0_OR_NEWER - - instance.sharedMaterial = reader.Read(); -#else - instance.sharedMaterial = reader.Read(); -#endif - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider.cs.meta deleted file mode 100644 index a45de66..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d36ea4342de4546b198eea1405516979 -timeCreated: 1519132297 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider2D.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider2D.cs deleted file mode 100644 index 2d42dc4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider2D.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("size", "density", "isTrigger", "usedByEffector", "offset", "sharedMaterial", "enabled")] - public class ES3Type_BoxCollider2D : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_BoxCollider2D() : base(typeof(UnityEngine.BoxCollider2D)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.BoxCollider2D)obj; - - writer.WriteProperty("size", instance.size); - if(instance.attachedRigidbody != null && instance.attachedRigidbody.useAutoMass) - writer.WriteProperty("density", instance.density); - writer.WriteProperty("isTrigger", instance.isTrigger); - writer.WriteProperty("usedByEffector", instance.usedByEffector); - writer.WriteProperty("offset", instance.offset); - writer.WritePropertyByRef("sharedMaterial", instance.sharedMaterial); - writer.WriteProperty("enabled", instance.enabled); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.BoxCollider2D)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "size": - instance.size = reader.Read(); - break; - case "density": - instance.density = reader.Read(); - break; - case "isTrigger": - instance.isTrigger = reader.Read(); - break; - case "usedByEffector": - instance.usedByEffector = reader.Read(); - break; - case "offset": - instance.offset = reader.Read(); - break; - case "sharedMaterial": - instance.sharedMaterial = reader.Read(); - break; - case "enabled": - instance.enabled = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider2D.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider2D.cs.meta deleted file mode 100644 index 0795afc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_BoxCollider2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8ae32677f95cd4f2ba1c34db2a065c9c -timeCreated: 1519132290 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Camera.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Camera.cs deleted file mode 100644 index 3db142b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Camera.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("fieldOfView", "nearClipPlane", "farClipPlane", "renderingPath", "allowHDR", "orthographicSize", "orthographic", "opaqueSortMode", "transparencySortMode", "depth", "aspect", "cullingMask", "eventMask", "backgroundColor", "rect", "pixelRect", "worldToCameraMatrix", "projectionMatrix", "nonJitteredProjectionMatrix", "useJitteredProjectionMatrixForTransparentRendering", "clearFlags", "stereoSeparation", "stereoConvergence", "cameraType", "stereoTargetEye", "targetDisplay", "useOcclusionCulling", "cullingMatrix", "layerCullSpherical", "depthTextureMode", "clearStencilAfterLightingPass", "enabled", "hideFlags")] - public class ES3Type_Camera : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_Camera() : base(typeof(UnityEngine.Camera)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Camera)obj; - - writer.WriteProperty("fieldOfView", instance.fieldOfView); - writer.WriteProperty("nearClipPlane", instance.nearClipPlane); - writer.WriteProperty("farClipPlane", instance.farClipPlane); - writer.WriteProperty("renderingPath", instance.renderingPath); - #if UNITY_5_6_OR_NEWER - writer.WriteProperty("allowHDR", instance.allowHDR); - #endif - writer.WriteProperty("orthographicSize", instance.orthographicSize); - writer.WriteProperty("orthographic", instance.orthographic); - writer.WriteProperty("opaqueSortMode", instance.opaqueSortMode); - writer.WriteProperty("transparencySortMode", instance.transparencySortMode); - writer.WriteProperty("depth", instance.depth); - writer.WriteProperty("aspect", instance.aspect); - writer.WriteProperty("cullingMask", instance.cullingMask); - writer.WriteProperty("eventMask", instance.eventMask); - writer.WriteProperty("backgroundColor", instance.backgroundColor); - writer.WriteProperty("rect", instance.rect); - writer.WriteProperty("pixelRect", instance.pixelRect); - writer.WriteProperty("projectionMatrix", instance.projectionMatrix); - writer.WriteProperty("nonJitteredProjectionMatrix", instance.nonJitteredProjectionMatrix); - writer.WriteProperty("useJitteredProjectionMatrixForTransparentRendering", instance.useJitteredProjectionMatrixForTransparentRendering); - writer.WriteProperty("clearFlags", instance.clearFlags); - writer.WriteProperty("stereoSeparation", instance.stereoSeparation); - writer.WriteProperty("stereoConvergence", instance.stereoConvergence); - writer.WriteProperty("cameraType", instance.cameraType); - writer.WriteProperty("stereoTargetEye", instance.stereoTargetEye); - writer.WriteProperty("targetDisplay", instance.targetDisplay); - writer.WriteProperty("useOcclusionCulling", instance.useOcclusionCulling); - writer.WriteProperty("layerCullSpherical", instance.layerCullSpherical); - writer.WriteProperty("depthTextureMode", instance.depthTextureMode); - writer.WriteProperty("clearStencilAfterLightingPass", instance.clearStencilAfterLightingPass); - writer.WriteProperty("enabled", instance.enabled); - writer.WriteProperty("hideFlags", instance.hideFlags); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Camera)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "fieldOfView": - instance.fieldOfView = reader.Read(); - break; - case "nearClipPlane": - instance.nearClipPlane = reader.Read(); - break; - case "farClipPlane": - instance.farClipPlane = reader.Read(); - break; - case "renderingPath": - instance.renderingPath = reader.Read(); - break; - #if UNITY_5_6_OR_NEWER - case "allowHDR": - instance.allowHDR = reader.Read(); - break; - #endif - case "orthographicSize": - instance.orthographicSize = reader.Read(); - break; - case "orthographic": - instance.orthographic = reader.Read(); - break; - case "opaqueSortMode": - instance.opaqueSortMode = reader.Read(); - break; - case "transparencySortMode": - instance.transparencySortMode = reader.Read(); - break; - case "depth": - instance.depth = reader.Read(); - break; - case "aspect": - instance.aspect = reader.Read(); - break; - case "cullingMask": - instance.cullingMask = reader.Read(); - break; - case "eventMask": - instance.eventMask = reader.Read(); - break; - case "backgroundColor": - instance.backgroundColor = reader.Read(); - break; - case "rect": - instance.rect = reader.Read(); - break; - case "pixelRect": - instance.pixelRect = reader.Read(); - break; - case "projectionMatrix": - instance.projectionMatrix = reader.Read(); - break; - case "nonJitteredProjectionMatrix": - instance.nonJitteredProjectionMatrix = reader.Read(); - break; - case "useJitteredProjectionMatrixForTransparentRendering": - instance.useJitteredProjectionMatrixForTransparentRendering = reader.Read(); - break; - case "clearFlags": - instance.clearFlags = reader.Read(); - break; - case "stereoSeparation": - instance.stereoSeparation = reader.Read(); - break; - case "stereoConvergence": - instance.stereoConvergence = reader.Read(); - break; - case "cameraType": - instance.cameraType = reader.Read(); - break; - case "stereoTargetEye": - instance.stereoTargetEye = reader.Read(); - break; - case "targetDisplay": - instance.targetDisplay = reader.Read(); - break; - case "useOcclusionCulling": - instance.useOcclusionCulling = reader.Read(); - break; - case "layerCullSpherical": - instance.layerCullSpherical = reader.Read(); - break; - case "depthTextureMode": - instance.depthTextureMode = reader.Read(); - break; - case "clearStencilAfterLightingPass": - instance.clearStencilAfterLightingPass = reader.Read(); - break; - case "enabled": - instance.enabled = reader.Read(); - break; - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Camera.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Camera.cs.meta deleted file mode 100644 index 2d367aa..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Camera.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c88c1ce73e1f3462ea1aff5df7935e22 -timeCreated: 1499764822 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_CapsuleCollider.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_CapsuleCollider.cs deleted file mode 100644 index 2451507..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_CapsuleCollider.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("center", "radius", "height", "direction", "enabled", "isTrigger", "contactOffset", "sharedMaterial")] - public class ES3Type_CapsuleCollider : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_CapsuleCollider() : base(typeof(UnityEngine.CapsuleCollider)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.CapsuleCollider)obj; - - writer.WriteProperty("center", instance.center, ES3Type_Vector3.Instance); - writer.WriteProperty("radius", instance.radius, ES3Type_float.Instance); - writer.WriteProperty("height", instance.height, ES3Type_float.Instance); - writer.WriteProperty("direction", instance.direction, ES3Type_int.Instance); - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("isTrigger", instance.isTrigger, ES3Type_bool.Instance); - writer.WriteProperty("contactOffset", instance.contactOffset, ES3Type_float.Instance); - writer.WritePropertyByRef("material", instance.sharedMaterial); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.CapsuleCollider)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - case "center": - instance.center = reader.Read(ES3Type_Vector3.Instance); - break; - case "radius": - instance.radius = reader.Read(ES3Type_float.Instance); - break; - case "height": - instance.height = reader.Read(ES3Type_float.Instance); - break; - case "direction": - instance.direction = reader.Read(ES3Type_int.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "isTrigger": - instance.isTrigger = reader.Read(ES3Type_bool.Instance); - break; - case "contactOffset": - instance.contactOffset = reader.Read(ES3Type_float.Instance); - break; - case "material": -#if UNITY_6000_0_OR_NEWER - instance.sharedMaterial = reader.Read(); -#else - instance.sharedMaterial = reader.Read(); -#endif - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_CapsuleCollider.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_CapsuleCollider.cs.meta deleted file mode 100644 index f4c88e0..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_CapsuleCollider.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c523bafd506f04c85b160320b0b6d9dd -timeCreated: 1519132296 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_EventSystem.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_EventSystem.cs deleted file mode 100644 index 6c7f8e3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_EventSystem.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if ES3_UGUI - -using System; -using UnityEngine; -using UnityEngine.EventSystems; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - public class ES3Type_EventSystem : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_EventSystem() : base(typeof(EventSystem)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - foreach(string propertyName in reader.Properties) - reader.Skip(); - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_EventSystem.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_EventSystem.cs.meta deleted file mode 100644 index d901720..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_EventSystem.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 02df167b6b77741308bfc8110dae71dd -timeCreated: 1519132279 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Image.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Image.cs deleted file mode 100644 index 4827953..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Image.cs +++ /dev/null @@ -1,137 +0,0 @@ -#if ES3_UGUI - -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("sprite", "overrideSprite", "type", "preserveAspect", "fillCenter", "fillMethod", "fillAmount", "fillClockwise", "fillOrigin", "alphaHitTestMinimumThreshold", "useSpriteMesh", "pixelsPerUnitMultiplier", "material", "onCullStateChanged", "maskable", "color", "raycastTarget", "useLegacyMeshGeneration", "useGUILayout", "enabled", "hideFlags")] - public class ES3Type_Image : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_Image() : base(typeof(UnityEngine.UI.Image)){ Instance = this; } - - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.UI.Image)obj; - - writer.WritePropertyByRef("sprite", instance.sprite); - writer.WriteProperty("type", instance.type); - writer.WriteProperty("preserveAspect", instance.preserveAspect, ES3Type_bool.Instance); - writer.WriteProperty("fillCenter", instance.fillCenter, ES3Type_bool.Instance); - writer.WriteProperty("fillMethod", instance.fillMethod); - writer.WriteProperty("fillAmount", instance.fillAmount, ES3Type_float.Instance); - writer.WriteProperty("fillClockwise", instance.fillClockwise, ES3Type_bool.Instance); - writer.WriteProperty("fillOrigin", instance.fillOrigin, ES3Type_int.Instance); - //alphaHitTestMinimumThreshold is disabled as Unity provides no way to check for crunch compression which is required to set this variable. - //writer.WriteProperty("alphaHitTestMinimumThreshold", instance.alphaHitTestMinimumThreshold, ES3Type_float.Instance); -#if UNITY_2019_1_OR_NEWER - writer.WriteProperty("useSpriteMesh", instance.useSpriteMesh, ES3Type_bool.Instance); -#endif - // Unity automatically sets the default material if it's set to null. - // This prevents missing reference warnings. - if (instance.material.name.Contains("Default")) - writer.WriteProperty("material", null); - else - writer.WriteProperty("material", instance.material); - writer.WriteProperty("onCullStateChanged", instance.onCullStateChanged); - writer.WriteProperty("maskable", instance.maskable, ES3Type_bool.Instance); - writer.WriteProperty("color", instance.color, ES3Type_Color.Instance); - writer.WriteProperty("raycastTarget", instance.raycastTarget, ES3Type_bool.Instance); - writer.WritePrivateProperty("useLegacyMeshGeneration", instance); - writer.WriteProperty("useGUILayout", instance.useGUILayout, ES3Type_bool.Instance); - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("hideFlags", instance.hideFlags, ES3Type_enum.Instance); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.UI.Image)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "sprite": - instance.sprite = reader.Read(ES3Type_Sprite.Instance); - break; - case "type": - instance.type = reader.Read(); - break; - case "preserveAspect": - instance.preserveAspect = reader.Read(ES3Type_bool.Instance); - break; - case "fillCenter": - instance.fillCenter = reader.Read(ES3Type_bool.Instance); - break; - case "fillMethod": - instance.fillMethod = reader.Read(); - break; - case "fillAmount": - instance.fillAmount = reader.Read(ES3Type_float.Instance); - break; - case "fillClockwise": - instance.fillClockwise = reader.Read(ES3Type_bool.Instance); - break; - case "fillOrigin": - instance.fillOrigin = reader.Read(ES3Type_int.Instance); - break; - /*case "alphaHitTestMinimumThreshold": - instance.alphaHitTestMinimumThreshold = reader.Read(ES3Type_float.Instance); - break;*/ -#if UNITY_2019_1_OR_NEWER - case "useSpriteMesh": - instance.useSpriteMesh = reader.Read(ES3Type_bool.Instance); - break; -#endif - case "material": - instance.material = reader.Read(ES3Type_Material.Instance); - break; - case "onCullStateChanged": - instance.onCullStateChanged = reader.Read(); - break; - case "maskable": - instance.maskable = reader.Read(ES3Type_bool.Instance); - break; - case "color": - instance.color = reader.Read(ES3Type_Color.Instance); - break; - case "raycastTarget": - instance.raycastTarget = reader.Read(ES3Type_bool.Instance); - break; - case "useLegacyMeshGeneration": - reader.SetPrivateProperty("useLegacyMeshGeneration", reader.Read(), instance); - break; - case "useGUILayout": - instance.useGUILayout = reader.Read(ES3Type_bool.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "hideFlags": - instance.hideFlags = reader.Read(ES3Type_enum.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } - - - public class ES3Type_ImageArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_ImageArray() : base(typeof(UnityEngine.UI.Image[]), ES3Type_Image.Instance) - { - Instance = this; - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Image.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Image.cs.meta deleted file mode 100644 index 0b13178..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Image.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 044e538602955694c90bc8b86d487ac5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshCollider.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshCollider.cs deleted file mode 100644 index 7247493..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshCollider.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("sharedMesh", "convex", "inflateMesh", "skinWidth", "enabled", "isTrigger", "contactOffset", "sharedMaterial")] - public class ES3Type_MeshCollider : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_MeshCollider() : base(typeof(UnityEngine.MeshCollider)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.MeshCollider)obj; - - writer.WritePropertyByRef("sharedMesh", instance.sharedMesh); - writer.WriteProperty("convex", instance.convex, ES3Type_bool.Instance); - /*writer.WriteProperty("inflateMesh", instance.inflateMesh, ES3Type_bool.Instance); - writer.WriteProperty("skinWidth", instance.skinWidth, ES3Type_float.Instance);*/ - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("isTrigger", instance.isTrigger, ES3Type_bool.Instance); - writer.WriteProperty("contactOffset", instance.contactOffset, ES3Type_float.Instance); - writer.WriteProperty("material", instance.sharedMaterial); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.MeshCollider)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "sharedMesh": - instance.sharedMesh = reader.Read(ES3Type_Mesh.Instance); - break; - case "convex": - instance.convex = reader.Read(ES3Type_bool.Instance); - break; - /*case "inflateMesh": - instance.inflateMesh = reader.Read(ES3Type_bool.Instance); - break; - case "skinWidth": - instance.skinWidth = reader.Read(ES3Type_float.Instance); - break;*/ - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "isTrigger": - instance.isTrigger = reader.Read(ES3Type_bool.Instance); - break; - case "contactOffset": - instance.contactOffset = reader.Read(ES3Type_float.Instance); - break; - case "material": -#if UNITY_6000_0_OR_NEWER - instance.sharedMaterial = reader.Read(); -#else - instance.sharedMaterial = reader.Read(); -#endif - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_MeshColliderArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_MeshColliderArray() : base(typeof(UnityEngine.MeshCollider[]), ES3Type_MeshCollider.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshCollider.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshCollider.cs.meta deleted file mode 100644 index dfb148f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshCollider.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b7825b483b5804bcb95a1a47cb287500 -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshFilter.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshFilter.cs deleted file mode 100644 index b7a28a2..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshFilter.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("sharedMesh")] - public class ES3Type_MeshFilter : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_MeshFilter() : base(typeof(UnityEngine.MeshFilter)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.MeshFilter)obj; - writer.WritePropertyByRef("sharedMesh", instance.sharedMesh); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.MeshFilter)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "sharedMesh": - instance.sharedMesh = reader.Read(ES3Type_Mesh.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_MeshFilterArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_MeshFilterArray() : base(typeof(UnityEngine.MeshFilter[]), ES3Type_MeshFilter.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshFilter.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshFilter.cs.meta deleted file mode 100644 index 9a22df1..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshFilter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 00364532a712841328836c36da833503 -timeCreated: 1519132279 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshRenderer.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshRenderer.cs deleted file mode 100644 index d8b87a9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshRenderer.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("additionalVertexStreams", "enabled", "shadowCastingMode", "receiveShadows", "sharedMaterials", "lightmapIndex", "realtimeLightmapIndex", "lightmapScaleOffset", "motionVectorGenerationMode", "realtimeLightmapScaleOffset", "lightProbeUsage", "lightProbeProxyVolumeOverride", "probeAnchor", "reflectionProbeUsage", "sortingLayerName", "sortingLayerID", "sortingOrder")] - public class ES3Type_MeshRenderer : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_MeshRenderer() : base(typeof(UnityEngine.MeshRenderer)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.MeshRenderer)obj; - - writer.WriteProperty("additionalVertexStreams", instance.additionalVertexStreams, ES3Type_Mesh.Instance); - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("shadowCastingMode", instance.shadowCastingMode); - writer.WriteProperty("receiveShadows", instance.receiveShadows, ES3Type_bool.Instance); - writer.WriteProperty("sharedMaterials", instance.sharedMaterials, ES3Type_MaterialArray.Instance); - writer.WriteProperty("lightmapIndex", instance.lightmapIndex, ES3Type_int.Instance); - writer.WriteProperty("realtimeLightmapIndex", instance.realtimeLightmapIndex, ES3Type_int.Instance); - writer.WriteProperty("lightmapScaleOffset", instance.lightmapScaleOffset, ES3Type_Vector4.Instance); - writer.WriteProperty("motionVectorGenerationMode", instance.motionVectorGenerationMode); - writer.WriteProperty("realtimeLightmapScaleOffset", instance.realtimeLightmapScaleOffset, ES3Type_Vector4.Instance); - writer.WriteProperty("lightProbeUsage", instance.lightProbeUsage); - writer.WriteProperty("lightProbeProxyVolumeOverride", instance.lightProbeProxyVolumeOverride); - writer.WriteProperty("probeAnchor", instance.probeAnchor, ES3Type_Transform.Instance); - writer.WriteProperty("reflectionProbeUsage", instance.reflectionProbeUsage); - writer.WriteProperty("sortingLayerName", instance.sortingLayerName, ES3Type_string.Instance); - writer.WriteProperty("sortingLayerID", instance.sortingLayerID, ES3Type_int.Instance); - writer.WriteProperty("sortingOrder", instance.sortingOrder, ES3Type_int.Instance); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.MeshRenderer)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "additionalVertexStreams": - instance.additionalVertexStreams = reader.Read(ES3Type_Mesh.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "shadowCastingMode": - instance.shadowCastingMode = reader.Read(); - break; - case "receiveShadows": - instance.receiveShadows = reader.Read(ES3Type_bool.Instance); - break; - case "sharedMaterials": - instance.sharedMaterials = reader.Read(); - break; - case "lightmapIndex": - instance.lightmapIndex = reader.Read(ES3Type_int.Instance); - break; - case "realtimeLightmapIndex": - instance.realtimeLightmapIndex = reader.Read(ES3Type_int.Instance); - break; - case "lightmapScaleOffset": - instance.lightmapScaleOffset = reader.Read(ES3Type_Vector4.Instance); - break; - case "motionVectorGenerationMode": - instance.motionVectorGenerationMode = reader.Read(); - break; - case "realtimeLightmapScaleOffset": - instance.realtimeLightmapScaleOffset = reader.Read(ES3Type_Vector4.Instance); - break; - case "lightProbeUsage": - instance.lightProbeUsage = reader.Read(); - break; - case "lightProbeProxyVolumeOverride": - instance.lightProbeProxyVolumeOverride = reader.Read(ES3Type_GameObject.Instance); - break; - case "probeAnchor": - instance.probeAnchor = reader.Read(ES3Type_Transform.Instance); - break; - case "reflectionProbeUsage": - instance.reflectionProbeUsage = reader.Read(); - break; - case "sortingLayerName": - instance.sortingLayerName = reader.Read(ES3Type_string.Instance); - break; - case "sortingLayerID": - instance.sortingLayerID = reader.Read(ES3Type_int.Instance); - break; - case "sortingOrder": - instance.sortingOrder = reader.Read(ES3Type_int.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_MeshRendererArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_MeshRendererArray() : base(typeof(UnityEngine.MeshRenderer[]), ES3Type_MeshRenderer.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshRenderer.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshRenderer.cs.meta deleted file mode 100644 index 7277162..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_MeshRenderer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d33e88a8388cf4cf1b47495afc6722a7 -timeCreated: 1519132297 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_ParticleSystem.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_ParticleSystem.cs deleted file mode 100644 index 8295f33..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_ParticleSystem.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("time", "hideFlags", "collision", "colorBySpeed", "colorOverLifetime", "emission", "externalForces", "forceOverLifetime", "inheritVelocity", - "lights", "limitVelocityOverLifetime", "main", "noise", "rotatonBySpeed", "rotationOverLifetime", "shape", "sizeBySpeed", "sizeOverLifetime", - "subEmitters", "textureSheetAnimation", "trails", "trigger", "useAutoRandomSeed", "velocityOverLifetime", "isPaused", "isPlaying", "isStopped")] - public class ES3Type_ParticleSystem : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_ParticleSystem() : base(typeof(UnityEngine.ParticleSystem)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem)obj; - - writer.WriteProperty("time", instance.time); - writer.WriteProperty("hideFlags", instance.hideFlags); - writer.WriteProperty("collision", instance.collision); - writer.WriteProperty("colorBySpeed", instance.colorBySpeed); - writer.WriteProperty("colorOverLifetime", instance.colorOverLifetime); - writer.WriteProperty("emission", instance.emission); - writer.WriteProperty("externalForces", instance.externalForces); - writer.WriteProperty("forceOverLifetime", instance.forceOverLifetime); - writer.WriteProperty("inheritVelocity", instance.inheritVelocity); - writer.WriteProperty("lights", instance.lights); - writer.WriteProperty("limitVelocityOverLifetime", instance.limitVelocityOverLifetime); - writer.WriteProperty("main", instance.main); - writer.WriteProperty("noise", instance.noise); - writer.WriteProperty("rotationBySpeed", instance.rotationBySpeed); - writer.WriteProperty("rotationOverLifetime", instance.rotationOverLifetime); - writer.WriteProperty("shape", instance.shape); - writer.WriteProperty("sizeBySpeed", instance.sizeBySpeed); - writer.WriteProperty("sizeOverLifetime", instance.sizeOverLifetime); - writer.WriteProperty("subEmitters", instance.subEmitters); - writer.WriteProperty("textureSheetAnimation", instance.textureSheetAnimation); - writer.WriteProperty("trails", instance.trails); - writer.WriteProperty("trigger", instance.trigger); - writer.WriteProperty("useAutoRandomSeed", instance.useAutoRandomSeed); - writer.WriteProperty("velocityOverLifetime", instance.velocityOverLifetime); - writer.WriteProperty("isPaused", instance.isPaused); - writer.WriteProperty("isPlaying", instance.isPlaying); - writer.WriteProperty("isStopped", instance.isStopped); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem)obj; - // Stop particle system as some properties require it to not be playing to be set. - instance.Stop(); - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - case "time": - instance.time = reader.Read(); - break; - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - case "collision": - reader.ReadInto(instance.collision, ES3Type_CollisionModule.Instance); - break; - case "colorBySpeed": - reader.ReadInto(instance.colorBySpeed, ES3Type_ColorBySpeedModule.Instance); - break; - case "colorOverLifetime": - reader.ReadInto(instance.colorOverLifetime, ES3Type_ColorOverLifetimeModule.Instance); - break; - case "sizeOverLifetime": - reader.ReadInto(instance.sizeOverLifetime, ES3Type_SizeOverLifetimeModule.Instance); - break; - case "shape": - reader.ReadInto(instance.shape, ES3Type_ShapeModule.Instance); - break; - case "emission": - reader.ReadInto(instance.emission, ES3Type_EmissionModule.Instance); - break; - case "externalForces": - reader.ReadInto(instance.externalForces, ES3Type_ExternalForcesModule.Instance); - break; - case "forceOverLifetime": - reader.ReadInto(instance.forceOverLifetime, ES3Type_ForceOverLifetimeModule.Instance); - break; - case "inheritVelocity": - reader.ReadInto(instance.inheritVelocity, ES3Type_InheritVelocityModule.Instance); - break; - case "lights": - reader.ReadInto(instance.lights, ES3Type_LightsModule.Instance); - break; - case "limitVelocityOverLifetime": - reader.ReadInto(instance.limitVelocityOverLifetime, ES3Type_LimitVelocityOverLifetimeModule.Instance); - break; - case "main": - reader.ReadInto(instance.main, ES3Type_MainModule.Instance); - break; - case "noise": - reader.ReadInto(instance.noise, ES3Type_NoiseModule.Instance); - break; - case "sizeBySpeed": - reader.ReadInto(instance.sizeBySpeed, ES3Type_SizeBySpeedModule.Instance); - break; - case "rotationBySpeed": - reader.ReadInto(instance.rotationBySpeed, ES3Type_RotationBySpeedModule.Instance); - break; - case "rotationOverLifetime": - reader.ReadInto(instance.rotationOverLifetime, ES3Type_RotationOverLifetimeModule.Instance); - break; - case "subEmitters": - reader.ReadInto(instance.subEmitters, ES3Type_SubEmittersModule.Instance); - break; - case "textureSheetAnimation": - reader.ReadInto(instance.textureSheetAnimation, ES3Type_TextureSheetAnimationModule.Instance); - break; - case "trails": - reader.ReadInto(instance.trails, ES3Type_TrailModule.Instance); - break; - case "trigger": - reader.ReadInto(instance.trigger, ES3Type_TriggerModule.Instance); - break; - case "useAutoRandomSeed": - instance.useAutoRandomSeed = reader.Read(ES3Type_bool.Instance); - break; - case "velocityOverLifetime": - reader.ReadInto(instance.velocityOverLifetime, ES3Type_VelocityOverLifetimeModule.Instance); - break; - case "isPaused": - if (reader.Read(ES3Type_bool.Instance)) instance.Pause(); - break; - case "isPlaying": - if (reader.Read(ES3Type_bool.Instance)) instance.Play(); - break; - case "isStopped": - if (reader.Read(ES3Type_bool.Instance)) instance.Stop(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_ParticleSystem.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_ParticleSystem.cs.meta deleted file mode 100644 index 62abfe5..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_ParticleSystem.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9484f3e3b46ec4871977550c93381f25 -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_PolygonCollider2D.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_PolygonCollider2D.cs deleted file mode 100644 index fdc765c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_PolygonCollider2D.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("points", "pathCount", "paths", "density", "isTrigger", "usedByEffector", "offset", "sharedMaterial", "enabled")] - public class ES3Type_PolygonCollider2D : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_PolygonCollider2D() : base(typeof(UnityEngine.PolygonCollider2D)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.PolygonCollider2D)obj; - - writer.WriteProperty("points", instance.points, ES3Type_Vector2Array.Instance); - writer.WriteProperty("pathCount", instance.pathCount, ES3Type_int.Instance); - - for(int i=0; i(ES3Reader reader, object obj) - { - var instance = (UnityEngine.PolygonCollider2D)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "points": - instance.points = reader.Read(ES3Type_Vector2Array.Instance); - break; - case "pathCount": - int pathCount = reader.Read(ES3Type_int.Instance); - for(int i=0; i(ES3Type_Vector2Array.Instance)); - break; - case "density": - instance.density = reader.Read(ES3Type_float.Instance); - break; - case "isTrigger": - instance.isTrigger = reader.Read(ES3Type_bool.Instance); - break; - case "usedByEffector": - instance.usedByEffector = reader.Read(ES3Type_bool.Instance); - break; - case "offset": - instance.offset = reader.Read(ES3Type_Vector2.Instance); - break; - case "sharedMaterial": - instance.sharedMaterial = reader.Read(ES3Type_PhysicsMaterial2D.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_PolygonCollider2DArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_PolygonCollider2DArray() : base(typeof(UnityEngine.PolygonCollider2D[]), ES3Type_PolygonCollider2D.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_PolygonCollider2D.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_PolygonCollider2D.cs.meta deleted file mode 100644 index 21a8143..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_PolygonCollider2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ec8749737dd724d6a91ac3a9c241ba17 -timeCreated: 1519132300 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_RawImage.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_RawImage.cs deleted file mode 100644 index 36c6605..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_RawImage.cs +++ /dev/null @@ -1,100 +0,0 @@ -#if ES3_UGUI - -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("texture", "uvRect", "onCullStateChanged", "maskable", "color", "raycastTarget", "useLegacyMeshGeneration", "material", "useGUILayout", "enabled", "hideFlags")] - public class ES3Type_RawImage : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_RawImage() : base(typeof(UnityEngine.UI.RawImage)){ Instance = this;} - - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.UI.RawImage)obj; - - writer.WritePropertyByRef("texture", instance.texture); - writer.WriteProperty("uvRect", instance.uvRect, ES3Type_Rect.Instance); - writer.WriteProperty("onCullStateChanged", instance.onCullStateChanged); - writer.WriteProperty("maskable", instance.maskable, ES3Type_bool.Instance); - writer.WriteProperty("color", instance.color, ES3Type_Color.Instance); - writer.WriteProperty("raycastTarget", instance.raycastTarget, ES3Type_bool.Instance); - writer.WritePrivateProperty("useLegacyMeshGeneration", instance); - // Unity automatically sets the default material if it's set to null. - // This prevents missing reference warnings. - if (instance.material.name.Contains("Default")) - writer.WriteProperty("material", null); - else - writer.WriteProperty("material", instance.material); - writer.WriteProperty("useGUILayout", instance.useGUILayout, ES3Type_bool.Instance); - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("hideFlags", instance.hideFlags); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.UI.RawImage)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "texture": - instance.texture = reader.Read(ES3Type_Texture.Instance); - break; - case "uvRect": - instance.uvRect = reader.Read(ES3Type_Rect.Instance); - break; - case "onCullStateChanged": - instance.onCullStateChanged = reader.Read(); - break; - case "maskable": - instance.maskable = reader.Read(ES3Type_bool.Instance); - break; - case "color": - instance.color = reader.Read(ES3Type_Color.Instance); - break; - case "raycastTarget": - instance.raycastTarget = reader.Read(ES3Type_bool.Instance); - break; - case "useLegacyMeshGeneration": - reader.SetPrivateProperty("useLegacyMeshGeneration", reader.Read(), instance); - break; - case "material": - instance.material = reader.Read(ES3Type_Material.Instance); - break; - case "useGUILayout": - instance.useGUILayout = reader.Read(ES3Type_bool.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } - - - public class ES3Type_RawImageArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_RawImageArray() : base(typeof(UnityEngine.UI.RawImage[]), ES3Type_RawImage.Instance) - { - Instance = this; - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_RawImage.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_RawImage.cs.meta deleted file mode 100644 index 3d4e161..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_RawImage.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d8b1e267b6439604a9854f1876a085b7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Rigidbody.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Rigidbody.cs deleted file mode 100644 index a412c2c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Rigidbody.cs +++ /dev/null @@ -1,153 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("velocity", "angularVelocity", "drag", "angularDrag", "mass", "useGravity", "maxDepenetrationVelocity", "isKinematic", "freezeRotation", "constraints", "collisionDetectionMode", "centerOfMass", "inertiaTensorRotation", "inertiaTensor", "detectCollisions", "position", "rotation", "interpolation", "solverIterations", "sleepThreshold", "maxAngularVelocity", "solverVelocityIterations")] - public class ES3Type_Rigidbody : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_Rigidbody() : base(typeof(UnityEngine.Rigidbody)) { Instance = this; } - - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Rigidbody)obj; - -#if UNITY_6000_0_OR_NEWER - writer.WriteProperty("velocity", instance.linearVelocity, ES3Type_Vector3.Instance); - writer.WriteProperty("drag", instance.linearDamping, ES3Type_float.Instance); - writer.WriteProperty("angularDrag", instance.angularDamping, ES3Type_float.Instance); -#else - writer.WriteProperty("velocity", instance.velocity, ES3Type_Vector3.Instance); - writer.WriteProperty("drag", instance.drag, ES3Type_float.Instance); - writer.WriteProperty("angularDrag", instance.angularDrag, ES3Type_float.Instance); -#endif - writer.WriteProperty("angularVelocity", instance.angularVelocity, ES3Type_Vector3.Instance); - writer.WriteProperty("mass", instance.mass, ES3Type_float.Instance); - writer.WriteProperty("useGravity", instance.useGravity, ES3Type_bool.Instance); - writer.WriteProperty("maxDepenetrationVelocity", instance.maxDepenetrationVelocity, ES3Type_float.Instance); - writer.WriteProperty("isKinematic", instance.isKinematic, ES3Type_bool.Instance); - writer.WriteProperty("freezeRotation", instance.freezeRotation, ES3Type_bool.Instance); - writer.WriteProperty("constraints", instance.constraints); - writer.WriteProperty("collisionDetectionMode", instance.collisionDetectionMode); - writer.WriteProperty("centerOfMass", instance.centerOfMass, ES3Type_Vector3.Instance); - writer.WriteProperty("detectCollisions", instance.detectCollisions, ES3Type_bool.Instance); - writer.WriteProperty("position", instance.position, ES3Type_Vector3.Instance); - writer.WriteProperty("rotation", instance.rotation, ES3Type_Quaternion.Instance); - writer.WriteProperty("interpolation", instance.interpolation); - writer.WriteProperty("solverIterations", instance.solverIterations, ES3Type_int.Instance); - writer.WriteProperty("sleepThreshold", instance.sleepThreshold, ES3Type_float.Instance); - writer.WriteProperty("maxAngularVelocity", instance.maxAngularVelocity, ES3Type_float.Instance); - writer.WriteProperty("solverVelocityIterations", instance.solverVelocityIterations, ES3Type_int.Instance); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Rigidbody)obj; - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { -#if UNITY_6000_0_OR_NEWER - case "velocity": - instance.linearVelocity = reader.Read(ES3Type_Vector3.Instance); - break; - case "drag": - instance.linearDamping = reader.Read(ES3Type_float.Instance); - break; - case "angularDrag": - instance.angularDamping = reader.Read(ES3Type_float.Instance); - break; -#else - case "velocity": - instance.velocity = reader.Read(ES3Type_Vector3.Instance); - break; - case "drag": - instance.drag = reader.Read(ES3Type_float.Instance); - break; - case "angularDrag": - instance.angularDrag = reader.Read(ES3Type_float.Instance); - break; -#endif - case "angularVelocity": - instance.angularVelocity = reader.Read(ES3Type_Vector3.Instance); - break; - case "mass": - instance.mass = reader.Read(ES3Type_float.Instance); - break; - case "useGravity": - instance.useGravity = reader.Read(ES3Type_bool.Instance); - break; - case "maxDepenetrationVelocity": - instance.maxDepenetrationVelocity = reader.Read(ES3Type_float.Instance); - break; - case "isKinematic": - instance.isKinematic = reader.Read(ES3Type_bool.Instance); - break; - case "freezeRotation": - instance.freezeRotation = reader.Read(ES3Type_bool.Instance); - break; - case "constraints": - instance.constraints = reader.Read(); - break; - case "collisionDetectionMode": - instance.collisionDetectionMode = reader.Read(); - break; - case "centerOfMass": - instance.centerOfMass = reader.Read(ES3Type_Vector3.Instance); - break; - case "inertiaTensorRotation": - instance.inertiaTensorRotation = reader.Read(ES3Type_Quaternion.Instance); - break; - case "inertiaTensor": - var inertiaTensor = reader.Read(ES3Type_Vector3.Instance); - // Check that the inertia tensor isn't zero, as it will throw an error if we try to set it. - if (inertiaTensor != Vector3.zero) - instance.inertiaTensor = inertiaTensor; - break; - case "detectCollisions": - instance.detectCollisions = reader.Read(ES3Type_bool.Instance); - break; - case "position": - instance.position = reader.Read(ES3Type_Vector3.Instance); - break; - case "rotation": - instance.rotation = reader.Read(ES3Type_Quaternion.Instance); - break; - case "interpolation": - instance.interpolation = reader.Read(); - break; - case "solverIterations": - instance.solverIterations = reader.Read(ES3Type_int.Instance); - break; - case "sleepThreshold": - instance.sleepThreshold = reader.Read(ES3Type_float.Instance); - break; - case "maxAngularVelocity": - instance.maxAngularVelocity = reader.Read(ES3Type_float.Instance); - break; - case "solverVelocityIterations": - instance.solverVelocityIterations = reader.Read(ES3Type_int.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } - - - public class ES3UserType_RigidbodyArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3UserType_RigidbodyArray() : base(typeof(UnityEngine.Rigidbody[]), ES3Type_Rigidbody.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Rigidbody.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Rigidbody.cs.meta deleted file mode 100644 index 471e990..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Rigidbody.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8154830c992ded745b9784a07116b1b6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_SphereCollider.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_SphereCollider.cs deleted file mode 100644 index 4f437e5..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_SphereCollider.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("center", "radius", "enabled", "isTrigger", "contactOffset", "sharedMaterial")] - public class ES3Type_SphereCollider : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_SphereCollider() : base(typeof(UnityEngine.SphereCollider)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.SphereCollider)obj; - - writer.WriteProperty("center", instance.center, ES3Type_Vector3.Instance); - writer.WriteProperty("radius", instance.radius, ES3Type_float.Instance); - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("isTrigger", instance.isTrigger, ES3Type_bool.Instance); - writer.WriteProperty("contactOffset", instance.contactOffset, ES3Type_float.Instance); - writer.WritePropertyByRef("material", instance.sharedMaterial); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.SphereCollider)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - case "center": - instance.center = reader.Read(ES3Type_Vector3.Instance); - break; - case "radius": - instance.radius = reader.Read(ES3Type_float.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "isTrigger": - instance.isTrigger = reader.Read(ES3Type_bool.Instance); - break; - case "contactOffset": - instance.contactOffset = reader.Read(ES3Type_float.Instance); - break; - case "material": -#if UNITY_6000_0_OR_NEWER - instance.sharedMaterial = reader.Read(); -#else - instance.sharedMaterial = reader.Read(); -#endif - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_SphereCollider.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_SphereCollider.cs.meta deleted file mode 100644 index c388053..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_SphereCollider.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bb19da8937a274e63ada528bb6215c6d -timeCreated: 1519132295 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Text.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Text.cs deleted file mode 100644 index 4e636ed..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Text.cs +++ /dev/null @@ -1,148 +0,0 @@ -#if ES3_UGUI - -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("font", "text", "supportRichText", "resizeTextForBestFit", "resizeTextMinSize", "resizeTextMaxSize", "alignment", "alignByGeometry", "fontSize", "horizontalOverflow", "verticalOverflow", "lineSpacing", "fontStyle", "onCullStateChanged", "maskable", "color", "raycastTarget", "material", "useGUILayout", "enabled", "tag", "name", "hideFlags")] - public class ES3Type_Text : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_Text() : base(typeof(UnityEngine.UI.Text)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.UI.Text)obj; - - //writer.WriteProperty("font", instance.font); - writer.WriteProperty("text", instance.text); - writer.WriteProperty("supportRichText", instance.supportRichText); - writer.WriteProperty("resizeTextForBestFit", instance.resizeTextForBestFit); - writer.WriteProperty("resizeTextMinSize", instance.resizeTextMinSize); - writer.WriteProperty("resizeTextMaxSize", instance.resizeTextMaxSize); - writer.WriteProperty("alignment", instance.alignment); - writer.WriteProperty("alignByGeometry", instance.alignByGeometry); - writer.WriteProperty("fontSize", instance.fontSize); - writer.WriteProperty("horizontalOverflow", instance.horizontalOverflow); - writer.WriteProperty("verticalOverflow", instance.verticalOverflow); - writer.WriteProperty("lineSpacing", instance.lineSpacing); - writer.WriteProperty("fontStyle", instance.fontStyle); - writer.WriteProperty("onCullStateChanged", instance.onCullStateChanged); - writer.WriteProperty("maskable", instance.maskable); - writer.WriteProperty("color", instance.color); - writer.WriteProperty("raycastTarget", instance.raycastTarget); - // Unity automatically sets the default material if it's set to null. - // This prevents missing reference warnings. - if (instance.material.name.Contains("Default")) - writer.WriteProperty("material", null); - else - writer.WriteProperty("material", instance.material); - writer.WriteProperty("useGUILayout", instance.useGUILayout); - writer.WriteProperty("enabled", instance.enabled); - writer.WriteProperty("hideFlags", instance.hideFlags); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.UI.Text)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "m_FontData": - reader.SetPrivateField("m_FontData", reader.Read(), instance); - break; - case "m_LastTrackedFont": - reader.SetPrivateField("m_LastTrackedFont", reader.Read(), instance); - break; - case "m_Text": - reader.SetPrivateField("m_Text", reader.Read(), instance); - break; - case "m_TextCache": - reader.SetPrivateField("m_TextCache", reader.Read(), instance); - break; - case "m_TextCacheForLayout": - reader.SetPrivateField("m_TextCacheForLayout", reader.Read(), instance); - break; - case "m_Material": - reader.SetPrivateField("m_Material", reader.Read(), instance); - break; - case "font": - instance.font = reader.Read(); - break; - case "text": - instance.text = reader.Read(); - break; - case "supportRichText": - instance.supportRichText = reader.Read(); - break; - case "resizeTextForBestFit": - instance.resizeTextForBestFit = reader.Read(); - break; - case "resizeTextMinSize": - instance.resizeTextMinSize = reader.Read(); - break; - case "resizeTextMaxSize": - instance.resizeTextMaxSize = reader.Read(); - break; - case "alignment": - instance.alignment = reader.Read(); - break; - case "alignByGeometry": - instance.alignByGeometry = reader.Read(); - break; - case "fontSize": - instance.fontSize = reader.Read(); - break; - case "horizontalOverflow": - instance.horizontalOverflow = reader.Read(); - break; - case "verticalOverflow": - instance.verticalOverflow = reader.Read(); - break; - case "lineSpacing": - instance.lineSpacing = reader.Read(); - break; - case "fontStyle": - instance.fontStyle = reader.Read(); - break; - case "onCullStateChanged": - instance.onCullStateChanged = reader.Read(); - break; - case "maskable": - instance.maskable = reader.Read(); - break; - case "color": - instance.color = reader.Read(); - break; - case "raycastTarget": - instance.raycastTarget = reader.Read(); - break; - case "material": - instance.material = reader.Read(); - break; - case "useGUILayout": - instance.useGUILayout = reader.Read(); - break; - case "enabled": - instance.enabled = reader.Read(); - break; - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Text.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Text.cs.meta deleted file mode 100644 index 83aa4f4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Text.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 69268592921476a42b9819cd66b6ea4a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Transform.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Transform.cs deleted file mode 100644 index e1b04ea..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Transform.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("localPosition","localRotation","localScale","parent","siblingIndex")] - public class ES3Type_Transform : ES3ComponentType - { - public static int countRead = 0; - public static ES3Type Instance = null; - - public ES3Type_Transform() : base(typeof(UnityEngine.Transform)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Transform)obj; - writer.WritePropertyByRef("parent", instance.parent); - writer.WriteProperty("localPosition", instance.localPosition); - writer.WriteProperty("localRotation", instance.localRotation); - writer.WriteProperty("localScale", instance.localScale); - writer.WriteProperty("siblingIndex", instance.GetSiblingIndex()); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (Transform)obj; - - var characterController = instance.gameObject.GetComponent(); - var characterControllerState = false; - - if (characterController != null) - { - characterControllerState = characterController.enabled; - characterController.enabled = false; - } - - foreach(string propertyName in reader.Properties) - { - switch (propertyName) - { - case "parent": - instance.SetParent(reader.Read()); - break; - case "localPosition": - instance.localPosition = reader.Read(); - break; - case "localRotation": - instance.localRotation = reader.Read(); - break; - case "localScale": - instance.localScale = reader.Read(); - break; - case "siblingIndex": - instance.SetSiblingIndex(reader.Read()); - break; - default: - reader.Skip(); - break; - } - } - - if (characterController != null) - characterController.enabled = characterControllerState; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Transform.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Transform.cs.meta deleted file mode 100644 index 92c5277..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Transform.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 91cb5bec8da6744608c92304a04462fd -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AnimationCurve.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AnimationCurve.cs deleted file mode 100644 index 853028d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AnimationCurve.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("keys", "preWrapMode", "postWrapMode")] - public class ES3Type_AnimationCurve : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_AnimationCurve() : base(typeof(UnityEngine.AnimationCurve)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.AnimationCurve)obj; - - writer.WriteProperty("keys", instance.keys, ES3Type_KeyframeArray.Instance); - writer.WriteProperty("preWrapMode", instance.preWrapMode); - writer.WriteProperty("postWrapMode", instance.postWrapMode); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.AnimationCurve(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.AnimationCurve)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "keys": - instance.keys = reader.Read(); - break; - case "preWrapMode": - instance.preWrapMode = reader.Read(); - break; - case "postWrapMode": - instance.postWrapMode = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AnimationCurve.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AnimationCurve.cs.meta deleted file mode 100644 index 4744a26..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AnimationCurve.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5939fcd6cf1ac4167b4320111cb9930e -timeCreated: 1519132286 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AudioClip.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AudioClip.cs deleted file mode 100644 index f2971ae..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AudioClip.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("name", "samples", "channels", "frequency", "sampleData")] - public class ES3Type_AudioClip : ES3UnityObjectType - { - public static ES3Type Instance = null; - - public ES3Type_AudioClip() : base(typeof(UnityEngine.AudioClip)){ Instance = this; } - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var param = (UnityEngine.AudioClip)obj; - float[] samples = new float[param.samples * param.channels]; - param.GetData(samples, 0); - writer.WriteProperty("name", param.name); - writer.WriteProperty("samples", param.samples); - writer.WriteProperty("channels", param.channels); - writer.WriteProperty("frequency", param.frequency); - writer.WriteProperty("sampleData", samples); - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - var clip = (AudioClip)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - case "sampleData": - clip.SetData(reader.Read(ES3Type_floatArray.Instance), 0); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadUnityObject(ES3Reader reader) - { - string name = ""; - int samples = 0; - int channels = 0; - int frequency = 0; - AudioClip clip = null; - - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - case "name": - name = reader.Read(ES3Type_string.Instance); - break; - case "samples": - samples = reader.Read(ES3Type_int.Instance); - break; - case "channels": - channels = reader.Read(ES3Type_int.Instance); - break; - case "frequency": - frequency = reader.Read(ES3Type_int.Instance); - break; - case "sampleData": - clip = AudioClip.Create(name, samples, channels, frequency, false); - clip.SetData(reader.Read(ES3Type_floatArray.Instance), 0); - break; - default: - reader.Skip(); - break; - } - } - - return clip; - } - } - - public class ES3Type_AudioClipArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_AudioClipArray() : base(typeof(UnityEngine.AudioClip[]), ES3Type_AudioClip.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AudioClip.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AudioClip.cs.meta deleted file mode 100644 index 77d148d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_AudioClip.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9b8f97ab775644e1782f7775c54f891a -timeCreated: 1519132292 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_BoneWeight.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_BoneWeight.cs deleted file mode 100644 index ab8b845..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_BoneWeight.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("boneIndex0", "boneIndex1", "boneIndex2", "boneIndex3", "weight0", "weight1", "weight2", "weight3")] - public class ES3Type_BoneWeight : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_BoneWeight() : base(typeof(BoneWeight)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - BoneWeight casted = (BoneWeight)obj; - - writer.WriteProperty("boneIndex0", casted.boneIndex0, ES3Type_int.Instance); - writer.WriteProperty("boneIndex1", casted.boneIndex1, ES3Type_int.Instance); - writer.WriteProperty("boneIndex2", casted.boneIndex2, ES3Type_int.Instance); - writer.WriteProperty("boneIndex3", casted.boneIndex3, ES3Type_int.Instance); - - writer.WriteProperty("weight0", casted.weight0, ES3Type_float.Instance); - writer.WriteProperty("weight1", casted.weight1, ES3Type_float.Instance); - writer.WriteProperty("weight2", casted.weight2, ES3Type_float.Instance); - writer.WriteProperty("weight3", casted.weight3, ES3Type_float.Instance); - - } - - public override object Read(ES3Reader reader) - { - var obj = new BoneWeight(); - - obj.boneIndex0 = reader.ReadProperty(ES3Type_int.Instance); - obj.boneIndex1 = reader.ReadProperty(ES3Type_int.Instance); - obj.boneIndex2 = reader.ReadProperty(ES3Type_int.Instance); - obj.boneIndex3 = reader.ReadProperty(ES3Type_int.Instance); - - obj.weight0 = reader.ReadProperty(ES3Type_float.Instance); - obj.weight1 = reader.ReadProperty(ES3Type_float.Instance); - obj.weight2 = reader.ReadProperty(ES3Type_float.Instance); - obj.weight3 = reader.ReadProperty(ES3Type_float.Instance); - - return obj; - } - } - - public class ES3Type_BoneWeightArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_BoneWeightArray() : base(typeof(BoneWeight[]), ES3Type_BoneWeight.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_BoneWeight.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_BoneWeight.cs.meta deleted file mode 100644 index 66448fd..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_BoneWeight.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 570ee00d71c7c43a5a7e6a68e2c9d96f -timeCreated: 1519132285 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Bounds.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Bounds.cs deleted file mode 100644 index 6cfba1f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Bounds.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("center", "size")] - public class ES3Type_Bounds : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Bounds() : base(typeof(Bounds)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Bounds casted = (Bounds)obj; - - writer.WriteProperty("center", casted.center, ES3Type_Vector3.Instance); - writer.WriteProperty("size", casted.size, ES3Type_Vector3.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Bounds( reader.ReadProperty(ES3Type_Vector3.Instance), - reader.ReadProperty(ES3Type_Vector3.Instance)); - } - } - - public class ES3Type_BoundsArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_BoundsArray() : base(typeof(Bounds[]), ES3Type_Bounds.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Bounds.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Bounds.cs.meta deleted file mode 100644 index c85d95d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Bounds.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3a9d8a8b9b10b466786d6d39807aa8e0 -timeCreated: 1519132283 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Burst.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Burst.cs deleted file mode 100644 index ce7d171..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Burst.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("time", "count", "minCount", "maxCount", "cycleCount", "repeatInterval", "probability")] - public class ES3Type_Burst : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Burst() : base(typeof(UnityEngine.ParticleSystem.Burst)){ Instance = this; } - - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.Burst)obj; - - writer.WriteProperty("time", instance.time, ES3Type_float.Instance); - writer.WriteProperty("count", instance.count, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("minCount", instance.minCount, ES3Type_short.Instance); - writer.WriteProperty("maxCount", instance.maxCount, ES3Type_short.Instance); - writer.WriteProperty("cycleCount", instance.cycleCount, ES3Type_int.Instance); - writer.WriteProperty("repeatInterval", instance.repeatInterval, ES3Type_float.Instance); - writer.WriteProperty("probability", instance.probability, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.Burst(); - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "time": - instance.time = reader.Read(ES3Type_float.Instance); - break; - case "count": - instance.count = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "minCount": - instance.minCount = reader.Read(ES3Type_short.Instance); - break; - case "maxCount": - instance.maxCount = reader.Read(ES3Type_short.Instance); - break; - case "cycleCount": - instance.cycleCount = reader.Read(ES3Type_int.Instance); - break; - case "repeatInterval": - instance.repeatInterval = reader.Read(ES3Type_float.Instance); - break; - case "probability": - instance.probability = reader.Read(ES3Type_float.Instance); - break; - default: - reader.Skip(); - break; - } - } - return instance; - } - } - - - public class ES3Type_BurstArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_BurstArray() : base(typeof(UnityEngine.ParticleSystem.Burst[]), ES3Type_Burst.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Burst.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Burst.cs.meta deleted file mode 100644 index b08fb3a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Burst.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f15f94055e5ae9346969078ad65f3786 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_CollisionModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_CollisionModule.cs deleted file mode 100644 index 5555945..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_CollisionModule.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "type", "mode", "dampen", "dampenMultiplier", "bounce", "bounceMultiplier", "lifetimeLoss", "lifetimeLossMultiplier", "minKillSpeed", "maxKillSpeed", "collidesWith", "enableDynamicColliders", "maxCollisionShapes", "quality", "voxelSize", "radiusScale", "sendCollisionMessages")] - public class ES3Type_CollisionModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_CollisionModule() : base(typeof(UnityEngine.ParticleSystem.CollisionModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.CollisionModule)obj; - - writer.WriteProperty("enabled", instance.enabled); - writer.WriteProperty("type", instance.type); - writer.WriteProperty("mode", instance.mode); - writer.WriteProperty("dampen", instance.dampen); - writer.WriteProperty("dampenMultiplier", instance.dampenMultiplier); - writer.WriteProperty("bounce", instance.bounce); - writer.WriteProperty("bounceMultiplier", instance.bounceMultiplier); - writer.WriteProperty("lifetimeLoss", instance.lifetimeLoss); - writer.WriteProperty("lifetimeLossMultiplier", instance.lifetimeLossMultiplier); - writer.WriteProperty("minKillSpeed", instance.minKillSpeed); - writer.WriteProperty("maxKillSpeed", instance.maxKillSpeed); - writer.WriteProperty("collidesWith", instance.collidesWith); - writer.WriteProperty("enableDynamicColliders", instance.enableDynamicColliders); - writer.WriteProperty("maxCollisionShapes", instance.maxCollisionShapes); - writer.WriteProperty("quality", instance.quality); - writer.WriteProperty("voxelSize", instance.voxelSize); - writer.WriteProperty("radiusScale", instance.radiusScale); - writer.WriteProperty("sendCollisionMessages", instance.sendCollisionMessages); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.CollisionModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.CollisionModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - case "enabled": - instance.enabled = reader.Read(); - break; - case "type": - instance.type = reader.Read(); - break; - case "mode": - instance.mode = reader.Read(); - break; - case "dampen": - instance.dampen = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "dampenMultiplier": - instance.dampenMultiplier = reader.Read(); - break; - case "bounce": - instance.bounce = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "bounceMultiplier": - instance.bounceMultiplier = reader.Read(); - break; - case "lifetimeLoss": - instance.lifetimeLoss = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "lifetimeLossMultiplier": - instance.lifetimeLossMultiplier = reader.Read(); - break; - case "minKillSpeed": - instance.minKillSpeed = reader.Read(); - break; - case "maxKillSpeed": - instance.maxKillSpeed = reader.Read(); - break; - case "collidesWith": - instance.collidesWith = reader.Read(); - break; - case "enableDynamicColliders": - instance.enableDynamicColliders = reader.Read(); - break; - case "maxCollisionShapes": - instance.maxCollisionShapes = reader.Read(); - break; - case "quality": - instance.quality = reader.Read(); - break; - case "voxelSize": - instance.voxelSize = reader.Read(); - break; - case "radiusScale": - instance.radiusScale = reader.Read(); - break; - case "sendCollisionMessages": - instance.sendCollisionMessages = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_CollisionModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_CollisionModule.cs.meta deleted file mode 100644 index 8474ea0..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_CollisionModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 45f02f0eb77fe4209a290c5928c9ade5 -timeCreated: 1519132284 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color.cs deleted file mode 100644 index e35b0d9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("r", "g", "b", "a")] - public class ES3Type_Color : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Color() : base(typeof(Color)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Color casted = (Color)obj; - writer.WriteProperty("r", casted.r, ES3Type_float.Instance); - writer.WriteProperty("g", casted.g, ES3Type_float.Instance); - writer.WriteProperty("b", casted.b, ES3Type_float.Instance); - writer.WriteProperty("a", casted.a, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Color( reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } - - public class ES3Type_ColorArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_ColorArray() : base(typeof(Color[]), ES3Type_Color.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color.cs.meta deleted file mode 100644 index 1d0dc8b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b97411847937943ab859b0ab7acfb872 -timeCreated: 1519132295 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color32.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color32.cs deleted file mode 100644 index a5ddd20..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color32.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("r", "g", "b", "a")] - public class ES3Type_Color32 : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Color32() : base(typeof(Color32)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Color32 casted = (Color32)obj; - writer.WriteProperty("r", casted.r, ES3Type_byte.Instance); - writer.WriteProperty("g", casted.g, ES3Type_byte.Instance); - writer.WriteProperty("b", casted.b, ES3Type_byte.Instance); - writer.WriteProperty("a", casted.a, ES3Type_byte.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Color32( reader.ReadProperty(ES3Type_byte.Instance), - reader.ReadProperty(ES3Type_byte.Instance), - reader.ReadProperty(ES3Type_byte.Instance), - reader.ReadProperty(ES3Type_byte.Instance)); - } - - public static bool Equals(Color32 a, Color32 b) - { - if(a.r != b.r || a.g != b.g || a.b != b.b || a.a != b.a) - return false; - return true; - } - } - - public class ES3Type_Color32Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Color32Array() : base(typeof(Color32[]), ES3Type_Color32.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color32.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color32.cs.meta deleted file mode 100644 index 93d9bfc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Color32.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3b1b3a09c48c14072a133f5ba4c651e7 -timeCreated: 1519132283 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorBySpeedModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorBySpeedModule.cs deleted file mode 100644 index d65b3a0..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorBySpeedModule.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "color", "range")] - public class ES3Type_ColorBySpeedModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ColorBySpeedModule() : base(typeof(UnityEngine.ParticleSystem.ColorBySpeedModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.ColorBySpeedModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("color", instance.color, ES3Type_MinMaxGradient.Instance); - writer.WriteProperty("range", instance.range, ES3Type_Vector2.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.ColorBySpeedModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.ColorBySpeedModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "color": - instance.color = reader.Read(ES3Type_MinMaxGradient.Instance); - break; - case "range": - instance.range = reader.Read(ES3Type_Vector2.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorBySpeedModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorBySpeedModule.cs.meta deleted file mode 100644 index 38e5107..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorBySpeedModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fb109d087368d4849b6e1222c912ec72 -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorOverLifetimeModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorOverLifetimeModule.cs deleted file mode 100644 index 9266d62..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorOverLifetimeModule.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "color")] - public class ES3Type_ColorOverLifetimeModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ColorOverLifetimeModule() : base(typeof(UnityEngine.ParticleSystem.ColorOverLifetimeModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.ColorOverLifetimeModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("color", instance.color, ES3Type_MinMaxGradient.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.ColorOverLifetimeModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.ColorOverLifetimeModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "color": - instance.color = reader.Read(ES3Type_MinMaxGradient.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorOverLifetimeModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorOverLifetimeModule.cs.meta deleted file mode 100644 index 39921c1..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ColorOverLifetimeModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 744909a4693a34ff99f9886d8bddc408 -timeCreated: 1519132288 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_EmissionModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_EmissionModule.cs deleted file mode 100644 index 39a0244..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_EmissionModule.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "rateOverTime", "rateOverTimeMultiplier", "rateOverDistance", "rateOverDistanceMultiplier")] - public class ES3Type_EmissionModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_EmissionModule() : base(typeof(UnityEngine.ParticleSystem.EmissionModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.EmissionModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("rateOverTime", instance.rateOverTime, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("rateOverTimeMultiplier", instance.rateOverTimeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("rateOverDistance", instance.rateOverDistance, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("rateOverDistanceMultiplier", instance.rateOverDistanceMultiplier, ES3Type_float.Instance); - - var bursts = new ParticleSystem.Burst[instance.burstCount]; - instance.GetBursts(bursts); - writer.WriteProperty("bursts", bursts, ES3Type_BurstArray.Instance); - } - - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.EmissionModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.EmissionModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "rateOverTime": - instance.rateOverTime = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "rateOverTimeMultiplier": - instance.rateOverTimeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "rateOverDistance": - instance.rateOverDistance = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "rateOverDistanceMultiplier": - instance.rateOverDistanceMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "bursts": - instance.SetBursts(reader.Read(ES3Type_BurstArray.Instance)); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_EmissionModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_EmissionModule.cs.meta deleted file mode 100644 index 99fcbec..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_EmissionModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0601343d0f8fb45d591c1f16dde23330 -timeCreated: 1519132279 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ExternalForcesModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ExternalForcesModule.cs deleted file mode 100644 index 06b774e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ExternalForcesModule.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "multiplier")] - public class ES3Type_ExternalForcesModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ExternalForcesModule() : base(typeof(UnityEngine.ParticleSystem.ExternalForcesModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.ExternalForcesModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("multiplier", instance.multiplier, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.ExternalForcesModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.ExternalForcesModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "multiplier": - instance.multiplier = reader.Read(ES3Type_float.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ExternalForcesModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ExternalForcesModule.cs.meta deleted file mode 100644 index 6c9f789..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ExternalForcesModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 73b0b581a64c54420b1931059384200c -timeCreated: 1519132288 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Flare.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Flare.cs deleted file mode 100644 index 3cdb7c4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Flare.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("hideFlags")] - public class ES3Type_Flare : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Flare() : base(typeof(UnityEngine.Flare)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Flare)obj; - - writer.WriteProperty("hideFlags", instance.hideFlags); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.Flare(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Flare)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_FlareArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_FlareArray() : base(typeof(UnityEngine.Flare[]), ES3Type_Flare.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Flare.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Flare.cs.meta deleted file mode 100644 index daf3587..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Flare.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 32592ed571b254a1ebc1cda3cc03f861 -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Font.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Font.cs deleted file mode 100644 index 4fc08ec..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Font.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("material", "name")] - public class ES3Type_Font : ES3UnityObjectType - { - public static ES3Type Instance = null; - - public ES3Type_Font() : base(typeof(UnityEngine.Font)){ Instance = this; } - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Font)obj; - - writer.WriteProperty("name", instance.name, ES3Type_string.Instance); - writer.WriteProperty("material", instance.material); - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Font)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - case "material": - instance.material = reader.Read(ES3Type_Material.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadUnityObject(ES3Reader reader) - { - var instance = new UnityEngine.Font(reader.ReadProperty(ES3Type_string.Instance)); - ReadObject(reader, instance); - return instance; - } - } - - public class ES3Type_FontArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_FontArray() : base(typeof(UnityEngine.Font[]), ES3Type_Font.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Font.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Font.cs.meta deleted file mode 100644 index e82c7b7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Font.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b779410f33269447a8410aa5c60a3366 -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ForceOverLifetimeModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ForceOverLifetimeModule.cs deleted file mode 100644 index 6215392..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ForceOverLifetimeModule.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "x", "y", "z", "xMultiplier", "yMultiplier", "zMultiplier", "space", "randomized")] - public class ES3Type_ForceOverLifetimeModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ForceOverLifetimeModule() : base(typeof(UnityEngine.ParticleSystem.ForceOverLifetimeModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.ForceOverLifetimeModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("x", instance.x, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("y", instance.y, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("z", instance.z, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("xMultiplier", instance.xMultiplier, ES3Type_float.Instance); - writer.WriteProperty("yMultiplier", instance.yMultiplier, ES3Type_float.Instance); - writer.WriteProperty("zMultiplier", instance.zMultiplier, ES3Type_float.Instance); - writer.WriteProperty("space", instance.space); - writer.WriteProperty("randomized", instance.randomized, ES3Type_bool.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.ForceOverLifetimeModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.ForceOverLifetimeModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "x": - instance.x = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "y": - instance.y = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "z": - instance.z = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "xMultiplier": - instance.xMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "yMultiplier": - instance.yMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "zMultiplier": - instance.zMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "space": - instance.space = reader.Read(); - break; - case "randomized": - instance.randomized = reader.Read(ES3Type_bool.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ForceOverLifetimeModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ForceOverLifetimeModule.cs.meta deleted file mode 100644 index 537835b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ForceOverLifetimeModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fd5844fc025754c5399be113ca40fc39 -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs deleted file mode 100644 index 84186a8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs +++ /dev/null @@ -1,320 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; -using ES3Internal; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("layer", "isStatic", "tag", "name", "hideFlags", "children", "components")] - public class ES3Type_GameObject : ES3UnityObjectType - { - private const string prefabPropertyName = "es3Prefab"; - private const string transformPropertyName = "transformID"; - public static ES3Type Instance = null; - public bool saveChildren = false; - - public ES3Type_GameObject() : base(typeof(UnityEngine.GameObject)) { Instance = this; } - - public override void WriteObject(object obj, ES3Writer writer, ES3.ReferenceMode mode) - { - if (WriteUsingDerivedType(obj, writer)) - return; - var instance = (UnityEngine.GameObject)obj; - - var mgr = ES3ReferenceMgrBase.GetManagerFromScene(instance.scene); - - if (mode != ES3.ReferenceMode.ByValue) - { - writer.WriteRef(instance, ES3ReferenceMgrBase.referencePropertyName, mgr); - - if (mode == ES3.ReferenceMode.ByRef) - return; - - var es3Prefab = instance.GetComponent(); - if (es3Prefab != null) - writer.WriteProperty(prefabPropertyName, es3Prefab, ES3Type_ES3PrefabInternal.Instance); - - // Write the ID of this Transform so we can assign it's ID when we load. - writer.WriteRef(instance.transform, transformPropertyName, mgr); - } - - var es3AutoSave = instance.GetComponent(); - - if(es3AutoSave == null || es3AutoSave.saveLayer) - writer.WriteProperty("layer", instance.layer, ES3Type_int.Instance); - if (es3AutoSave == null || es3AutoSave.saveTag) - writer.WriteProperty("tag", instance.tag, ES3Type_string.Instance); - if (es3AutoSave == null || es3AutoSave.saveName) - writer.WriteProperty("name", instance.name, ES3Type_string.Instance); - if (es3AutoSave == null || es3AutoSave.saveHideFlags) - writer.WriteProperty("hideFlags", instance.hideFlags); - if (es3AutoSave == null || es3AutoSave.saveActive) - writer.WriteProperty("active", instance.activeSelf); - - if ((es3AutoSave == null && saveChildren) || (es3AutoSave != null && es3AutoSave.saveChildren)) - writer.WriteProperty("children", GetChildren(instance), ES3.ReferenceMode.ByRefAndValue); - - List components; - - var es3GameObject = instance.GetComponent(); - - // If there's an ES3AutoSave attached and Components are marked to be saved, save these. - if (es3AutoSave != null) - { - es3AutoSave.componentsToSave.RemoveAll(c => c == null); - components = es3AutoSave.componentsToSave; - } - // If there's an ES3GameObject attached, save these. - else if (es3GameObject != null) - { - es3GameObject.components.RemoveAll(c => c == null); - components = es3GameObject.components; - } - // Otherwise, only save explicitly-supported Components, /*or those explicitly marked as Serializable*/. - else - { - components = new List(); - foreach (var component in instance.GetComponents()) - if (component != null && ES3TypeMgr.GetES3Type(component.GetType()) != null) - components.Add(component); - } - - if(components != null & components.Count > 0) - writer.WriteProperty("components", components, ES3.ReferenceMode.ByRefAndValue); - } - - protected override object ReadObject(ES3Reader reader) - { - UnityEngine.Object obj = null; - var refMgr = ES3ReferenceMgrBase.Current; - long id = 0; - - // Read the intial properties regarding the instance we're loading. - while (true) - { - if (refMgr == null) - throw new InvalidOperationException($"An Easy Save 3 Manager is required to save references. To add one to your scene, exit playmode and go to Tools > Easy Save 3 > Add Manager to Scene. Object being saved by reference is {obj.GetType()} with name {obj.name}."); - - var propertyName = ReadPropertyName(reader); - - if (propertyName == ES3Type.typeFieldName) - return ES3TypeMgr.GetOrCreateES3Type(reader.ReadType()).Read(reader); - else if (propertyName == ES3ReferenceMgrBase.referencePropertyName) - { - id = reader.Read_ref(); - obj = refMgr.Get(id, true); - } - else if (propertyName == transformPropertyName) - { - // Now load the Transform's ID and assign it to the Transform of our object. - long transformID = reader.Read_ref(); - if (obj == null) - obj = CreateNewGameObject(refMgr, id); - refMgr.Add(((GameObject)obj).transform, transformID); - } - else if (propertyName == prefabPropertyName) - { - if (obj != null || ES3ReferenceMgrBase.Current == null) - { - reader.ReadInto(obj); // ReadInto to apply the prefab references. - } - else - { - obj = reader.Read(ES3Type_ES3PrefabInternal.Instance); - ES3ReferenceMgrBase.Current.Add(obj, id); - } - } - else if (propertyName == null) - { - /*if (obj == null) - obj = CreateNewGameObject(refMgr, id);*/ - return obj; - } - else - { - reader.overridePropertiesName = propertyName; - break; - } - } - - if (obj == null) - obj = CreateNewGameObject(refMgr, id); - - ReadInto(reader, obj); - return obj; - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.GameObject)obj; - - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - case ES3ReferenceMgrBase.referencePropertyName: - ES3ReferenceMgr.Current.Add(instance, reader.Read_ref()); - break; - case "prefab": - break; - case "layer": - instance.layer = reader.Read(ES3Type_int.Instance); - break; - case "tag": - instance.tag = reader.Read(ES3Type_string.Instance); - break; - case "name": - instance.name = reader.Read(ES3Type_string.Instance); - break; - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - case "active": - instance.SetActive(reader.Read(ES3Type_bool.Instance)); - break; - case "children": - var children = reader.Read(); - var parent = instance.transform; - // Set the parent of each child to this Transform in case the reference ID of the parent has changed. - foreach (var child in children) - child.transform.SetParent(parent); - break; - case "components": - ReadComponents(reader, instance); - break; - default: - reader.Skip(); - break; - } - } - } - - private void ReadComponents(ES3Reader reader, GameObject go) - { - if (reader.StartReadCollection()) - return; - - var components = new List(go.GetComponents()); - - // Read each Component in Components array - while (true) - { - if (!reader.StartReadCollectionItem()) - break; - - if (reader.StartReadObject()) - // We're reading null, so skip this Component. - continue; - - string typeName = null; - Type type = null; - - string propertyName; - while (true) - { - propertyName = ReadPropertyName(reader); - - if (propertyName == ES3Type.typeFieldName) - { - typeName = reader.Read(ES3Type_string.Instance); - type = ES3Reflection.GetType(typeName); - } - else if (propertyName == ES3ReferenceMgrBase.referencePropertyName) - { - if (type == null) - { - if (string.IsNullOrEmpty(typeName)) - throw new InvalidOperationException("Cannot load Component because no type data has been stored with it, so it's not possible to determine it's type"); - else - Debug.LogWarning($"Cannot load Component of type {typeName} because this type no longer exists in your project. Note that this issue will create an empty GameObject named 'New Game Object' in your scene due to the way in which this Component needs to be skipped."); - - // Read past the Component. - reader.overridePropertiesName = propertyName; - ReadObject(reader); - break; - } - - var componentRef = reader.Read_ref(); - - // Rather than loading by reference, load using the Components list. - var c = components.Find(x => x.GetType() == type); - // If the Component exists in the Component list, load into it and remove it from the list. - if (c != null) - { - if (ES3ReferenceMgrBase.Current != null) - ES3ReferenceMgrBase.Current.Add(c, componentRef); - - ES3TypeMgr.GetOrCreateES3Type(type).ReadInto(reader, c); - components.Remove(c); - } - // Else, create a new Component. - else - { - var component = go.AddComponent(type); - ES3TypeMgr.GetOrCreateES3Type(type).ReadInto(reader, component); - ES3ReferenceMgrBase.Current.Add(component, componentRef); - } - break; - } - else if (propertyName == null) - break; - else - { - reader.overridePropertiesName = propertyName; - ReadObject(reader); - break; - } - } - - reader.EndReadObject(); - - if (reader.EndReadCollectionItem()) - break; - } - - reader.EndReadCollection(); - } - - private GameObject CreateNewGameObject(ES3ReferenceMgrBase refMgr, long id) - { - GameObject go = new GameObject(); - if (id != 0) - refMgr.Add(go, id); - else - refMgr.Add(go); - return go; - } - - /* - * Gets the direct children of this GameObject. - */ - public static List GetChildren(GameObject go) - { - var goTransform = go.transform; - var children = new List(); - - foreach (Transform child in goTransform) - // If a child has an Auto Save component, let it save itself. - //if(child.GetComponent() == null) - children.Add(child.gameObject); - - return children; - } - - // These are not used as we've overridden the ReadObject methods instead. - protected override void WriteUnityObject(object obj, ES3Writer writer) { } - protected override void ReadUnityObject(ES3Reader reader, object obj) { } - protected override object ReadUnityObject(ES3Reader reader) { return null; } - } - - public class ES3Type_GameObjectArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_GameObjectArray() : base(typeof(UnityEngine.GameObject[]), ES3Type_GameObject.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs.meta deleted file mode 100644 index 0f59d3b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 1ca7947fbcbec457f89b984a9647a9d7 -timeCreated: 1519132281 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Gradient.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Gradient.cs deleted file mode 100644 index 5107de7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Gradient.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("colorKeys", "alphaKeys", "mode")] - public class ES3Type_Gradient : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Gradient() : base(typeof(UnityEngine.Gradient)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Gradient)obj; - writer.WriteProperty("colorKeys", instance.colorKeys, ES3Type_GradientColorKeyArray.Instance); - writer.WriteProperty("alphaKeys", instance.alphaKeys, ES3Type_GradientAlphaKeyArray.Instance); - writer.WriteProperty("mode", instance.mode); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.Gradient(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Gradient)obj; - instance.SetKeys( - reader.ReadProperty(ES3Type_GradientColorKeyArray.Instance), - reader.ReadProperty(ES3Type_GradientAlphaKeyArray.Instance) - ); - - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - case "mode": - instance.mode = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Gradient.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Gradient.cs.meta deleted file mode 100644 index e400a6e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Gradient.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a509023afeeee4a49965009b6ba4bc44 -timeCreated: 1519132293 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientAlphaKey.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientAlphaKey.cs deleted file mode 100644 index 24ce934..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientAlphaKey.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("alpha", "time")] - public class ES3Type_GradientAlphaKey : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_GradientAlphaKey() : base(typeof(UnityEngine.GradientAlphaKey)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.GradientAlphaKey)obj; - - writer.WriteProperty("alpha", instance.alpha, ES3Type_float.Instance); - writer.WriteProperty("time", instance.time, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new UnityEngine.GradientAlphaKey(reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } - - public class ES3Type_GradientAlphaKeyArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_GradientAlphaKeyArray() : base(typeof(GradientAlphaKey[]), ES3Type_GradientAlphaKey.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientAlphaKey.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientAlphaKey.cs.meta deleted file mode 100644 index 8b69cd8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientAlphaKey.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 934a57ef826284a56bb97406bcf373fd -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientColorKey.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientColorKey.cs deleted file mode 100644 index 7317e47..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientColorKey.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("color", "time")] - public class ES3Type_GradientColorKey : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_GradientColorKey() : base(typeof(UnityEngine.GradientColorKey)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.GradientColorKey)obj; - - writer.WriteProperty("color", instance.color, ES3Type_Color.Instance); - writer.WriteProperty("time", instance.time, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new UnityEngine.GradientColorKey(reader.ReadProperty(ES3Type_Color.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } - - public class ES3Type_GradientColorKeyArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_GradientColorKeyArray() : base(typeof(GradientColorKey[]), ES3Type_GradientColorKey.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientColorKey.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientColorKey.cs.meta deleted file mode 100644 index b154e9a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GradientColorKey.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9dcbf4e7ca28b4bd5a6eb0a9d256c082 -timeCreated: 1519132292 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Guid.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Guid.cs deleted file mode 100644 index d56e433..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Guid.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("value")] - public class ES3Type_Guid : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Guid() : base(typeof(Guid)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Guid casted = (Guid)obj; - writer.WriteProperty("value", casted.ToString(), ES3Type_string.Instance); - } - - public override object Read(ES3Reader reader) - { - return Guid.Parse(reader.ReadProperty(ES3Type_string.Instance)); - } - } - - public class ES3Type_GuidArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_GuidArray() : base(typeof(Guid[]), ES3Type_Guid.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Guid.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Guid.cs.meta deleted file mode 100644 index 873d71f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Guid.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7e9441d85c177084db4be38cf2cb2aca -timeCreated: 1519132295 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_InheritVelocityModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_InheritVelocityModule.cs deleted file mode 100644 index 07bb743..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_InheritVelocityModule.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "mode", "curve", "curveMultiplier")] - public class ES3Type_InheritVelocityModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_InheritVelocityModule() : base(typeof(UnityEngine.ParticleSystem.InheritVelocityModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.InheritVelocityModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("mode", instance.mode); - writer.WriteProperty("curve", instance.curve, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("curveMultiplier", instance.curveMultiplier, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.InheritVelocityModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.InheritVelocityModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "mode": - instance.mode = reader.Read(); - break; - case "curve": - instance.curve = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "curveMultiplier": - instance.curveMultiplier = reader.Read(ES3Type_float.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_InheritVelocityModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_InheritVelocityModule.cs.meta deleted file mode 100644 index 35f3ffd..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_InheritVelocityModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c652805edba024e5c885fa799b3a5775 -timeCreated: 1519132296 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Keyframe.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Keyframe.cs deleted file mode 100644 index af39e94..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Keyframe.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("time", "value", "inTangent", "outTangent")] - public class ES3Type_Keyframe : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Keyframe() : base(typeof(UnityEngine.Keyframe)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Keyframe)obj; - - writer.WriteProperty("time", instance.time, ES3Type_float.Instance); - writer.WriteProperty("value", instance.value, ES3Type_float.Instance); - writer.WriteProperty("inTangent", instance.inTangent, ES3Type_float.Instance); - writer.WriteProperty("outTangent", instance.outTangent, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new UnityEngine.Keyframe(reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } - - public class ES3Type_KeyframeArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_KeyframeArray() : base(typeof(Keyframe[]), ES3Type_Keyframe.Instance) - { - Instance = this; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Keyframe.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Keyframe.cs.meta deleted file mode 100644 index 81154b3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Keyframe.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 63eb0700074954e23aa09edcc4b81016 -timeCreated: 1519132287 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LayerMask.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LayerMask.cs deleted file mode 100644 index e829a20..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LayerMask.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("colorKeys", "alphaKeys", "mode")] - public class ES3Type_LayerMask : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_LayerMask() : base(typeof(UnityEngine.LayerMask)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.LayerMask)obj; - - writer.WriteProperty("value", instance.value, ES3Type_int.Instance); - } - - public override object Read(ES3Reader reader) - { - LayerMask instance = new LayerMask(); - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - case "value": - instance = reader.Read(ES3Type_int.Instance); - break; - default: - reader.Skip(); - break; - } - } - return instance; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LayerMask.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LayerMask.cs.meta deleted file mode 100644 index 45f770c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LayerMask.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ad28544641a3c495b8ebbf10c51bf359 -timeCreated: 1519132293 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Light.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Light.cs deleted file mode 100644 index b8501fd..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Light.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("type", "color", "intensity", "bounceIntensity", "shadows", "shadowStrength", "shadowResolution", "shadowCustomResolution", "shadowBias", "shadowNormalBias", "shadowNearPlane", "range", "spotAngle", "cookieSize", "cookie", "flare", "renderMode", "cullingMask", "areaSize", "lightmappingMode", "enabled", "hideFlags")] - public class ES3Type_Light : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_Light() : base(typeof(UnityEngine.Light)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Light)obj; - - writer.WriteProperty("type", instance.type); - writer.WriteProperty("color", instance.color, ES3Type_Color.Instance); - writer.WriteProperty("intensity", instance.intensity, ES3Type_float.Instance); - writer.WriteProperty("bounceIntensity", instance.bounceIntensity, ES3Type_float.Instance); - writer.WriteProperty("shadows", instance.shadows); - writer.WriteProperty("shadowStrength", instance.shadowStrength, ES3Type_float.Instance); - writer.WriteProperty("shadowResolution", instance.shadowResolution); - writer.WriteProperty("shadowCustomResolution", instance.shadowCustomResolution, ES3Type_int.Instance); - writer.WriteProperty("shadowBias", instance.shadowBias, ES3Type_float.Instance); - writer.WriteProperty("shadowNormalBias", instance.shadowNormalBias, ES3Type_float.Instance); - writer.WriteProperty("shadowNearPlane", instance.shadowNearPlane, ES3Type_float.Instance); - writer.WriteProperty("range", instance.range, ES3Type_float.Instance); - writer.WriteProperty("spotAngle", instance.spotAngle, ES3Type_float.Instance); - writer.WriteProperty("cookieSize", instance.cookieSize, ES3Type_float.Instance); - writer.WriteProperty("cookie", instance.cookie, ES3Type_Texture2D.Instance); - writer.WriteProperty("flare", instance.flare, ES3Type_Texture2D.Instance); - writer.WriteProperty("renderMode", instance.renderMode); - writer.WriteProperty("cullingMask", instance.cullingMask, ES3Type_int.Instance); - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("hideFlags", instance.hideFlags); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Light)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "type": - instance.type = reader.Read(); - break; - case "color": - instance.color = reader.Read(ES3Type_Color.Instance); - break; - case "intensity": - instance.intensity = reader.Read(ES3Type_float.Instance); - break; - case "bounceIntensity": - instance.bounceIntensity = reader.Read(ES3Type_float.Instance); - break; - case "shadows": - instance.shadows = reader.Read(); - break; - case "shadowStrength": - instance.shadowStrength = reader.Read(ES3Type_float.Instance); - break; - case "shadowResolution": - instance.shadowResolution = reader.Read(); - break; - case "shadowCustomResolution": - instance.shadowCustomResolution = reader.Read(ES3Type_int.Instance); - break; - case "shadowBias": - instance.shadowBias = reader.Read(ES3Type_float.Instance); - break; - case "shadowNormalBias": - instance.shadowNormalBias = reader.Read(ES3Type_float.Instance); - break; - case "shadowNearPlane": - instance.shadowNearPlane = reader.Read(ES3Type_float.Instance); - break; - case "range": - instance.range = reader.Read(ES3Type_float.Instance); - break; - case "spotAngle": - instance.spotAngle = reader.Read(ES3Type_float.Instance); - break; - case "cookieSize": - instance.cookieSize = reader.Read(ES3Type_float.Instance); - break; - case "cookie": - instance.cookie = reader.Read(); - break; - case "flare": - instance.flare = reader.Read(); - break; - case "renderMode": - instance.renderMode = reader.Read(); - break; - case "cullingMask": - instance.cullingMask = reader.Read(ES3Type_int.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Light.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Light.cs.meta deleted file mode 100644 index 54c6c1b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Light.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ed020448eba3f489fafcf36e1bf3b7e0 -timeCreated: 1519132300 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LightsModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LightsModule.cs deleted file mode 100644 index 4af8af8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LightsModule.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "ratio", "useRandomDistribution", "light", "useParticleColor", "sizeAffectsRange", "alphaAffectsIntensity", "range", "rangeMultiplier", "intensity", "intensityMultiplier", "maxLights")] - public class ES3Type_LightsModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_LightsModule() : base(typeof(UnityEngine.ParticleSystem.LightsModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.LightsModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("ratio", instance.ratio, ES3Type_float.Instance); - writer.WriteProperty("useRandomDistribution", instance.useRandomDistribution, ES3Type_bool.Instance); - writer.WritePropertyByRef("light", instance.light); - writer.WriteProperty("useParticleColor", instance.useParticleColor, ES3Type_bool.Instance); - writer.WriteProperty("sizeAffectsRange", instance.sizeAffectsRange, ES3Type_bool.Instance); - writer.WriteProperty("alphaAffectsIntensity", instance.alphaAffectsIntensity, ES3Type_bool.Instance); - writer.WriteProperty("range", instance.range, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("rangeMultiplier", instance.rangeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("intensity", instance.intensity, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("intensityMultiplier", instance.intensityMultiplier, ES3Type_float.Instance); - writer.WriteProperty("maxLights", instance.maxLights, ES3Type_int.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.LightsModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.LightsModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "ratio": - instance.ratio = reader.Read(ES3Type_float.Instance); - break; - case "useRandomDistribution": - instance.useRandomDistribution = reader.Read(ES3Type_bool.Instance); - break; - case "light": - instance.light = reader.Read(ES3Type_Light.Instance); - break; - case "useParticleColor": - instance.useParticleColor = reader.Read(ES3Type_bool.Instance); - break; - case "sizeAffectsRange": - instance.sizeAffectsRange = reader.Read(ES3Type_bool.Instance); - break; - case "alphaAffectsIntensity": - instance.alphaAffectsIntensity = reader.Read(ES3Type_bool.Instance); - break; - case "range": - instance.range = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "rangeMultiplier": - instance.rangeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "intensity": - instance.intensity = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "intensityMultiplier": - instance.intensityMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "maxLights": - instance.maxLights = reader.Read(ES3Type_int.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LightsModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LightsModule.cs.meta deleted file mode 100644 index c27d822..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LightsModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ca49590603e164a87a49d3c66013bede -timeCreated: 1519132296 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LimitVelocityOverLifetimeModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LimitVelocityOverLifetimeModule.cs deleted file mode 100644 index 059a9f6..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LimitVelocityOverLifetimeModule.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "limitX", "limitXMultiplier", "limitY", "limitYMultiplier", "limitZ", "limitZMultiplier", "limit", "limitMultiplier", "dampen", "separateAxes", "space")] - public class ES3Type_LimitVelocityOverLifetimeModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_LimitVelocityOverLifetimeModule() : base(typeof(UnityEngine.ParticleSystem.LimitVelocityOverLifetimeModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.LimitVelocityOverLifetimeModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("limitX", instance.limitX, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("limitXMultiplier", instance.limitXMultiplier, ES3Type_float.Instance); - writer.WriteProperty("limitY", instance.limitY, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("limitYMultiplier", instance.limitYMultiplier, ES3Type_float.Instance); - writer.WriteProperty("limitZ", instance.limitZ, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("limitZMultiplier", instance.limitZMultiplier, ES3Type_float.Instance); - writer.WriteProperty("limit", instance.limit, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("limitMultiplier", instance.limitMultiplier, ES3Type_float.Instance); - writer.WriteProperty("dampen", instance.dampen, ES3Type_float.Instance); - writer.WriteProperty("separateAxes", instance.separateAxes, ES3Type_bool.Instance); - writer.WriteProperty("space", instance.space); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.LimitVelocityOverLifetimeModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.LimitVelocityOverLifetimeModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "limitX": - instance.limitX = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "limitXMultiplier": - instance.limitXMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "limitY": - instance.limitY = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "limitYMultiplier": - instance.limitYMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "limitZ": - instance.limitZ = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "limitZMultiplier": - instance.limitZMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "limit": - instance.limit = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "limitMultiplier": - instance.limitMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "dampen": - instance.dampen = reader.Read(ES3Type_float.Instance); - break; - case "separateAxes": - instance.separateAxes = reader.Read(ES3Type_bool.Instance); - break; - case "space": - instance.space = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LimitVelocityOverLifetimeModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LimitVelocityOverLifetimeModule.cs.meta deleted file mode 100644 index 7dbe48e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_LimitVelocityOverLifetimeModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 1b26d58c373b9474591275b8c3b33514 -timeCreated: 1519132281 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MainModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MainModule.cs deleted file mode 100644 index 54cfae8..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MainModule.cs +++ /dev/null @@ -1,206 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("duration", "loop", "prewarm", "startDelay", "startDelayMultiplier", "startLifetime", "startLifetimeMultiplier", "startSpeed", "startSpeedMultiplier", "startSize3D", "startSize", "startSizeMultiplier", "startSizeX", "startSizeXMultiplier", "startSizeY", "startSizeYMultiplier", "startSizeZ", "startSizeZMultiplier", "startRotation3D", "startRotation", "startRotationMultiplier", "startRotationX", "startRotationXMultiplier", "startRotationY", "startRotationYMultiplier", "startRotationZ", "startRotationZMultiplier", "randomizeRotationDirection", "startColor", "gravityModifier", "gravityModifierMultiplier", "simulationSpace", "customSimulationSpace", "simulationSpeed", "scalingMode", "playOnAwake", "maxParticles")] - public class ES3Type_MainModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_MainModule() : base(typeof(UnityEngine.ParticleSystem.MainModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.MainModule)obj; - - writer.WriteProperty("duration", instance.duration, ES3Type_float.Instance); - writer.WriteProperty("loop", instance.loop, ES3Type_bool.Instance); - writer.WriteProperty("prewarm", instance.prewarm, ES3Type_bool.Instance); - writer.WriteProperty("startDelay", instance.startDelay, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startDelayMultiplier", instance.startDelayMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startLifetime", instance.startLifetime, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startLifetimeMultiplier", instance.startLifetimeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startSpeed", instance.startSpeed, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startSpeedMultiplier", instance.startSpeedMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startSize3D", instance.startSize3D, ES3Type_bool.Instance); - writer.WriteProperty("startSize", instance.startSize, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startSizeMultiplier", instance.startSizeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startSizeX", instance.startSizeX, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startSizeXMultiplier", instance.startSizeXMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startSizeY", instance.startSizeY, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startSizeYMultiplier", instance.startSizeYMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startSizeZ", instance.startSizeZ, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startSizeZMultiplier", instance.startSizeZMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startRotation3D", instance.startRotation3D, ES3Type_bool.Instance); - writer.WriteProperty("startRotation", instance.startRotation, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startRotationMultiplier", instance.startRotationMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startRotationX", instance.startRotationX, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startRotationXMultiplier", instance.startRotationXMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startRotationY", instance.startRotationY, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startRotationYMultiplier", instance.startRotationYMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startRotationZ", instance.startRotationZ, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startRotationZMultiplier", instance.startRotationZMultiplier, ES3Type_float.Instance); - #if UNITY_2018_1_OR_NEWER - writer.WriteProperty("flipRotation", instance.flipRotation, ES3Type_float.Instance); - #else - writer.WriteProperty("randomizeRotationDirection", instance.randomizeRotationDirection, ES3Type_float.Instance); - #endif - writer.WriteProperty("startColor", instance.startColor, ES3Type_MinMaxGradient.Instance); - writer.WriteProperty("gravityModifier", instance.gravityModifier, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("gravityModifierMultiplier", instance.gravityModifierMultiplier, ES3Type_float.Instance); - writer.WriteProperty("simulationSpace", instance.simulationSpace); - writer.WritePropertyByRef("customSimulationSpace", instance.customSimulationSpace); - writer.WriteProperty("simulationSpeed", instance.simulationSpeed, ES3Type_float.Instance); - writer.WriteProperty("scalingMode", instance.scalingMode); - writer.WriteProperty("playOnAwake", instance.playOnAwake, ES3Type_bool.Instance); - writer.WriteProperty("maxParticles", instance.maxParticles, ES3Type_int.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.MainModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.MainModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - case "duration": - instance.duration = reader.Read(ES3Type_float.Instance); - break; - case "loop": - instance.loop = reader.Read(ES3Type_bool.Instance); - break; - case "prewarm": - instance.prewarm = reader.Read(ES3Type_bool.Instance); - break; - case "startDelay": - instance.startDelay = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startDelayMultiplier": - instance.startDelayMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startLifetime": - instance.startLifetime = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startLifetimeMultiplier": - instance.startLifetimeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startSpeed": - instance.startSpeed = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startSpeedMultiplier": - instance.startSpeedMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startSize3D": - instance.startSize3D = reader.Read(ES3Type_bool.Instance); - break; - case "startSize": - instance.startSize = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startSizeMultiplier": - instance.startSizeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startSizeX": - instance.startSizeX = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startSizeXMultiplier": - instance.startSizeXMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startSizeY": - instance.startSizeY = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startSizeYMultiplier": - instance.startSizeYMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startSizeZ": - instance.startSizeZ = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startSizeZMultiplier": - instance.startSizeZMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startRotation3D": - instance.startRotation3D = reader.Read(ES3Type_bool.Instance); - break; - case "startRotation": - instance.startRotation = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startRotationMultiplier": - instance.startRotationMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startRotationX": - instance.startRotationX = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startRotationXMultiplier": - instance.startRotationXMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startRotationY": - instance.startRotationY = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startRotationYMultiplier": - instance.startRotationYMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startRotationZ": - instance.startRotationZ = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startRotationZMultiplier": - instance.startRotationZMultiplier = reader.Read(ES3Type_float.Instance); - break; - #if UNITY_2018_1_OR_NEWER - case "flipRotation": - instance.flipRotation = reader.Read(ES3Type_float.Instance); - break; - case "randomizeRotationDirection": - instance.flipRotation = reader.Read(ES3Type_float.Instance); - break; - #else - case "randomizeRotationDirection": - instance.randomizeRotationDirection = reader.Read(ES3Type_float.Instance); - break; - #endif - case "startColor": - instance.startColor = reader.Read(ES3Type_MinMaxGradient.Instance); - break; - case "gravityModifier": - instance.gravityModifier = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "gravityModifierMultiplier": - instance.gravityModifierMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "simulationSpace": - instance.simulationSpace = reader.Read(); - break; - case "customSimulationSpace": - instance.customSimulationSpace = reader.Read(ES3Type_Transform.Instance); - break; - case "simulationSpeed": - instance.simulationSpeed = reader.Read(ES3Type_float.Instance); - break; - case "scalingMode": - instance.scalingMode = reader.Read(); - break; - case "playOnAwake": - instance.playOnAwake = reader.Read(ES3Type_bool.Instance); - break; - case "maxParticles": - instance.maxParticles = reader.Read(ES3Type_int.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MainModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MainModule.cs.meta deleted file mode 100644 index 945d296..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MainModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 55fa2d96d06d64809ad226f1874be169 -timeCreated: 1519132285 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Material.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Material.cs deleted file mode 100644 index e31c703..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Material.cs +++ /dev/null @@ -1,1304 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("shader", "renderQueue", "shaderKeywords", "globalIlluminationFlags", "properties")] - public class ES3Type_Material : ES3UnityObjectType - { - public static ES3Type Instance = null; - - public ES3Type_Material() : base(typeof(UnityEngine.Material)){ Instance = this; } - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Material)obj; - - // Uncomment if you want "instance" to be removed from the name. - //instance.name = instance.name.Replace(" (Instance)", ""); - - writer.WriteProperty("name", instance.name); - writer.WriteProperty("shader", instance.shader); - writer.WriteProperty("renderQueue", instance.renderQueue, ES3Type_int.Instance); - writer.WriteProperty("shaderKeywords", instance.shaderKeywords); - writer.WriteProperty("globalIlluminationFlags", instance.globalIlluminationFlags); - - var shader = instance.shader; - - if (shader != null) - { -#if UNITY_2019_3_OR_NEWER - for (int i = 0; i < shader.GetPropertyCount(); i++) - { - var name = shader.GetPropertyName(i); - - switch (shader.GetPropertyType(i)) - { - case UnityEngine.Rendering.ShaderPropertyType.Color: - writer.WriteProperty(name, instance.GetColor(name)); - break; - case UnityEngine.Rendering.ShaderPropertyType.Float: - case UnityEngine.Rendering.ShaderPropertyType.Range: - writer.WriteProperty(name, instance.GetFloat(name)); - break; - case UnityEngine.Rendering.ShaderPropertyType.Texture: - var texture = instance.GetTexture(name); - - if (texture != null && texture.GetType() != typeof(Texture2D)) - { - ES3Internal.ES3Debug.LogWarning($"The texture '{name}' of Material '{instance.name}' will not be saved as only Textures of type Texture2D can be saved at runtime, whereas '{name}' is of type '{texture.GetType()}'."); - break; - } - writer.WriteProperty(name, texture); - writer.WriteProperty(name + "_TextureOffset", instance.GetTextureOffset(name)); - writer.WriteProperty(name + "_TextureScale", instance.GetTextureScale(name)); - break; - case UnityEngine.Rendering.ShaderPropertyType.Vector: - writer.WriteProperty(name, instance.GetVector(name)); - break; - } - } - -#else - - if(instance.HasProperty("_Color")) - writer.WriteProperty("_Color", instance.GetColor("_Color")); - if(instance.HasProperty("_SpecColor")) - writer.WriteProperty("_SpecColor", instance.GetColor("_SpecColor")); - if(instance.HasProperty("_Shininess")) - writer.WriteProperty("_Shininess", instance.GetFloat("_Shininess")); - if(instance.HasProperty("_MainTex")) - { - writer.WriteProperty("_MainTex", instance.GetTexture("_MainTex")); - writer.WriteProperty("_MainTex_Scale", instance.GetTextureScale("_MainTex")); - } - if(instance.HasProperty("_MainTex_TextureOffset")) - writer.WriteProperty("_MainTex_TextureOffset", instance.GetTextureOffset("_MainTex_TextureOffset")); - if(instance.HasProperty("_MainTex_TextureScale")) - writer.WriteProperty("_MainTex_TextureScale", instance.GetTextureScale("_MainTex_TextureScale")); - if(instance.HasProperty("_Illum")) - writer.WriteProperty("_Illum", instance.GetTexture("_Illum")); - if(instance.HasProperty("_Illum_TextureOffset")) - writer.WriteProperty("_Illum_TextureOffset", instance.GetTextureOffset("_Illum_TextureOffset")); - if(instance.HasProperty("_Illum_TextureScale")) - writer.WriteProperty("_Illum_TextureScale", instance.GetTextureScale("_Illum_TextureScale")); - if(instance.HasProperty("_BumpMap")) - writer.WriteProperty("_BumpMap", instance.GetTexture("_BumpMap")); - if(instance.HasProperty("_BumpMap_TextureOffset")) - writer.WriteProperty("_BumpMap_TextureOffset", instance.GetTextureOffset("_BumpMap_TextureOffset")); - if(instance.HasProperty("_BumpMap_TextureScale")) - writer.WriteProperty("_BumpMap_TextureScale", instance.GetTextureScale("_BumpMap_TextureScale")); - if(instance.HasProperty("_Emission")) - writer.WriteProperty("_Emission", instance.GetFloat("_Emission")); - if(instance.HasProperty("_Specular")) - writer.WriteProperty("_Specular", instance.GetColor("_Specular")); - if(instance.HasProperty("_MainBump")) - writer.WriteProperty("_MainBump", instance.GetTexture("_MainBump")); - if(instance.HasProperty("_MainBump_TextureOffset")) - writer.WriteProperty("_MainBump_TextureOffset", instance.GetTextureOffset("_MainBump_TextureOffset")); - if(instance.HasProperty("_MainBump_TextureScale")) - writer.WriteProperty("_MainBump_TextureScale", instance.GetTextureScale("_MainBump_TextureScale")); - if(instance.HasProperty("_Mask")) - writer.WriteProperty("_Mask", instance.GetTexture("_Mask")); - if(instance.HasProperty("_Mask_TextureOffset")) - writer.WriteProperty("_Mask_TextureOffset", instance.GetTextureOffset("_Mask_TextureOffset")); - if(instance.HasProperty("_Mask_TextureScale")) - writer.WriteProperty("_Mask_TextureScale", instance.GetTextureScale("_Mask_TextureScale")); - if(instance.HasProperty("_Focus")) - writer.WriteProperty("_Focus", instance.GetFloat("_Focus")); - if(instance.HasProperty("_StencilComp")) - writer.WriteProperty("_StencilComp", instance.GetFloat("_StencilComp")); - if(instance.HasProperty("_Stencil")) - writer.WriteProperty("_Stencil", instance.GetFloat("_Stencil")); - if(instance.HasProperty("_StencilOp")) - writer.WriteProperty("_StencilOp", instance.GetFloat("_StencilOp")); - if(instance.HasProperty("_StencilWriteMask")) - writer.WriteProperty("_StencilWriteMask", instance.GetFloat("_StencilWriteMask")); - if(instance.HasProperty("_StencilReadMask")) - writer.WriteProperty("_StencilReadMask", instance.GetFloat("_StencilReadMask")); - if(instance.HasProperty("_ColorMask")) - writer.WriteProperty("_ColorMask", instance.GetFloat("_ColorMask")); - if(instance.HasProperty("_UseUIAlphaClip")) - writer.WriteProperty("_UseUIAlphaClip", instance.GetFloat("_UseUIAlphaClip")); - if(instance.HasProperty("_SrcBlend")) - writer.WriteProperty("_SrcBlend", instance.GetFloat("_SrcBlend")); - if(instance.HasProperty("_DstBlend")) - writer.WriteProperty("_DstBlend", instance.GetFloat("_DstBlend")); - if(instance.HasProperty("_ReflectColor")) - writer.WriteProperty("_ReflectColor", instance.GetColor("_ReflectColor")); - if(instance.HasProperty("_Cube")) - writer.WriteProperty("_Cube", instance.GetTexture("_Cube")); - if(instance.HasProperty("_Cube_TextureOffset")) - writer.WriteProperty("_Cube_TextureOffset", instance.GetTextureOffset("_Cube_TextureOffset")); - if(instance.HasProperty("_Cube_TextureScale")) - writer.WriteProperty("_Cube_TextureScale", instance.GetTextureScale("_Cube_TextureScale")); - if(instance.HasProperty("_Tint")) - writer.WriteProperty("_Tint", instance.GetColor("_Tint")); - if(instance.HasProperty("_Exposure")) - writer.WriteProperty("_Exposure", instance.GetFloat("_Exposure")); - if(instance.HasProperty("_Rotation")) - writer.WriteProperty("_Rotation", instance.GetFloat("_Rotation")); - if(instance.HasProperty("_Tex")) - writer.WriteProperty("_Tex", instance.GetTexture("_Tex")); - if(instance.HasProperty("_Tex_TextureOffset")) - writer.WriteProperty("_Tex_TextureOffset", instance.GetTextureOffset("_Tex_TextureOffset")); - if(instance.HasProperty("_Tex_TextureScale")) - writer.WriteProperty("_Tex_TextureScale", instance.GetTextureScale("_Tex_TextureScale")); - if(instance.HasProperty("_Control")) - writer.WriteProperty("_Control", instance.GetTexture("_Control")); - if(instance.HasProperty("_Control_TextureOffset")) - writer.WriteProperty("_Control_TextureOffset", instance.GetTextureOffset("_Control_TextureOffset")); - if(instance.HasProperty("_Control_TextureScale")) - writer.WriteProperty("_Control_TextureScale", instance.GetTextureScale("_Control_TextureScale")); - if(instance.HasProperty("_Splat3")) - writer.WriteProperty("_Splat3", instance.GetTexture("_Splat3")); - if(instance.HasProperty("_Splat3_TextureOffset")) - writer.WriteProperty("_Splat3_TextureOffset", instance.GetTextureOffset("_Splat3_TextureOffset")); - if(instance.HasProperty("_Splat3_TextureScale")) - writer.WriteProperty("_Splat3_TextureScale", instance.GetTextureScale("_Splat3_TextureScale")); - if(instance.HasProperty("_Splat2")) - writer.WriteProperty("_Splat2", instance.GetTexture("_Splat2")); - if(instance.HasProperty("_Splat2_TextureOffset")) - writer.WriteProperty("_Splat2_TextureOffset", instance.GetTextureOffset("_Splat2_TextureOffset")); - if(instance.HasProperty("_Splat2_TextureScale")) - writer.WriteProperty("_Splat2_TextureScale", instance.GetTextureScale("_Splat2_TextureScale")); - if(instance.HasProperty("_Splat1")) - writer.WriteProperty("_Splat1", instance.GetTexture("_Splat1")); - if(instance.HasProperty("_Splat1_TextureOffset")) - writer.WriteProperty("_Splat1_TextureOffset", instance.GetTextureOffset("_Splat1_TextureOffset")); - if(instance.HasProperty("_Splat1_TextureScale")) - writer.WriteProperty("_Splat1_TextureScale", instance.GetTextureScale("_Splat1_TextureScale")); - if(instance.HasProperty("_Splat0")) - writer.WriteProperty("_Splat0", instance.GetTexture("_Splat0")); - if(instance.HasProperty("_Splat0_TextureOffset")) - writer.WriteProperty("_Splat0_TextureOffset", instance.GetTextureOffset("_Splat0_TextureOffset")); - if(instance.HasProperty("_Splat0_TextureScale")) - writer.WriteProperty("_Splat0_TextureScale", instance.GetTextureScale("_Splat0_TextureScale")); - if(instance.HasProperty("_Normal3")) - writer.WriteProperty("_Normal3", instance.GetTexture("_Normal3")); - if(instance.HasProperty("_Normal3_TextureOffset")) - writer.WriteProperty("_Normal3_TextureOffset", instance.GetTextureOffset("_Normal3_TextureOffset")); - if(instance.HasProperty("_Normal3_TextureScale")) - writer.WriteProperty("_Normal3_TextureScale", instance.GetTextureScale("_Normal3_TextureScale")); - if(instance.HasProperty("_Normal2")) - writer.WriteProperty("_Normal2", instance.GetTexture("_Normal2")); - if(instance.HasProperty("_Normal2_TextureOffset")) - writer.WriteProperty("_Normal2_TextureOffset", instance.GetTextureOffset("_Normal2_TextureOffset")); - if(instance.HasProperty("_Normal2_TextureScale")) - writer.WriteProperty("_Normal2_TextureScale", instance.GetTextureScale("_Normal2_TextureScale")); - if(instance.HasProperty("_Normal1")) - writer.WriteProperty("_Normal1", instance.GetTexture("_Normal1")); - if(instance.HasProperty("_Normal1_TextureOffset")) - writer.WriteProperty("_Normal1_TextureOffset", instance.GetTextureOffset("_Normal1_TextureOffset")); - if(instance.HasProperty("_Normal1_TextureScale")) - writer.WriteProperty("_Normal1_TextureScale", instance.GetTextureScale("_Normal1_TextureScale")); - if(instance.HasProperty("_Normal0")) - writer.WriteProperty("_Normal0", instance.GetTexture("_Normal0")); - if(instance.HasProperty("_Normal0_TextureOffset")) - writer.WriteProperty("_Normal0_TextureOffset", instance.GetTextureOffset("_Normal0_TextureOffset")); - if(instance.HasProperty("_Normal0_TextureScale")) - writer.WriteProperty("_Normal0_TextureScale", instance.GetTextureScale("_Normal0_TextureScale")); - if(instance.HasProperty("_Cutoff")) - writer.WriteProperty("_Cutoff", instance.GetFloat("_Cutoff")); - if(instance.HasProperty("_BaseLight")) - writer.WriteProperty("_BaseLight", instance.GetFloat("_BaseLight")); - if(instance.HasProperty("_AO")) - writer.WriteProperty("_AO", instance.GetFloat("_AO")); - if(instance.HasProperty("_Occlusion")) - writer.WriteProperty("_Occlusion", instance.GetFloat("_Occlusion")); - if(instance.HasProperty("_TreeInstanceColor")) - writer.WriteProperty("_TreeInstanceColor", instance.GetVector("_TreeInstanceColor")); - if(instance.HasProperty("_TreeInstanceScale")) - writer.WriteProperty("_TreeInstanceScale", instance.GetVector("_TreeInstanceScale")); - if(instance.HasProperty("_SquashAmount")) - writer.WriteProperty("_SquashAmount", instance.GetFloat("_SquashAmount")); - if(instance.HasProperty("_TranslucencyColor")) - writer.WriteProperty("_TranslucencyColor", instance.GetColor("_TranslucencyColor")); - if(instance.HasProperty("_TranslucencyViewDependency")) - writer.WriteProperty("_TranslucencyViewDependency", instance.GetFloat("_TranslucencyViewDependency")); - if(instance.HasProperty("_ShadowStrength")) - writer.WriteProperty("_ShadowStrength", instance.GetFloat("_ShadowStrength")); - if(instance.HasProperty("_ShadowOffsetScale")) - writer.WriteProperty("_ShadowOffsetScale", instance.GetFloat("_ShadowOffsetScale")); - if(instance.HasProperty("_ShadowTex")) - writer.WriteProperty("_ShadowTex", instance.GetTexture("_ShadowTex")); - if(instance.HasProperty("_ShadowTex_TextureOffset")) - writer.WriteProperty("_ShadowTex_TextureOffset", instance.GetTextureOffset("_ShadowTex_TextureOffset")); - if(instance.HasProperty("_ShadowTex_TextureScale")) - writer.WriteProperty("_ShadowTex_TextureScale", instance.GetTextureScale("_ShadowTex_TextureScale")); - if(instance.HasProperty("_BumpSpecMap")) - writer.WriteProperty("_BumpSpecMap", instance.GetTexture("_BumpSpecMap")); - if(instance.HasProperty("_BumpSpecMap_TextureOffset")) - writer.WriteProperty("_BumpSpecMap_TextureOffset", instance.GetTextureOffset("_BumpSpecMap_TextureOffset")); - if(instance.HasProperty("_BumpSpecMap_TextureScale")) - writer.WriteProperty("_BumpSpecMap_TextureScale", instance.GetTextureScale("_BumpSpecMap_TextureScale")); - if(instance.HasProperty("_TranslucencyMap")) - writer.WriteProperty("_TranslucencyMap", instance.GetTexture("_TranslucencyMap")); - if(instance.HasProperty("_TranslucencyMap_TextureOffset")) - writer.WriteProperty("_TranslucencyMap_TextureOffset", instance.GetTextureOffset("_TranslucencyMap_TextureOffset")); - if(instance.HasProperty("_TranslucencyMap_TextureScale")) - writer.WriteProperty("_TranslucencyMap_TextureScale", instance.GetTextureScale("_TranslucencyMap_TextureScale")); - if(instance.HasProperty("_LightMap")) - writer.WriteProperty("_LightMap", instance.GetTexture("_LightMap")); - if(instance.HasProperty("_LightMap_TextureOffset")) - writer.WriteProperty("_LightMap_TextureOffset", instance.GetTextureOffset("_LightMap_TextureOffset")); - if(instance.HasProperty("_LightMap_TextureScale")) - writer.WriteProperty("_LightMap_TextureScale", instance.GetTextureScale("_LightMap_TextureScale")); - if(instance.HasProperty("_DetailTex")) - writer.WriteProperty("_DetailTex", instance.GetTexture("_DetailTex")); - if(instance.HasProperty("_DetailTex_TextureOffset")) - writer.WriteProperty("_DetailTex_TextureOffset", instance.GetTextureOffset("_DetailTex_TextureOffset")); - if(instance.HasProperty("_DetailTex_TextureScale")) - writer.WriteProperty("_DetailTex_TextureScale", instance.GetTextureScale("_DetailTex_TextureScale")); - if(instance.HasProperty("_DetailBump")) - writer.WriteProperty("_DetailBump", instance.GetTexture("_DetailBump")); - if(instance.HasProperty("_DetailBump_TextureOffset")) - writer.WriteProperty("_DetailBump_TextureOffset", instance.GetTextureOffset("_DetailBump_TextureOffset")); - if(instance.HasProperty("_DetailBump_TextureScale")) - writer.WriteProperty("_DetailBump_TextureScale", instance.GetTextureScale("_DetailBump_TextureScale")); - if(instance.HasProperty("_Strength")) - writer.WriteProperty("_Strength", instance.GetFloat("_Strength")); - if(instance.HasProperty("_InvFade")) - writer.WriteProperty("_InvFade", instance.GetFloat("_InvFade")); - if(instance.HasProperty("_EmisColor")) - writer.WriteProperty("_EmisColor", instance.GetColor("_EmisColor")); - if(instance.HasProperty("_Parallax")) - writer.WriteProperty("_Parallax", instance.GetFloat("_Parallax")); - if(instance.HasProperty("_ParallaxMap")) - writer.WriteProperty("_ParallaxMap", instance.GetTexture("_ParallaxMap")); - if(instance.HasProperty("_ParallaxMap_TextureOffset")) - writer.WriteProperty("_ParallaxMap_TextureOffset", instance.GetTextureOffset("_ParallaxMap_TextureOffset")); - if(instance.HasProperty("_ParallaxMap_TextureScale")) - writer.WriteProperty("_ParallaxMap_TextureScale", instance.GetTextureScale("_ParallaxMap_TextureScale")); - if(instance.HasProperty("_DecalTex")) - writer.WriteProperty("_DecalTex", instance.GetTexture("_DecalTex")); - if(instance.HasProperty("_DecalTex_TextureOffset")) - writer.WriteProperty("_DecalTex_TextureOffset", instance.GetTextureOffset("_DecalTex_TextureOffset")); - if(instance.HasProperty("_DecalTex_TextureScale")) - writer.WriteProperty("_DecalTex_TextureScale", instance.GetTextureScale("_DecalTex_TextureScale")); - if(instance.HasProperty("_GlossMap")) - writer.WriteProperty("_GlossMap", instance.GetTexture("_GlossMap")); - if(instance.HasProperty("_GlossMap_TextureOffset")) - writer.WriteProperty("_GlossMap_TextureOffset", instance.GetTextureOffset("_GlossMap_TextureOffset")); - if(instance.HasProperty("_GlossMap_TextureScale")) - writer.WriteProperty("_GlossMap_TextureScale", instance.GetTextureScale("_GlossMap_TextureScale")); - if(instance.HasProperty("_ShadowOffset")) - writer.WriteProperty("_ShadowOffset", instance.GetTexture("_ShadowOffset")); - if(instance.HasProperty("_ShadowOffset_TextureOffset")) - writer.WriteProperty("_ShadowOffset_TextureOffset", instance.GetTextureOffset("_ShadowOffset_TextureOffset")); - if(instance.HasProperty("_ShadowOffset_TextureScale")) - writer.WriteProperty("_ShadowOffset_TextureScale", instance.GetTextureScale("_ShadowOffset_TextureScale")); - if(instance.HasProperty("_SunDisk")) - writer.WriteProperty("_SunDisk", instance.GetFloat("_SunDisk")); - if(instance.HasProperty("_SunSize")) - writer.WriteProperty("_SunSize", instance.GetFloat("_SunSize")); - if(instance.HasProperty("_AtmosphereThickness")) - writer.WriteProperty("_AtmosphereThickness", instance.GetFloat("_AtmosphereThickness")); - if(instance.HasProperty("_SkyTint")) - writer.WriteProperty("_SkyTint", instance.GetColor("_SkyTint")); - if(instance.HasProperty("_GroundColor")) - writer.WriteProperty("_GroundColor", instance.GetColor("_GroundColor")); - if(instance.HasProperty("_WireThickness")) - writer.WriteProperty("_WireThickness", instance.GetFloat("_WireThickness")); - if(instance.HasProperty("_ZWrite")) - writer.WriteProperty("_ZWrite", instance.GetFloat("_ZWrite")); - if(instance.HasProperty("_ZTest")) - writer.WriteProperty("_ZTest", instance.GetFloat("_ZTest")); - if(instance.HasProperty("_Cull")) - writer.WriteProperty("_Cull", instance.GetFloat("_Cull")); - if(instance.HasProperty("_ZBias")) - writer.WriteProperty("_ZBias", instance.GetFloat("_ZBias")); - if(instance.HasProperty("_HueVariation")) - writer.WriteProperty("_HueVariation", instance.GetColor("_HueVariation")); - if(instance.HasProperty("_WindQuality")) - writer.WriteProperty("_WindQuality", instance.GetFloat("_WindQuality")); - if(instance.HasProperty("_DetailMask")) - writer.WriteProperty("_DetailMask", instance.GetTexture("_DetailMask")); - if(instance.HasProperty("_DetailMask_TextureOffset")) - writer.WriteProperty("_DetailMask_TextureOffset", instance.GetTextureOffset("_DetailMask_TextureOffset")); - if(instance.HasProperty("_DetailMask_TextureScale")) - writer.WriteProperty("_DetailMask_TextureScale", instance.GetTextureScale("_DetailMask_TextureScale")); - if(instance.HasProperty("_MetallicTex")) - writer.WriteProperty("_MetallicTex", instance.GetTexture("_MetallicTex")); - if(instance.HasProperty("_MetallicTex_TextureOffset")) - writer.WriteProperty("_MetallicTex_TextureOffset", instance.GetTextureOffset("_MetallicTex_TextureOffset")); - if(instance.HasProperty("_MetallicTex_TextureScale")) - writer.WriteProperty("_MetallicTex_TextureScale", instance.GetTextureScale("_MetallicTex_TextureScale")); - if(instance.HasProperty("_Glossiness")) - writer.WriteProperty("_Glossiness", instance.GetFloat("_Glossiness")); - if(instance.HasProperty("_GlossMapScale")) - writer.WriteProperty("_GlossMapScale", instance.GetFloat("_GlossMapScale")); - if(instance.HasProperty("_SmoothnessTextureChannel")) - writer.WriteProperty("_SmoothnessTextureChannel", instance.GetFloat("_SmoothnessTextureChannel")); - if(instance.HasProperty("_Metallic")) - writer.WriteProperty("_Metallic", instance.GetFloat("_Metallic")); - if(instance.HasProperty("_MetallicGlossMap")) - writer.WriteProperty("_MetallicGlossMap", instance.GetTexture("_MetallicGlossMap")); - if(instance.HasProperty("_MetallicGlossMap_TextureOffset")) - writer.WriteProperty("_MetallicGlossMap_TextureOffset", instance.GetTextureOffset("_MetallicGlossMap_TextureOffset")); - if(instance.HasProperty("_MetallicGlossMap_TextureScale")) - writer.WriteProperty("_MetallicGlossMap_TextureScale", instance.GetTextureScale("_MetallicGlossMap_TextureScale")); - if(instance.HasProperty("_SpecularHighlights")) - writer.WriteProperty("_SpecularHighlights", instance.GetFloat("_SpecularHighlights")); - if(instance.HasProperty("_GlossyReflections")) - writer.WriteProperty("_GlossyReflections", instance.GetFloat("_GlossyReflections")); - if(instance.HasProperty("_BumpScale")) - writer.WriteProperty("_BumpScale", instance.GetFloat("_BumpScale")); - if(instance.HasProperty("_OcclusionStrength")) - writer.WriteProperty("_OcclusionStrength", instance.GetFloat("_OcclusionStrength")); - if(instance.HasProperty("_OcclusionMap")) - writer.WriteProperty("_OcclusionMap", instance.GetTexture("_OcclusionMap")); - if(instance.HasProperty("_OcclusionMap_TextureOffset")) - writer.WriteProperty("_OcclusionMap_TextureOffset", instance.GetTextureOffset("_OcclusionMap_TextureOffset")); - if(instance.HasProperty("_OcclusionMap_TextureScale")) - writer.WriteProperty("_OcclusionMap_TextureScale", instance.GetTextureScale("_OcclusionMap_TextureScale")); - if(instance.HasProperty("_EmissionColor")) - writer.WriteProperty("_EmissionColor", instance.GetColor("_EmissionColor")); - if(instance.HasProperty("_EmissionMap")) - writer.WriteProperty("_EmissionMap", instance.GetTexture("_EmissionMap")); - if(instance.HasProperty("_EmissionMap_TextureOffset")) - writer.WriteProperty("_EmissionMap_TextureOffset", instance.GetTextureOffset("_EmissionMap_TextureOffset")); - if(instance.HasProperty("_EmissionMap_TextureScale")) - writer.WriteProperty("_EmissionMap_TextureScale", instance.GetTextureScale("_EmissionMap_TextureScale")); - if(instance.HasProperty("_DetailAlbedoMap")) - writer.WriteProperty("_DetailAlbedoMap", instance.GetTexture("_DetailAlbedoMap")); - if(instance.HasProperty("_DetailAlbedoMap_TextureOffset")) - writer.WriteProperty("_DetailAlbedoMap_TextureOffset", instance.GetTextureOffset("_DetailAlbedoMap_TextureOffset")); - if(instance.HasProperty("_DetailAlbedoMap_TextureScale")) - writer.WriteProperty("_DetailAlbedoMap_TextureScale", instance.GetTextureScale("_DetailAlbedoMap_TextureScale")); - if(instance.HasProperty("_DetailNormalMapScale")) - writer.WriteProperty("_DetailNormalMapScale", instance.GetFloat("_DetailNormalMapScale")); - if(instance.HasProperty("_DetailNormalMap")) - writer.WriteProperty("_DetailNormalMap", instance.GetTexture("_DetailNormalMap")); - if(instance.HasProperty("_DetailNormalMap_TextureOffset")) - writer.WriteProperty("_DetailNormalMap_TextureOffset", instance.GetTextureOffset("_DetailNormalMap_TextureOffset")); - if(instance.HasProperty("_DetailNormalMap_TextureScale")) - writer.WriteProperty("_DetailNormalMap_TextureScale", instance.GetTextureScale("_DetailNormalMap_TextureScale")); - if(instance.HasProperty("_UVSec")) - writer.WriteProperty("_UVSec", instance.GetFloat("_UVSec")); - if(instance.HasProperty("_Mode")) - writer.WriteProperty("_Mode", instance.GetFloat("_Mode")); - if(instance.HasProperty("_TintColor")) - writer.WriteProperty("_TintColor", instance.GetColor("_TintColor")); - if(instance.HasProperty("_WavingTint")) - writer.WriteProperty("_WavingTint", instance.GetColor("_WavingTint")); - if(instance.HasProperty("_WaveAndDistance")) - writer.WriteProperty("_WaveAndDistance", instance.GetVector("_WaveAndDistance")); - if(instance.HasProperty("_LightTexture0")) - writer.WriteProperty("_LightTexture0", instance.GetTexture("_LightTexture0")); - if(instance.HasProperty("_LightTexture0_TextureOffset")) - writer.WriteProperty("_LightTexture0_TextureOffset", instance.GetTextureOffset("_LightTexture0_TextureOffset")); - if(instance.HasProperty("_LightTexture0_TextureScale")) - writer.WriteProperty("_LightTexture0_TextureScale", instance.GetTextureScale("_LightTexture0_TextureScale")); - if(instance.HasProperty("_LightTextureB0")) - writer.WriteProperty("_LightTextureB0", instance.GetTexture("_LightTextureB0")); - if(instance.HasProperty("_LightTextureB0_TextureOffset")) - writer.WriteProperty("_LightTextureB0_TextureOffset", instance.GetTextureOffset("_LightTextureB0_TextureOffset")); - if(instance.HasProperty("_LightTextureB0_TextureScale")) - writer.WriteProperty("_LightTextureB0_TextureScale", instance.GetTextureScale("_LightTextureB0_TextureScale")); - if(instance.HasProperty("_ShadowMapTexture")) - writer.WriteProperty("_ShadowMapTexture", instance.GetTexture("_ShadowMapTexture")); - if(instance.HasProperty("_ShadowMapTexture_TextureOffset")) - writer.WriteProperty("_ShadowMapTexture_TextureOffset", instance.GetTextureOffset("_ShadowMapTexture_TextureOffset")); - if(instance.HasProperty("_ShadowMapTexture_TextureScale")) - writer.WriteProperty("_ShadowMapTexture_TextureScale", instance.GetTextureScale("_ShadowMapTexture_TextureScale")); - if(instance.HasProperty("_SecondTex")) - writer.WriteProperty("_SecondTex", instance.GetTexture("_SecondTex")); - if(instance.HasProperty("_SecondTex_TextureOffset")) - writer.WriteProperty("_SecondTex_TextureOffset", instance.GetTextureOffset("_SecondTex_TextureOffset")); - if(instance.HasProperty("_SecondTex_TextureScale")) - writer.WriteProperty("_SecondTex_TextureScale", instance.GetTextureScale("_SecondTex_TextureScale")); - if(instance.HasProperty("_ThirdTex")) - writer.WriteProperty("_ThirdTex", instance.GetTexture("_ThirdTex")); - if(instance.HasProperty("_ThirdTex_TextureOffset")) - writer.WriteProperty("_ThirdTex_TextureOffset", instance.GetTextureOffset("_ThirdTex_TextureOffset")); - if(instance.HasProperty("_ThirdTex_TextureScale")) - writer.WriteProperty("_ThirdTex_TextureScale", instance.GetTextureScale("_ThirdTex_TextureScale")); - if(instance.HasProperty("PixelSnap")) - writer.WriteProperty("PixelSnap", instance.GetFloat("PixelSnap")); - if(instance.HasProperty("_RendererColor")) - writer.WriteProperty("_RendererColor", instance.GetColor("_RendererColor")); - if(instance.HasProperty("_Flip")) - writer.WriteProperty("_Flip", instance.GetVector("_Flip")); - if(instance.HasProperty("_AlphaTex")) - writer.WriteProperty("_AlphaTex", instance.GetTexture("_AlphaTex")); - if(instance.HasProperty("_AlphaTex_TextureOffset")) - writer.WriteProperty("_AlphaTex_TextureOffset", instance.GetTextureOffset("_AlphaTex_TextureOffset")); - if(instance.HasProperty("_AlphaTex_TextureScale")) - writer.WriteProperty("_AlphaTex_TextureScale", instance.GetTextureScale("_AlphaTex_TextureScale")); - if(instance.HasProperty("_EnableExternalAlpha")) - writer.WriteProperty("_EnableExternalAlpha", instance.GetFloat("_EnableExternalAlpha")); - if(instance.HasProperty("_Level")) - writer.WriteProperty("_Level", instance.GetFloat("_Level")); - if(instance.HasProperty("_SpecGlossMap")) - writer.WriteProperty("_SpecGlossMap", instance.GetTexture("_SpecGlossMap")); - if(instance.HasProperty("_SpecGlossMap_TextureOffset")) - writer.WriteProperty("_SpecGlossMap_TextureOffset", instance.GetTextureOffset("_SpecGlossMap_TextureOffset")); - if(instance.HasProperty("_SpecGlossMap_TextureScale")) - writer.WriteProperty("_SpecGlossMap_TextureScale", instance.GetTextureScale("_SpecGlossMap_TextureScale")); - if(instance.HasProperty("_FrontTex")) - writer.WriteProperty("_FrontTex", instance.GetTexture("_FrontTex")); - if(instance.HasProperty("_FrontTex_TextureOffset")) - writer.WriteProperty("_FrontTex_TextureOffset", instance.GetTextureOffset("_FrontTex_TextureOffset")); - if(instance.HasProperty("_FrontTex_TextureScale")) - writer.WriteProperty("_FrontTex_TextureScale", instance.GetTextureScale("_FrontTex_TextureScale")); - if(instance.HasProperty("_BackTex")) - writer.WriteProperty("_BackTex", instance.GetTexture("_BackTex")); - if(instance.HasProperty("_BackTex_TextureOffset")) - writer.WriteProperty("_BackTex_TextureOffset", instance.GetTextureOffset("_BackTex_TextureOffset")); - if(instance.HasProperty("_BackTex_TextureScale")) - writer.WriteProperty("_BackTex_TextureScale", instance.GetTextureScale("_BackTex_TextureScale")); - if(instance.HasProperty("_LeftTex")) - writer.WriteProperty("_LeftTex", instance.GetTexture("_LeftTex")); - if(instance.HasProperty("_LeftTex_TextureOffset")) - writer.WriteProperty("_LeftTex_TextureOffset", instance.GetTextureOffset("_LeftTex_TextureOffset")); - if(instance.HasProperty("_LeftTex_TextureScale")) - writer.WriteProperty("_LeftTex_TextureScale", instance.GetTextureScale("_LeftTex_TextureScale")); - if(instance.HasProperty("_RightTex")) - writer.WriteProperty("_RightTex", instance.GetTexture("_RightTex")); - if(instance.HasProperty("_RightTex_TextureOffset")) - writer.WriteProperty("_RightTex_TextureOffset", instance.GetTextureOffset("_RightTex_TextureOffset")); - if(instance.HasProperty("_RightTex_TextureScale")) - writer.WriteProperty("_RightTex_TextureScale", instance.GetTextureScale("_RightTex_TextureScale")); - if(instance.HasProperty("_UpTex")) - writer.WriteProperty("_UpTex", instance.GetTexture("_UpTex")); - if(instance.HasProperty("_UpTex_TextureOffset")) - writer.WriteProperty("_UpTex_TextureOffset", instance.GetTextureOffset("_UpTex_TextureOffset")); - if(instance.HasProperty("_UpTex_TextureScale")) - writer.WriteProperty("_UpTex_TextureScale", instance.GetTextureScale("_UpTex_TextureScale")); - if(instance.HasProperty("_DownTex")) - writer.WriteProperty("_DownTex", instance.GetTexture("_DownTex")); - if(instance.HasProperty("_DownTex_TextureOffset")) - writer.WriteProperty("_DownTex_TextureOffset", instance.GetTextureOffset("_DownTex_TextureOffset")); - if(instance.HasProperty("_DownTex_TextureScale")) - writer.WriteProperty("_DownTex_TextureScale", instance.GetTextureScale("_DownTex_TextureScale")); - if(instance.HasProperty("_Metallic0")) - writer.WriteProperty("_Metallic0", instance.GetFloat("_Metallic0")); - if(instance.HasProperty("_Metallic1")) - writer.WriteProperty("_Metallic1", instance.GetFloat("_Metallic1")); - if(instance.HasProperty("_Metallic2")) - writer.WriteProperty("_Metallic2", instance.GetFloat("_Metallic2")); - if(instance.HasProperty("_Metallic3")) - writer.WriteProperty("_Metallic3", instance.GetFloat("_Metallic3")); - if(instance.HasProperty("_Smoothness0")) - writer.WriteProperty("_Smoothness0", instance.GetFloat("_Smoothness0")); - if(instance.HasProperty("_Smoothness1")) - writer.WriteProperty("_Smoothness1", instance.GetFloat("_Smoothness1")); - if(instance.HasProperty("_Smoothness2")) - writer.WriteProperty("_Smoothness2", instance.GetFloat("_Smoothness2")); - if(instance.HasProperty("_Smoothness3")) - writer.WriteProperty("_Smoothness3", instance.GetFloat("_Smoothness3")); - if(instance.HasProperty("_TexA")) - writer.WriteProperty("_TexA", instance.GetTexture("_TexA")); - if(instance.HasProperty("_TexA_TextureOffset")) - writer.WriteProperty("_TexA_TextureOffset", instance.GetTextureOffset("_TexA_TextureOffset")); - if(instance.HasProperty("_TexA_TextureScale")) - writer.WriteProperty("_TexA_TextureScale", instance.GetTextureScale("_TexA_TextureScale")); - if(instance.HasProperty("_TexB")) - writer.WriteProperty("_TexB", instance.GetTexture("_TexB")); - if(instance.HasProperty("_TexB_TextureOffset")) - writer.WriteProperty("_TexB_TextureOffset", instance.GetTextureOffset("_TexB_TextureOffset")); - if(instance.HasProperty("_TexB_TextureScale")) - writer.WriteProperty("_TexB_TextureScale", instance.GetTextureScale("_TexB_TextureScale")); - if(instance.HasProperty("_value")) - writer.WriteProperty("_value", instance.GetFloat("_value")); - if(instance.HasProperty("_Texel")) - writer.WriteProperty("_Texel", instance.GetFloat("_Texel")); - if(instance.HasProperty("_Detail")) - writer.WriteProperty("_Detail", instance.GetTexture("_Detail")); - if(instance.HasProperty("_Detail_TextureOffset")) - writer.WriteProperty("_Detail_TextureOffset", instance.GetTextureOffset("_Detail_TextureOffset")); - if(instance.HasProperty("_Detail_TextureScale")) - writer.WriteProperty("_Detail_TextureScale", instance.GetTextureScale("_Detail_TextureScale")); - if(instance.HasProperty("_HalfOverCutoff")) - writer.WriteProperty("_HalfOverCutoff", instance.GetFloat("_HalfOverCutoff")); - #endif - } - } - - protected override object ReadUnityObject(ES3Reader reader) - { - var obj = new Material(Shader.Find("Diffuse")); - ReadUnityObject(reader, obj); - return obj; - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Material)obj; - -#if UNITY_2019_3_OR_NEWER - - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - case "name": - instance.name = reader.Read(ES3Type_string.Instance); - break; - case "shader": - instance.shader = reader.Read(ES3Type_Shader.Instance); - break; - case "renderQueue": - instance.renderQueue = reader.Read(ES3Type_int.Instance); - break; - case "shaderKeywords": - var keywords = reader.Read(); - foreach (var keyword in keywords) - instance.EnableKeyword(keyword); - break; - case "globalIlluminationFlags": - instance.globalIlluminationFlags = reader.Read(); - break; - case "_MainTex_Scale": - instance.SetTextureScale("_MainTex", reader.Read()); - break; - default: - var propertyIndex = -1; - if (instance.shader != null && instance.HasProperty(propertyName) && (propertyIndex = instance.shader.FindPropertyIndex(propertyName)) != -1) - { - var propertyType = instance.shader.GetPropertyType(propertyIndex); - - switch (propertyType) - { - case UnityEngine.Rendering.ShaderPropertyType.Color: - instance.SetColor(propertyName, reader.Read()); - break; - case UnityEngine.Rendering.ShaderPropertyType.Float: - case UnityEngine.Rendering.ShaderPropertyType.Range: - instance.SetFloat(propertyName, reader.Read()); - break; - case UnityEngine.Rendering.ShaderPropertyType.Texture: - instance.SetTexture(propertyName, reader.Read()); - break; - case UnityEngine.Rendering.ShaderPropertyType.Vector: - instance.SetColor(propertyName, reader.Read()); - break; - } - } - else if (propertyName.EndsWith("_TextureScale")) - instance.SetTextureScale(propertyName.Split(new string[] { "_TextureScale" }, StringSplitOptions.None)[0], reader.Read()); - else if (propertyName.EndsWith("_TextureOffset")) - instance.SetTextureOffset(propertyName.Split(new string[] { "_TextureOffset" }, StringSplitOptions.None)[0], reader.Read()); - - reader.Skip(); - break; - } - } -#else - - foreach (string propertyName in reader.Properties) - { - switch(propertyName) - { - case "name": - instance.name = reader.Read(ES3Type_string.Instance); - break; - case "shader": - instance.shader = reader.Read(ES3Type_Shader.Instance); - break; - case "renderQueue": - instance.renderQueue = reader.Read(ES3Type_int.Instance); - break; - case "shaderKeywords": - instance.shaderKeywords = reader.Read(); - break; - case "globalIlluminationFlags": - instance.globalIlluminationFlags = reader.Read(); - break; - case "_Color": - instance.SetColor("_Color", reader.Read()); - break; - case "_SpecColor": - instance.SetColor("_SpecColor", reader.Read()); - break; - case "_Shininess": - instance.SetFloat("_Shininess", reader.Read()); - break; - case "_MainTex": - instance.SetTexture("_MainTex", reader.Read()); - break; - case "_MainTex_TextureOffset": - instance.SetTextureOffset("_MainTex_TextureOffset", reader.Read()); - break; - case "_MainTex_TextureScale": - instance.SetTextureScale("_MainTex_TextureScale", reader.Read()); - break; - case "_Illum": - instance.SetTexture("_Illum", reader.Read()); - break; - case "_Illum_TextureOffset": - instance.SetTextureOffset("_Illum_TextureOffset", reader.Read()); - break; - case "_Illum_TextureScale": - instance.SetTextureScale("_Illum_TextureScale", reader.Read()); - break; - case "_BumpMap": - instance.SetTexture("_BumpMap", reader.Read()); - break; - case "_BumpMap_TextureOffset": - instance.SetTextureOffset("_BumpMap_TextureOffset", reader.Read()); - break; - case "_BumpMap_TextureScale": - instance.SetTextureScale("_BumpMap_TextureScale", reader.Read()); - break; - case "_Emission": - instance.SetFloat("_Emission", reader.Read()); - break; - case "_Specular": - instance.SetColor("_Specular", reader.Read()); - break; - case "_MainBump": - instance.SetTexture("_MainBump", reader.Read()); - break; - case "_MainBump_TextureOffset": - instance.SetTextureOffset("_MainBump_TextureOffset", reader.Read()); - break; - case "_MainBump_TextureScale": - instance.SetTextureScale("_MainBump_TextureScale", reader.Read()); - break; - case "_Mask": - instance.SetTexture("_Mask", reader.Read()); - break; - case "_Mask_TextureOffset": - instance.SetTextureOffset("_Mask_TextureOffset", reader.Read()); - break; - case "_Mask_TextureScale": - instance.SetTextureScale("_Mask_TextureScale", reader.Read()); - break; - case "_Focus": - instance.SetFloat("_Focus", reader.Read()); - break; - case "_StencilComp": - instance.SetFloat("_StencilComp", reader.Read()); - break; - case "_Stencil": - instance.SetFloat("_Stencil", reader.Read()); - break; - case "_StencilOp": - instance.SetFloat("_StencilOp", reader.Read()); - break; - case "_StencilWriteMask": - instance.SetFloat("_StencilWriteMask", reader.Read()); - break; - case "_StencilReadMask": - instance.SetFloat("_StencilReadMask", reader.Read()); - break; - case "_ColorMask": - instance.SetFloat("_ColorMask", reader.Read()); - break; - case "_UseUIAlphaClip": - instance.SetFloat("_UseUIAlphaClip", reader.Read()); - break; - case "_SrcBlend": - instance.SetFloat("_SrcBlend", reader.Read()); - break; - case "_DstBlend": - instance.SetFloat("_DstBlend", reader.Read()); - break; - case "_ReflectColor": - instance.SetColor("_ReflectColor", reader.Read()); - break; - case "_Cube": - instance.SetTexture("_Cube", reader.Read()); - break; - case "_Cube_TextureOffset": - instance.SetTextureOffset("_Cube_TextureOffset", reader.Read()); - break; - case "_Cube_TextureScale": - instance.SetTextureScale("_Cube_TextureScale", reader.Read()); - break; - case "_Tint": - instance.SetColor("_Tint", reader.Read()); - break; - case "_Exposure": - instance.SetFloat("_Exposure", reader.Read()); - break; - case "_Rotation": - instance.SetFloat("_Rotation", reader.Read()); - break; - case "_Tex": - instance.SetTexture("_Tex", reader.Read()); - break; - case "_Tex_TextureOffset": - instance.SetTextureOffset("_Tex_TextureOffset", reader.Read()); - break; - case "_Tex_TextureScale": - instance.SetTextureScale("_Tex_TextureScale", reader.Read()); - break; - case "_MainTex_Scale": - instance.SetTextureScale("_MainTex", reader.Read()); - break; - case "_Control": - instance.SetTexture("_Control", reader.Read()); - break; - case "_Control_TextureOffset": - instance.SetTextureOffset("_Control_TextureOffset", reader.Read()); - break; - case "_Control_TextureScale": - instance.SetTextureScale("_Control_TextureScale", reader.Read()); - break; - case "_Splat3": - instance.SetTexture("_Splat3", reader.Read()); - break; - case "_Splat3_TextureOffset": - instance.SetTextureOffset("_Splat3_TextureOffset", reader.Read()); - break; - case "_Splat3_TextureScale": - instance.SetTextureScale("_Splat3_TextureScale", reader.Read()); - break; - case "_Splat2": - instance.SetTexture("_Splat2", reader.Read()); - break; - case "_Splat2_TextureOffset": - instance.SetTextureOffset("_Splat2_TextureOffset", reader.Read()); - break; - case "_Splat2_TextureScale": - instance.SetTextureScale("_Splat2_TextureScale", reader.Read()); - break; - case "_Splat1": - instance.SetTexture("_Splat1", reader.Read()); - break; - case "_Splat1_TextureOffset": - instance.SetTextureOffset("_Splat1_TextureOffset", reader.Read()); - break; - case "_Splat1_TextureScale": - instance.SetTextureScale("_Splat1_TextureScale", reader.Read()); - break; - case "_Splat0": - instance.SetTexture("_Splat0", reader.Read()); - break; - case "_Splat0_TextureOffset": - instance.SetTextureOffset("_Splat0_TextureOffset", reader.Read()); - break; - case "_Splat0_TextureScale": - instance.SetTextureScale("_Splat0_TextureScale", reader.Read()); - break; - case "_Normal3": - instance.SetTexture("_Normal3", reader.Read()); - break; - case "_Normal3_TextureOffset": - instance.SetTextureOffset("_Normal3_TextureOffset", reader.Read()); - break; - case "_Normal3_TextureScale": - instance.SetTextureScale("_Normal3_TextureScale", reader.Read()); - break; - case "_Normal2": - instance.SetTexture("_Normal2", reader.Read()); - break; - case "_Normal2_TextureOffset": - instance.SetTextureOffset("_Normal2_TextureOffset", reader.Read()); - break; - case "_Normal2_TextureScale": - instance.SetTextureScale("_Normal2_TextureScale", reader.Read()); - break; - case "_Normal1": - instance.SetTexture("_Normal1", reader.Read()); - break; - case "_Normal1_TextureOffset": - instance.SetTextureOffset("_Normal1_TextureOffset", reader.Read()); - break; - case "_Normal1_TextureScale": - instance.SetTextureScale("_Normal1_TextureScale", reader.Read()); - break; - case "_Normal0": - instance.SetTexture("_Normal0", reader.Read()); - break; - case "_Normal0_TextureOffset": - instance.SetTextureOffset("_Normal0_TextureOffset", reader.Read()); - break; - case "_Normal0_TextureScale": - instance.SetTextureScale("_Normal0_TextureScale", reader.Read()); - break; - case "_Cutoff": - instance.SetFloat("_Cutoff", reader.Read()); - break; - case "_BaseLight": - instance.SetFloat("_BaseLight", reader.Read()); - break; - case "_AO": - instance.SetFloat("_AO", reader.Read()); - break; - case "_Occlusion": - instance.SetFloat("_Occlusion", reader.Read()); - break; - case "_TreeInstanceColor": - instance.SetVector("_TreeInstanceColor", reader.Read()); - break; - case "_TreeInstanceScale": - instance.SetVector("_TreeInstanceScale", reader.Read()); - break; - case "_SquashAmount": - instance.SetFloat("_SquashAmount", reader.Read()); - break; - case "_TranslucencyColor": - instance.SetColor("_TranslucencyColor", reader.Read()); - break; - case "_TranslucencyViewDependency": - instance.SetFloat("_TranslucencyViewDependency", reader.Read()); - break; - case "_ShadowStrength": - instance.SetFloat("_ShadowStrength", reader.Read()); - break; - case "_ShadowOffsetScale": - instance.SetFloat("_ShadowOffsetScale", reader.Read()); - break; - case "_ShadowTex": - instance.SetTexture("_ShadowTex", reader.Read()); - break; - case "_ShadowTex_TextureOffset": - instance.SetTextureOffset("_ShadowTex_TextureOffset", reader.Read()); - break; - case "_ShadowTex_TextureScale": - instance.SetTextureScale("_ShadowTex_TextureScale", reader.Read()); - break; - case "_BumpSpecMap": - instance.SetTexture("_BumpSpecMap", reader.Read()); - break; - case "_BumpSpecMap_TextureOffset": - instance.SetTextureOffset("_BumpSpecMap_TextureOffset", reader.Read()); - break; - case "_BumpSpecMap_TextureScale": - instance.SetTextureScale("_BumpSpecMap_TextureScale", reader.Read()); - break; - case "_TranslucencyMap": - instance.SetTexture("_TranslucencyMap", reader.Read()); - break; - case "_TranslucencyMap_TextureOffset": - instance.SetTextureOffset("_TranslucencyMap_TextureOffset", reader.Read()); - break; - case "_TranslucencyMap_TextureScale": - instance.SetTextureScale("_TranslucencyMap_TextureScale", reader.Read()); - break; - case "_LightMap": - instance.SetTexture("_LightMap", reader.Read()); - break; - case "_LightMap_TextureOffset": - instance.SetTextureOffset("_LightMap_TextureOffset", reader.Read()); - break; - case "_LightMap_TextureScale": - instance.SetTextureScale("_LightMap_TextureScale", reader.Read()); - break; - case "_DetailTex": - instance.SetTexture("_DetailTex", reader.Read()); - break; - case "_DetailTex_TextureOffset": - instance.SetTextureOffset("_DetailTex_TextureOffset", reader.Read()); - break; - case "_DetailTex_TextureScale": - instance.SetTextureScale("_DetailTex_TextureScale", reader.Read()); - break; - case "_DetailBump": - instance.SetTexture("_DetailBump", reader.Read()); - break; - case "_DetailBump_TextureOffset": - instance.SetTextureOffset("_DetailBump_TextureOffset", reader.Read()); - break; - case "_DetailBump_TextureScale": - instance.SetTextureScale("_DetailBump_TextureScale", reader.Read()); - break; - case "_Strength": - instance.SetFloat("_Strength", reader.Read()); - break; - case "_InvFade": - instance.SetFloat("_InvFade", reader.Read()); - break; - case "_EmisColor": - instance.SetColor("_EmisColor", reader.Read()); - break; - case "_Parallax": - instance.SetFloat("_Parallax", reader.Read()); - break; - case "_ParallaxMap": - instance.SetTexture("_ParallaxMap", reader.Read()); - break; - case "_ParallaxMap_TextureOffset": - instance.SetTextureOffset("_ParallaxMap_TextureOffset", reader.Read()); - break; - case "_ParallaxMap_TextureScale": - instance.SetTextureScale("_ParallaxMap_TextureScale", reader.Read()); - break; - case "_DecalTex": - instance.SetTexture("_DecalTex", reader.Read()); - break; - case "_DecalTex_TextureOffset": - instance.SetTextureOffset("_DecalTex_TextureOffset", reader.Read()); - break; - case "_DecalTex_TextureScale": - instance.SetTextureScale("_DecalTex_TextureScale", reader.Read()); - break; - case "_GlossMap": - instance.SetTexture("_GlossMap", reader.Read()); - break; - case "_GlossMap_TextureOffset": - instance.SetTextureOffset("_GlossMap_TextureOffset", reader.Read()); - break; - case "_GlossMap_TextureScale": - instance.SetTextureScale("_GlossMap_TextureScale", reader.Read()); - break; - case "_ShadowOffset": - instance.SetTexture("_ShadowOffset", reader.Read()); - break; - case "_ShadowOffset_TextureOffset": - instance.SetTextureOffset("_ShadowOffset_TextureOffset", reader.Read()); - break; - case "_ShadowOffset_TextureScale": - instance.SetTextureScale("_ShadowOffset_TextureScale", reader.Read()); - break; - case "_SunDisk": - instance.SetFloat("_SunDisk", reader.Read()); - break; - case "_SunSize": - instance.SetFloat("_SunSize", reader.Read()); - break; - case "_AtmosphereThickness": - instance.SetFloat("_AtmosphereThickness", reader.Read()); - break; - case "_SkyTint": - instance.SetColor("_SkyTint", reader.Read()); - break; - case "_GroundColor": - instance.SetColor("_GroundColor", reader.Read()); - break; - case "_WireThickness": - instance.SetFloat("_WireThickness", reader.Read()); - break; - case "_ZWrite": - instance.SetFloat("_ZWrite", reader.Read()); - break; - case "_ZTest": - instance.SetFloat("_ZTest", reader.Read()); - break; - case "_Cull": - instance.SetFloat("_Cull", reader.Read()); - break; - case "_ZBias": - instance.SetFloat("_ZBias", reader.Read()); - break; - case "_HueVariation": - instance.SetColor("_HueVariation", reader.Read()); - break; - case "_WindQuality": - instance.SetFloat("_WindQuality", reader.Read()); - break; - case "_DetailMask": - instance.SetTexture("_DetailMask", reader.Read()); - break; - case "_DetailMask_TextureOffset": - instance.SetTextureOffset("_DetailMask_TextureOffset", reader.Read()); - break; - case "_DetailMask_TextureScale": - instance.SetTextureScale("_DetailMask_TextureScale", reader.Read()); - break; - case "_MetallicTex": - instance.SetTexture("_MetallicTex", reader.Read()); - break; - case "_MetallicTex_TextureOffset": - instance.SetTextureOffset("_MetallicTex_TextureOffset", reader.Read()); - break; - case "_MetallicTex_TextureScale": - instance.SetTextureScale("_MetallicTex_TextureScale", reader.Read()); - break; - case "_Glossiness": - instance.SetFloat("_Glossiness", reader.Read()); - break; - case "_GlossMapScale": - instance.SetFloat("_GlossMapScale", reader.Read()); - break; - case "_SmoothnessTextureChannel": - instance.SetFloat("_SmoothnessTextureChannel", reader.Read()); - break; - case "_Metallic": - instance.SetFloat("_Metallic", reader.Read()); - break; - case "_MetallicGlossMap": - instance.SetTexture("_MetallicGlossMap", reader.Read()); - break; - case "_MetallicGlossMap_TextureOffset": - instance.SetTextureOffset("_MetallicGlossMap_TextureOffset", reader.Read()); - break; - case "_MetallicGlossMap_TextureScale": - instance.SetTextureScale("_MetallicGlossMap_TextureScale", reader.Read()); - break; - case "_SpecularHighlights": - instance.SetFloat("_SpecularHighlights", reader.Read()); - break; - case "_GlossyReflections": - instance.SetFloat("_GlossyReflections", reader.Read()); - break; - case "_BumpScale": - instance.SetFloat("_BumpScale", reader.Read()); - break; - case "_OcclusionStrength": - instance.SetFloat("_OcclusionStrength", reader.Read()); - break; - case "_OcclusionMap": - instance.SetTexture("_OcclusionMap", reader.Read()); - break; - case "_OcclusionMap_TextureOffset": - instance.SetTextureOffset("_OcclusionMap_TextureOffset", reader.Read()); - break; - case "_OcclusionMap_TextureScale": - instance.SetTextureScale("_OcclusionMap_TextureScale", reader.Read()); - break; - case "_EmissionColor": - instance.SetColor("_EmissionColor", reader.Read()); - break; - case "_EmissionMap": - instance.SetTexture("_EmissionMap", reader.Read()); - break; - case "_EmissionMap_TextureOffset": - instance.SetTextureOffset("_EmissionMap_TextureOffset", reader.Read()); - break; - case "_EmissionMap_TextureScale": - instance.SetTextureScale("_EmissionMap_TextureScale", reader.Read()); - break; - case "_DetailAlbedoMap": - instance.SetTexture("_DetailAlbedoMap", reader.Read()); - break; - case "_DetailAlbedoMap_TextureOffset": - instance.SetTextureOffset("_DetailAlbedoMap_TextureOffset", reader.Read()); - break; - case "_DetailAlbedoMap_TextureScale": - instance.SetTextureScale("_DetailAlbedoMap_TextureScale", reader.Read()); - break; - case "_DetailNormalMapScale": - instance.SetFloat("_DetailNormalMapScale", reader.Read()); - break; - case "_DetailNormalMap": - instance.SetTexture("_DetailNormalMap", reader.Read()); - break; - case "_DetailNormalMap_TextureOffset": - instance.SetTextureOffset("_DetailNormalMap_TextureOffset", reader.Read()); - break; - case "_DetailNormalMap_TextureScale": - instance.SetTextureScale("_DetailNormalMap_TextureScale", reader.Read()); - break; - case "_UVSec": - instance.SetFloat("_UVSec", reader.Read()); - break; - case "_Mode": - instance.SetFloat("_Mode", reader.Read()); - break; - case "_TintColor": - instance.SetColor("_TintColor", reader.Read()); - break; - case "_WavingTint": - instance.SetColor("_WavingTint", reader.Read()); - break; - case "_WaveAndDistance": - instance.SetVector("_WaveAndDistance", reader.Read()); - break; - case "_LightTexture0": - instance.SetTexture("_LightTexture0", reader.Read()); - break; - case "_LightTexture0_TextureOffset": - instance.SetTextureOffset("_LightTexture0_TextureOffset", reader.Read()); - break; - case "_LightTexture0_TextureScale": - instance.SetTextureScale("_LightTexture0_TextureScale", reader.Read()); - break; - case "_LightTextureB0": - instance.SetTexture("_LightTextureB0", reader.Read()); - break; - case "_LightTextureB0_TextureOffset": - instance.SetTextureOffset("_LightTextureB0_TextureOffset", reader.Read()); - break; - case "_LightTextureB0_TextureScale": - instance.SetTextureScale("_LightTextureB0_TextureScale", reader.Read()); - break; - case "_ShadowMapTexture": - instance.SetTexture("_ShadowMapTexture", reader.Read()); - break; - case "_ShadowMapTexture_TextureOffset": - instance.SetTextureOffset("_ShadowMapTexture_TextureOffset", reader.Read()); - break; - case "_ShadowMapTexture_TextureScale": - instance.SetTextureScale("_ShadowMapTexture_TextureScale", reader.Read()); - break; - case "_SecondTex": - instance.SetTexture("_SecondTex", reader.Read()); - break; - case "_SecondTex_TextureOffset": - instance.SetTextureOffset("_SecondTex_TextureOffset", reader.Read()); - break; - case "_SecondTex_TextureScale": - instance.SetTextureScale("_SecondTex_TextureScale", reader.Read()); - break; - case "_ThirdTex": - instance.SetTexture("_ThirdTex", reader.Read()); - break; - case "_ThirdTex_TextureOffset": - instance.SetTextureOffset("_ThirdTex_TextureOffset", reader.Read()); - break; - case "_ThirdTex_TextureScale": - instance.SetTextureScale("_ThirdTex_TextureScale", reader.Read()); - break; - case "PixelSnap": - instance.SetFloat("PixelSnap", reader.Read()); - break; - case "_RendererColor": - instance.SetColor("_RendererColor", reader.Read()); - break; - case "_Flip": - instance.SetVector("_Flip", reader.Read()); - break; - case "_AlphaTex": - instance.SetTexture("_AlphaTex", reader.Read()); - break; - case "_AlphaTex_TextureOffset": - instance.SetTextureOffset("_AlphaTex_TextureOffset", reader.Read()); - break; - case "_AlphaTex_TextureScale": - instance.SetTextureScale("_AlphaTex_TextureScale", reader.Read()); - break; - case "_EnableExternalAlpha": - instance.SetFloat("_EnableExternalAlpha", reader.Read()); - break; - case "_Level": - instance.SetFloat("_Level", reader.Read()); - break; - case "_SpecGlossMap": - instance.SetTexture("_SpecGlossMap", reader.Read()); - break; - case "_SpecGlossMap_TextureOffset": - instance.SetTextureOffset("_SpecGlossMap_TextureOffset", reader.Read()); - break; - case "_SpecGlossMap_TextureScale": - instance.SetTextureScale("_SpecGlossMap_TextureScale", reader.Read()); - break; - case "_FrontTex": - instance.SetTexture("_FrontTex", reader.Read()); - break; - case "_FrontTex_TextureOffset": - instance.SetTextureOffset("_FrontTex_TextureOffset", reader.Read()); - break; - case "_FrontTex_TextureScale": - instance.SetTextureScale("_FrontTex_TextureScale", reader.Read()); - break; - case "_BackTex": - instance.SetTexture("_BackTex", reader.Read()); - break; - case "_BackTex_TextureOffset": - instance.SetTextureOffset("_BackTex_TextureOffset", reader.Read()); - break; - case "_BackTex_TextureScale": - instance.SetTextureScale("_BackTex_TextureScale", reader.Read()); - break; - case "_LeftTex": - instance.SetTexture("_LeftTex", reader.Read()); - break; - case "_LeftTex_TextureOffset": - instance.SetTextureOffset("_LeftTex_TextureOffset", reader.Read()); - break; - case "_LeftTex_TextureScale": - instance.SetTextureScale("_LeftTex_TextureScale", reader.Read()); - break; - case "_RightTex": - instance.SetTexture("_RightTex", reader.Read()); - break; - case "_RightTex_TextureOffset": - instance.SetTextureOffset("_RightTex_TextureOffset", reader.Read()); - break; - case "_RightTex_TextureScale": - instance.SetTextureScale("_RightTex_TextureScale", reader.Read()); - break; - case "_UpTex": - instance.SetTexture("_UpTex", reader.Read()); - break; - case "_UpTex_TextureOffset": - instance.SetTextureOffset("_UpTex_TextureOffset", reader.Read()); - break; - case "_UpTex_TextureScale": - instance.SetTextureScale("_UpTex_TextureScale", reader.Read()); - break; - case "_DownTex": - instance.SetTexture("_DownTex", reader.Read()); - break; - case "_DownTex_TextureOffset": - instance.SetTextureOffset("_DownTex_TextureOffset", reader.Read()); - break; - case "_DownTex_TextureScale": - instance.SetTextureScale("_DownTex_TextureScale", reader.Read()); - break; - case "_Metallic0": - instance.SetFloat("_Metallic0", reader.Read()); - break; - case "_Metallic1": - instance.SetFloat("_Metallic1", reader.Read()); - break; - case "_Metallic2": - instance.SetFloat("_Metallic2", reader.Read()); - break; - case "_Metallic3": - instance.SetFloat("_Metallic3", reader.Read()); - break; - case "_Smoothness0": - instance.SetFloat("_Smoothness0", reader.Read()); - break; - case "_Smoothness1": - instance.SetFloat("_Smoothness1", reader.Read()); - break; - case "_Smoothness2": - instance.SetFloat("_Smoothness2", reader.Read()); - break; - case "_Smoothness3": - instance.SetFloat("_Smoothness3", reader.Read()); - break; - case "_TexA": - instance.SetTexture("_TexA", reader.Read()); - break; - case "_TexA_TextureOffset": - instance.SetTextureOffset("_TexA_TextureOffset", reader.Read()); - break; - case "_TexA_TextureScale": - instance.SetTextureScale("_TexA_TextureScale", reader.Read()); - break; - case "_TexB": - instance.SetTexture("_TexB", reader.Read()); - break; - case "_TexB_TextureOffset": - instance.SetTextureOffset("_TexB_TextureOffset", reader.Read()); - break; - case "_TexB_TextureScale": - instance.SetTextureScale("_TexB_TextureScale", reader.Read()); - break; - case "_value": - instance.SetFloat("_value", reader.Read()); - break; - case "_Texel": - instance.SetFloat("_Texel", reader.Read()); - break; - case "_Detail": - instance.SetTexture("_Detail", reader.Read()); - break; - case "_Detail_TextureOffset": - instance.SetTextureOffset("_Detail_TextureOffset", reader.Read()); - break; - case "_Detail_TextureScale": - instance.SetTextureScale("_Detail_TextureScale", reader.Read()); - break; - case "_HalfOverCutoff": - instance.SetFloat("_HalfOverCutoff", reader.Read()); - break; - - default: - reader.Skip(); - break; - } - } -#endif - } - } - - public class ES3Type_MaterialArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_MaterialArray() : base(typeof(Material[]), ES3Type_Material.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Material.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Material.cs.meta deleted file mode 100644 index 0240dd4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Material.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e2fe9704b49ad41cbb997e2b68befc6e -timeCreated: 1519132298 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Matrix4x4.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Matrix4x4.cs deleted file mode 100644 index 6cef1fc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Matrix4x4.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("col0", "col1", "col2", "col3")] - public class ES3Type_Matrix4x4 : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Matrix4x4() : base(typeof(Matrix4x4)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Matrix4x4 casted = (Matrix4x4)obj; - writer.WriteProperty("col0", casted.GetColumn(0), ES3Type_Vector4.Instance); - writer.WriteProperty("col1", casted.GetColumn(1), ES3Type_Vector4.Instance); - writer.WriteProperty("col2", casted.GetColumn(2), ES3Type_Vector4.Instance); - writer.WriteProperty("col3", casted.GetColumn(3), ES3Type_Vector4.Instance); - } - - public override object Read(ES3Reader reader) - { - var matrix = new Matrix4x4(); - matrix.SetColumn(0, reader.ReadProperty(ES3Type_Vector4.Instance)); - matrix.SetColumn(1, reader.ReadProperty(ES3Type_Vector4.Instance)); - matrix.SetColumn(2, reader.ReadProperty(ES3Type_Vector4.Instance)); - matrix.SetColumn(3, reader.ReadProperty(ES3Type_Vector4.Instance)); - return matrix; - } - } - - public class ES3Type_Matrix4x4Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Matrix4x4Array() : base(typeof(Matrix4x4[]), ES3Type_Matrix4x4.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Matrix4x4.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Matrix4x4.cs.meta deleted file mode 100644 index ee057a4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Matrix4x4.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b08ac351ee185470bb1ccb5150c4082f -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Mesh.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Mesh.cs deleted file mode 100644 index b07a7b7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Mesh.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("bounds", "subMeshCount", "boneWeights", "bindposes", "vertices", "normals", "tangents", "uv", "uv2", "uv3", "uv4", "colors32", "triangles", "subMeshes")] - public class ES3Type_Mesh : ES3UnityObjectType - { - public static ES3Type Instance = null; - - public ES3Type_Mesh() : base(typeof(UnityEngine.Mesh)) - { - Instance = this; - } - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Mesh)obj; - - if(!instance.isReadable) - { - ES3Internal.ES3Debug.LogWarning("Easy Save cannot save the vertices for this Mesh because it is not marked as readable, so it will be stored by reference. To save the vertex data for this Mesh, check the 'Read/Write Enabled' checkbox in its Import Settings.", instance); - return; - } - - writer.WriteProperty("indexFormat", instance.indexFormat); - writer.WriteProperty("name", instance.name); - writer.WriteProperty("vertices", instance.vertices, ES3Type_Vector3Array.Instance); - writer.WriteProperty("triangles", instance.triangles, ES3Type_intArray.Instance); - writer.WriteProperty("bounds", instance.bounds, ES3Type_Bounds.Instance); - writer.WriteProperty("boneWeights", instance.boneWeights, ES3Type_BoneWeightArray.Instance); - writer.WriteProperty("bindposes", instance.bindposes, ES3Type_Matrix4x4Array.Instance); - writer.WriteProperty("normals", instance.normals, ES3Type_Vector3Array.Instance); - writer.WriteProperty("tangents", instance.tangents, ES3Type_Vector4Array.Instance); - writer.WriteProperty("uv", instance.uv, ES3Type_Vector2Array.Instance); - writer.WriteProperty("uv2", instance.uv2, ES3Type_Vector2Array.Instance); - writer.WriteProperty("uv3", instance.uv3, ES3Type_Vector2Array.Instance); - writer.WriteProperty("uv4", instance.uv4, ES3Type_Vector2Array.Instance); - writer.WriteProperty("colors32", instance.colors32, ES3Type_Color32Array.Instance); - writer.WriteProperty("subMeshCount", instance.subMeshCount, ES3Type_int.Instance); - for(int i=0; i(ES3Reader reader) - { - var obj = new Mesh(); - ReadUnityObject(reader, obj); - return obj; - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Mesh)obj; - if (instance == null) - return; - - if (!instance.isReadable) - ES3Internal.ES3Debug.LogWarning("Easy Save cannot load the vertices for this Mesh because it is not marked as readable, so it will be loaded by reference. To load the vertex data for this Mesh, check the 'Read/Write Enabled' checkbox in its Import Settings.", instance); - - foreach (string propertyName in reader.Properties) - { - // If this Mesh isn't readable, we should skip past all of its properties. - if (!instance.isReadable) - { - reader.Skip(); - continue; - } - - switch (propertyName) - { - case "indexFormat": - instance.indexFormat = reader.Read(); - break; - case "name": - instance.name = reader.Read(ES3Type_string.Instance); - break; - case "bounds": - instance.bounds = reader.Read(ES3Type_Bounds.Instance); - break; - case "boneWeights": - instance.boneWeights = reader.Read(ES3Type_BoneWeightArray.Instance); - break; - case "bindposes": - instance.bindposes = reader.Read(ES3Type_Matrix4x4Array.Instance); - break; - case "vertices": - instance.vertices = reader.Read(ES3Type_Vector3Array.Instance); - break; - case "normals": - instance.normals = reader.Read(ES3Type_Vector3Array.Instance); - break; - case "tangents": - instance.tangents = reader.Read(ES3Type_Vector4Array.Instance); - break; - case "uv": - instance.uv = reader.Read(ES3Type_Vector2Array.Instance); - break; - case "uv2": - instance.uv2 = reader.Read(ES3Type_Vector2Array.Instance); - break; - case "uv3": - instance.uv3 = reader.Read(ES3Type_Vector2Array.Instance); - break; - case "uv4": - instance.uv4 = reader.Read(ES3Type_Vector2Array.Instance); - break; - case "colors32": - instance.colors32 = reader.Read(ES3Type_Color32Array.Instance); - break; - case "triangles": - instance.triangles = reader.Read(ES3Type_intArray.Instance); - break; - case "subMeshCount": - instance.subMeshCount = reader.Read(ES3Type_int.Instance); - for(int i=0; i(ES3Type_intArray.Instance), i); - break; - case "blendShapeCount": - instance.ClearBlendShapes(); - var blendShapeCount = reader.Read(ES3Type_int.Instance); - for (int blendShapeIndex = 0; blendShapeIndex < blendShapeCount; blendShapeIndex++) - { - var shapeName = reader.ReadProperty(); - var frameCount = reader.ReadProperty(); - - for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) - { - var deltaVertices = reader.ReadProperty(); - var deltaNormals = reader.ReadProperty(); - var deltaTangents = reader.ReadProperty(); - var frameWeight = reader.ReadProperty(); - - instance.AddBlendShapeFrame(shapeName, frameWeight, deltaVertices, deltaNormals, deltaTangents); - } - } - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Mesh.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Mesh.cs.meta deleted file mode 100644 index d4f2333..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Mesh.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e39bdb3d7bcae4f1aa682cbc9ff72ce7 -timeCreated: 1519132298 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxCurve.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxCurve.cs deleted file mode 100644 index fdfa780..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxCurve.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("mode", "curveMultiplier", "curveMax", "curveMin", "constantMax", "constantMin", "constant", "curve")] - public class ES3Type_MinMaxCurve : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_MinMaxCurve() : base(typeof(UnityEngine.ParticleSystem.MinMaxCurve)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.MinMaxCurve)obj; - - writer.WriteProperty("mode", instance.mode); - writer.WriteProperty("curveMultiplier", instance.curveMultiplier, ES3Type_float.Instance); - writer.WriteProperty("curveMax", instance.curveMax, ES3Type_AnimationCurve.Instance); - writer.WriteProperty("curveMin", instance.curveMin, ES3Type_AnimationCurve.Instance); - writer.WriteProperty("constantMax", instance.constantMax, ES3Type_float.Instance); - writer.WriteProperty("constantMin", instance.constantMin, ES3Type_float.Instance); - writer.WriteProperty("constant", instance.constant, ES3Type_float.Instance); - writer.WriteProperty("curve", instance.curve, ES3Type_AnimationCurve.Instance); - } - - [UnityEngine.Scripting.Preserve] - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.MinMaxCurve(); - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "mode": - instance.mode = reader.Read(); - break; - case "curveMultiplier": - instance.curveMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "curveMax": - instance.curveMax = reader.Read(ES3Type_AnimationCurve.Instance); - break; - case "curveMin": - instance.curveMin = reader.Read(ES3Type_AnimationCurve.Instance); - break; - case "constantMax": - instance.constantMax = reader.Read(ES3Type_float.Instance); - break; - case "constantMin": - instance.constantMin = reader.Read(ES3Type_float.Instance); - break; - case "constant": - instance.constant = reader.Read(ES3Type_float.Instance); - break; - case "curve": - instance.curve = reader.Read(ES3Type_AnimationCurve.Instance); - break; - default: - reader.Skip(); - break; - } - } - return instance; - } - - [UnityEngine.Scripting.Preserve] - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.MinMaxCurve)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "mode": - instance.mode = reader.Read(); - break; - case "curveMultiplier": - instance.curveMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "curveMax": - instance.curveMax = reader.Read(ES3Type_AnimationCurve.Instance); - break; - case "curveMin": - instance.curveMin = reader.Read(ES3Type_AnimationCurve.Instance); - break; - case "constantMax": - instance.constantMax = reader.Read(ES3Type_float.Instance); - break; - case "constantMin": - instance.constantMin = reader.Read(ES3Type_float.Instance); - break; - case "constant": - instance.constant = reader.Read(ES3Type_float.Instance); - break; - case "curve": - instance.curve = reader.Read(ES3Type_AnimationCurve.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxCurve.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxCurve.cs.meta deleted file mode 100644 index 6c43b9e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxCurve.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b63607ddb964c4897880a99d41c70efd -timeCreated: 1519132294 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxGradient.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxGradient.cs deleted file mode 100644 index 120f006..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxGradient.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("mode", "gradientMax", "gradientMin", "colorMax", "colorMin", "color", "gradient")] - public class ES3Type_MinMaxGradient : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_MinMaxGradient() : base(typeof(UnityEngine.ParticleSystem.MinMaxGradient)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.MinMaxGradient)obj; - - writer.WriteProperty("mode", instance.mode); - writer.WriteProperty("gradientMax", instance.gradientMax, ES3Type_Gradient.Instance); - writer.WriteProperty("gradientMin", instance.gradientMin, ES3Type_Gradient.Instance); - writer.WriteProperty("colorMax", instance.colorMax, ES3Type_Color.Instance); - writer.WriteProperty("colorMin", instance.colorMin, ES3Type_Color.Instance); - writer.WriteProperty("color", instance.color, ES3Type_Color.Instance); - writer.WriteProperty("gradient", instance.gradient, ES3Type_Gradient.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.MinMaxGradient(); - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "mode": - instance.mode = reader.Read(); - break; - case "gradientMax": - instance.gradientMax = reader.Read(ES3Type_Gradient.Instance); - break; - case "gradientMin": - instance.gradientMin = reader.Read(ES3Type_Gradient.Instance); - break; - case "colorMax": - instance.colorMax = reader.Read(ES3Type_Color.Instance); - break; - case "colorMin": - instance.colorMin = reader.Read(ES3Type_Color.Instance); - break; - case "color": - instance.color = reader.Read(ES3Type_Color.Instance); - break; - case "gradient": - instance.gradient = reader.Read(ES3Type_Gradient.Instance); - break; - default: - reader.Skip(); - break; - } - } - return instance; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxGradient.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxGradient.cs.meta deleted file mode 100644 index 72fe496..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_MinMaxGradient.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c5b12866f2f984f6a822a127d5be1f9c -timeCreated: 1519132296 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_NoiseModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_NoiseModule.cs deleted file mode 100644 index d4e5ca4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_NoiseModule.cs +++ /dev/null @@ -1,154 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "separateAxes", "strength", "strengthMultiplier", "strengthX", "strengthXMultiplier", "strengthY", "strengthYMultiplier", "strengthZ", "strengthZMultiplier", "frequency", "damping", "octaveCount", "octaveMultiplier", "octaveScale", "quality", "scrollSpeed", "scrollSpeedMultiplier", "remapEnabled", "remap", "remapMultiplier", "remapX", "remapXMultiplier", "remapY", "remapYMultiplier", "remapZ", "remapZMultiplier")] - public class ES3Type_NoiseModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_NoiseModule() : base(typeof(UnityEngine.ParticleSystem.NoiseModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.NoiseModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("separateAxes", instance.separateAxes, ES3Type_bool.Instance); - writer.WriteProperty("strength", instance.strength, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("strengthMultiplier", instance.strengthMultiplier, ES3Type_float.Instance); - writer.WriteProperty("strengthX", instance.strengthX, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("strengthXMultiplier", instance.strengthXMultiplier, ES3Type_float.Instance); - writer.WriteProperty("strengthY", instance.strengthY, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("strengthYMultiplier", instance.strengthYMultiplier, ES3Type_float.Instance); - writer.WriteProperty("strengthZ", instance.strengthZ, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("strengthZMultiplier", instance.strengthZMultiplier, ES3Type_float.Instance); - writer.WriteProperty("frequency", instance.frequency, ES3Type_float.Instance); - writer.WriteProperty("damping", instance.damping, ES3Type_bool.Instance); - writer.WriteProperty("octaveCount", instance.octaveCount, ES3Type_int.Instance); - writer.WriteProperty("octaveMultiplier", instance.octaveMultiplier, ES3Type_float.Instance); - writer.WriteProperty("octaveScale", instance.octaveScale, ES3Type_float.Instance); - writer.WriteProperty("quality", instance.quality); - writer.WriteProperty("scrollSpeed", instance.scrollSpeed, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("scrollSpeedMultiplier", instance.scrollSpeedMultiplier, ES3Type_float.Instance); - writer.WriteProperty("remapEnabled", instance.remapEnabled, ES3Type_bool.Instance); - writer.WriteProperty("remap", instance.remap, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("remapMultiplier", instance.remapMultiplier, ES3Type_float.Instance); - writer.WriteProperty("remapX", instance.remapX, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("remapXMultiplier", instance.remapXMultiplier, ES3Type_float.Instance); - writer.WriteProperty("remapY", instance.remapY, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("remapYMultiplier", instance.remapYMultiplier, ES3Type_float.Instance); - writer.WriteProperty("remapZ", instance.remapZ, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("remapZMultiplier", instance.remapZMultiplier, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.NoiseModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.NoiseModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "separateAxes": - instance.separateAxes = reader.Read(ES3Type_bool.Instance); - break; - case "strength": - instance.strength = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "strengthMultiplier": - instance.strengthMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "strengthX": - instance.strengthX = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "strengthXMultiplier": - instance.strengthXMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "strengthY": - instance.strengthY = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "strengthYMultiplier": - instance.strengthYMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "strengthZ": - instance.strengthZ = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "strengthZMultiplier": - instance.strengthZMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "frequency": - instance.frequency = reader.Read(ES3Type_float.Instance); - break; - case "damping": - instance.damping = reader.Read(ES3Type_bool.Instance); - break; - case "octaveCount": - instance.octaveCount = reader.Read(ES3Type_int.Instance); - break; - case "octaveMultiplier": - instance.octaveMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "octaveScale": - instance.octaveScale = reader.Read(ES3Type_float.Instance); - break; - case "quality": - instance.quality = reader.Read(); - break; - case "scrollSpeed": - instance.scrollSpeed = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "scrollSpeedMultiplier": - instance.scrollSpeedMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "remapEnabled": - instance.remapEnabled = reader.Read(ES3Type_bool.Instance); - break; - case "remap": - instance.remap = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "remapMultiplier": - instance.remapMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "remapX": - instance.remapX = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "remapXMultiplier": - instance.remapXMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "remapY": - instance.remapY = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "remapYMultiplier": - instance.remapYMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "remapZ": - instance.remapZ = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "remapZMultiplier": - instance.remapZMultiplier = reader.Read(ES3Type_float.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_NoiseModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_NoiseModule.cs.meta deleted file mode 100644 index 8c93046..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_NoiseModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 95fd95820c7c942ef96f463a52c3d4ae -timeCreated: 1519132291 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicMaterial.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicMaterial.cs deleted file mode 100644 index 5151333..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicMaterial.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System; - -namespace ES3Types -{ -#if UNITY_6000_0_OR_NEWER - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("dynamicFriction", "staticFriction", "bounciness", "frictionCombine", "bounceCombine")] - public class ES3Type_PhysicsMaterial : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_PhysicsMaterial() : base(typeof(UnityEngine.PhysicsMaterial)) { Instance = this; } - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.PhysicsMaterial)obj; - - writer.WriteProperty("dynamicFriction", instance.dynamicFriction, ES3Type_float.Instance); - writer.WriteProperty("staticFriction", instance.staticFriction, ES3Type_float.Instance); - writer.WriteProperty("bounciness", instance.bounciness, ES3Type_float.Instance); - writer.WriteProperty("frictionCombine", instance.frictionCombine); - writer.WriteProperty("bounceCombine", instance.bounceCombine); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.PhysicsMaterial)obj; - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - - case "dynamicFriction": - instance.dynamicFriction = reader.Read(ES3Type_float.Instance); - break; - case "staticFriction": - instance.staticFriction = reader.Read(ES3Type_float.Instance); - break; - case "bounciness": - instance.bounciness = reader.Read(ES3Type_float.Instance); - break; - case "frictionCombine": - instance.frictionCombine = reader.Read(); - break; - case "bounceCombine": - instance.bounceCombine = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new UnityEngine.PhysicsMaterial(); - ReadObject(reader, instance); - return instance; - } - } - - public class ES3Type_PhysicsMaterialArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_PhysicsMaterialArray() : base(typeof(UnityEngine.PhysicsMaterial[]), ES3Type_PhysicsMaterial.Instance) - { - Instance = this; - } - } -#else - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("dynamicFriction", "staticFriction", "bounciness", "frictionCombine", "bounceCombine")] - public class ES3Type_PhysicMaterial : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_PhysicMaterial() : base(typeof(UnityEngine.PhysicMaterial)) { Instance = this; } - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.PhysicMaterial)obj; - - writer.WriteProperty("dynamicFriction", instance.dynamicFriction, ES3Type_float.Instance); - writer.WriteProperty("staticFriction", instance.staticFriction, ES3Type_float.Instance); - writer.WriteProperty("bounciness", instance.bounciness, ES3Type_float.Instance); - writer.WriteProperty("frictionCombine", instance.frictionCombine); - writer.WriteProperty("bounceCombine", instance.bounceCombine); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.PhysicMaterial)obj; - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - - case "dynamicFriction": - instance.dynamicFriction = reader.Read(ES3Type_float.Instance); - break; - case "staticFriction": - instance.staticFriction = reader.Read(ES3Type_float.Instance); - break; - case "bounciness": - instance.bounciness = reader.Read(ES3Type_float.Instance); - break; - case "frictionCombine": - instance.frictionCombine = reader.Read(); - break; - case "bounceCombine": - instance.bounceCombine = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new UnityEngine.PhysicMaterial(); - ReadObject(reader, instance); - return instance; - } - } - - public class ES3Type_PhysicMaterialArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_PhysicMaterialArray() : base(typeof(UnityEngine.PhysicMaterial[]), ES3Type_PhysicMaterial.Instance) - { - Instance = this; - } - } -#endif -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicMaterial.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicMaterial.cs.meta deleted file mode 100644 index bbc3c12..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicMaterial.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f4b8d9e47b0dc49f48c834a160b6fe55 -timeCreated: 1519132300 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicsMaterial2D.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicsMaterial2D.cs deleted file mode 100644 index 0dc2e43..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicsMaterial2D.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("bounciness", "friction")] - public class ES3Type_PhysicsMaterial2D : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_PhysicsMaterial2D() : base(typeof(UnityEngine.PhysicsMaterial2D)){ Instance = this; } - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.PhysicsMaterial2D)obj; - - writer.WriteProperty("bounciness", instance.bounciness, ES3Type_float.Instance); - writer.WriteProperty("friction", instance.friction, ES3Type_float.Instance); - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.PhysicsMaterial2D)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "bounciness": - instance.bounciness = reader.Read(ES3Type_float.Instance); - break; - case "friction": - instance.friction = reader.Read(ES3Type_float.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var instance = new UnityEngine.PhysicsMaterial2D(); - ReadObject(reader, instance); - return instance; - } - } - - public class ES3Type_PhysicsMaterial2DArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_PhysicsMaterial2DArray() : base(typeof(UnityEngine.PhysicsMaterial2D[]), ES3Type_PhysicsMaterial2D.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicsMaterial2D.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicsMaterial2D.cs.meta deleted file mode 100644 index 765da0f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_PhysicsMaterial2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 456568556c632458bb73fffbb1be0c84 -timeCreated: 1519132284 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Quaternion.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Quaternion.cs deleted file mode 100644 index f2413d0..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Quaternion.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("x", "y", "z", "w")] - public class ES3Type_Quaternion : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Quaternion() : base(typeof(Quaternion)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var casted = (Quaternion)obj; - writer.WriteProperty("x", casted.x, ES3Type_float.Instance); - writer.WriteProperty("y", casted.y, ES3Type_float.Instance); - writer.WriteProperty("z", casted.z, ES3Type_float.Instance); - writer.WriteProperty("w", casted.w, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Quaternion( reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } - - public class ES3Type_QuaternionArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_QuaternionArray() : base(typeof(Quaternion[]), ES3Type_Quaternion.Instance) - { - Instance = this; - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Quaternion.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Quaternion.cs.meta deleted file mode 100644 index bb4c22a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Quaternion.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d9975ecdd621d46a285708463dde7816 -timeCreated: 1519132297 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Rect.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Rect.cs deleted file mode 100644 index 1639584..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Rect.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("x", "y", "width", "height")] - public class ES3Type_Rect : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Rect() : base(typeof(UnityEngine.Rect)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Rect)obj; - - writer.WriteProperty("x", instance.x, ES3Type_float.Instance); - writer.WriteProperty("y", instance.y, ES3Type_float.Instance); - writer.WriteProperty("width", instance.width, ES3Type_float.Instance); - writer.WriteProperty("height", instance.height, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Rect(reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Rect.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Rect.cs.meta deleted file mode 100644 index 1874834..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Rect.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d9b9aa6e5759a4a3e857f90a2de74e5f -timeCreated: 1519132297 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RectTransform.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RectTransform.cs deleted file mode 100644 index 24696f4..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RectTransform.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("anchorMin", "anchorMax", "anchoredPosition", "sizeDelta", "pivot", "offsetMin", "offsetMax", "localPosition", "localRotation", "localScale", "parent", "hideFlags")] - public class ES3Type_RectTransform : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_RectTransform() : base(typeof(UnityEngine.RectTransform)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.RectTransform)obj; - - writer.WritePropertyByRef("parent", instance.parent); - writer.WriteProperty("anchorMin", instance.anchorMin, ES3Type_Vector2.Instance); - writer.WriteProperty("anchorMax", instance.anchorMax, ES3Type_Vector2.Instance); - writer.WriteProperty("anchoredPosition", instance.anchoredPosition, ES3Type_Vector2.Instance); - writer.WriteProperty("sizeDelta", instance.sizeDelta, ES3Type_Vector2.Instance); - writer.WriteProperty("pivot", instance.pivot, ES3Type_Vector2.Instance); - writer.WriteProperty("offsetMin", instance.offsetMin, ES3Type_Vector2.Instance); - writer.WriteProperty("offsetMax", instance.offsetMax, ES3Type_Vector2.Instance); - writer.WriteProperty("localPosition", instance.localPosition, ES3Type_Vector3.Instance); - writer.WriteProperty("localRotation", instance.localRotation, ES3Type_Quaternion.Instance); - writer.WriteProperty("localScale", instance.localScale, ES3Type_Vector3.Instance); - writer.WriteProperty("hideFlags", instance.hideFlags); - writer.WriteProperty("siblingIndex", instance.GetSiblingIndex()); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - if (obj.GetType() == typeof(UnityEngine.Transform)) - obj = ((Transform)obj).gameObject.AddComponent(); - - var instance = (UnityEngine.RectTransform)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "anchorMin": - instance.anchorMin = reader.Read(ES3Type_Vector2.Instance); - break; - case "anchorMax": - instance.anchorMax = reader.Read(ES3Type_Vector2.Instance); - break; - case "anchoredPosition": - instance.anchoredPosition = reader.Read(ES3Type_Vector2.Instance); - break; - case "sizeDelta": - instance.sizeDelta = reader.Read(ES3Type_Vector2.Instance); - break; - case "pivot": - instance.pivot = reader.Read(ES3Type_Vector2.Instance); - break; - case "offsetMin": - instance.offsetMin = reader.Read(ES3Type_Vector2.Instance); - break; - case "offsetMax": - instance.offsetMax = reader.Read(ES3Type_Vector2.Instance); - break; - case "localPosition": - instance.localPosition = reader.Read(ES3Type_Vector3.Instance); - break; - case "localRotation": - instance.localRotation = reader.Read(ES3Type_Quaternion.Instance); - break; - case "localScale": - instance.localScale = reader.Read(ES3Type_Vector3.Instance); - break; - case "parent": - instance.SetParent(reader.Read(ES3Type_Transform.Instance)); - break; - case "hierarchyCapacity": - instance.hierarchyCapacity = reader.Read(ES3Type_int.Instance); - break; - case "hideFlags": - instance.hideFlags = reader.Read(); - break; - case "siblingIndex": - instance.SetSiblingIndex(reader.Read()); - break; - default: - reader.Skip(); - break; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RectTransform.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RectTransform.cs.meta deleted file mode 100644 index 2386dc3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RectTransform.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2f7556a7c1bb04cf5979c7e6e65c5e51 -timeCreated: 1519132282 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RenderTexture.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RenderTexture.cs deleted file mode 100644 index 5959e92..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RenderTexture.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("width", "height", "dimension", "graphicsFormat", "useMipMap", "vrUsage", "memorylessMode", "format", "stencilFormat", "autoGenerateMips", "volumeDepth", "antiAliasing", "bindTextureMS", "enableRandomWrite", "useDynamicScale", "isPowerOfTwo", "depth", "descriptor", "masterTextureLimit", "anisotropicFiltering", "wrapMode", "wrapModeU", "wrapModeV", "wrapModeW", "filterMode", "anisoLevel", "mipMapBias", "imageContentsHash", "streamingTextureForceLoadAll", "streamingTextureDiscardUnusedMips", "allowThreadedTextureCreation", "name")] - public class ES3Type_RenderTexture : ES3ObjectType - { - public static ES3Type Instance = null; - - public ES3Type_RenderTexture() : base(typeof(UnityEngine.RenderTexture)) { Instance = this; } - - - protected override void WriteObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.RenderTexture)obj; - - writer.WriteProperty("descriptor", instance.descriptor); - writer.WriteProperty("antiAliasing", instance.antiAliasing, ES3Type_int.Instance); - writer.WriteProperty("isPowerOfTwo", instance.isPowerOfTwo, ES3Type_bool.Instance); - writer.WriteProperty("anisotropicFiltering", UnityEngine.RenderTexture.anisotropicFiltering); - writer.WriteProperty("wrapMode", instance.wrapMode); - writer.WriteProperty("wrapModeU", instance.wrapModeU); - writer.WriteProperty("wrapModeV", instance.wrapModeV); - writer.WriteProperty("wrapModeW", instance.wrapModeW); - writer.WriteProperty("filterMode", instance.filterMode); - writer.WriteProperty("anisoLevel", instance.anisoLevel, ES3Type_int.Instance); - writer.WriteProperty("mipMapBias", instance.mipMapBias, ES3Type_float.Instance); - -#if UNITY_2020_1_OR_NEWER - writer.WriteProperty("streamingTextureForceLoadAll", UnityEngine.RenderTexture.streamingTextureForceLoadAll, ES3Type_bool.Instance); - writer.WriteProperty("streamingTextureDiscardUnusedMips", UnityEngine.RenderTexture.streamingTextureDiscardUnusedMips, ES3Type_bool.Instance); - writer.WriteProperty("allowThreadedTextureCreation", UnityEngine.RenderTexture.allowThreadedTextureCreation, ES3Type_bool.Instance); -#endif - } - - protected override void ReadObject(ES3Reader reader, object obj) - { - var instance = (UnityEngine.RenderTexture)obj; - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - case "width": - instance.width = reader.Read(ES3Type_int.Instance); - break; - case "height": - instance.height = reader.Read(ES3Type_int.Instance); - break; - case "dimension": - instance.dimension = reader.Read(); - break; - case "useMipMap": - instance.useMipMap = reader.Read(ES3Type_bool.Instance); - break; - case "memorylessMode": - instance.memorylessMode = reader.Read(); - break; - case "format": - instance.format = reader.Read(); - break; - case "autoGenerateMips": - instance.autoGenerateMips = reader.Read(ES3Type_bool.Instance); - break; - case "volumeDepth": - instance.volumeDepth = reader.Read(ES3Type_int.Instance); - break; - case "antiAliasing": - instance.antiAliasing = reader.Read(ES3Type_int.Instance); - break; - case "enableRandomWrite": - instance.enableRandomWrite = reader.Read(ES3Type_bool.Instance); - break; - case "isPowerOfTwo": - instance.isPowerOfTwo = reader.Read(ES3Type_bool.Instance); - break; - case "depth": - instance.depth = reader.Read(ES3Type_int.Instance); - break; - case "descriptor": - instance.descriptor = reader.Read(); - break; - case "anisotropicFiltering": - UnityEngine.RenderTexture.anisotropicFiltering = reader.Read(); - break; - case "wrapMode": - instance.wrapMode = reader.Read(); - break; - case "wrapModeU": - instance.wrapModeU = reader.Read(); - break; - case "wrapModeV": - instance.wrapModeV = reader.Read(); - break; - case "wrapModeW": - instance.wrapModeW = reader.Read(); - break; - case "filterMode": - instance.filterMode = reader.Read(); - break; - case "anisoLevel": - instance.anisoLevel = reader.Read(ES3Type_int.Instance); - break; - case "mipMapBias": - instance.mipMapBias = reader.Read(ES3Type_float.Instance); - break; - case "name": - instance.name = reader.Read(ES3Type_string.Instance); - break; - -#if UNITY_2020_1_OR_NEWER - case "vrUsage": - instance.vrUsage = reader.Read(); - break; - case "graphicsFormat": - instance.graphicsFormat = reader.Read(); - break; - case "stencilFormat": - instance.stencilFormat = reader.Read(); - break; - case "bindTextureMS": - instance.bindTextureMS = reader.Read(ES3Type_bool.Instance); - break; - case "useDynamicScale": - instance.useDynamicScale = reader.Read(ES3Type_bool.Instance); - break; - case "streamingTextureForceLoadAll": - UnityEngine.RenderTexture.streamingTextureForceLoadAll = reader.Read(ES3Type_bool.Instance); - break; - case "streamingTextureDiscardUnusedMips": - UnityEngine.RenderTexture.streamingTextureDiscardUnusedMips = reader.Read(ES3Type_bool.Instance); - break; - case "allowThreadedTextureCreation": - UnityEngine.RenderTexture.allowThreadedTextureCreation = reader.Read(ES3Type_bool.Instance); - break; -#endif - - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadObject(ES3Reader reader) - { - var descriptor = reader.ReadProperty(); - var instance = new UnityEngine.RenderTexture(descriptor); - ReadObject(reader, instance); - return instance; - } - } - - - public class ES3Type_RenderTextureArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_RenderTextureArray() : base(typeof(UnityEngine.RenderTexture[]), ES3Type_RenderTexture.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RenderTexture.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RenderTexture.cs.meta deleted file mode 100644 index a0082df..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RenderTexture.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 589b7cd3ec938964197a399aa93bff00 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationBySpeedModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationBySpeedModule.cs deleted file mode 100644 index 80a9768..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationBySpeedModule.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "x", "xMultiplier", "y", "yMultiplier", "z", "zMultiplier", "separateAxes", "range")] - public class ES3Type_RotationBySpeedModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_RotationBySpeedModule() : base(typeof(UnityEngine.ParticleSystem.RotationBySpeedModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.RotationBySpeedModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("x", instance.x, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("xMultiplier", instance.xMultiplier, ES3Type_float.Instance); - writer.WriteProperty("y", instance.y, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("yMultiplier", instance.yMultiplier, ES3Type_float.Instance); - writer.WriteProperty("z", instance.z, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("zMultiplier", instance.zMultiplier, ES3Type_float.Instance); - writer.WriteProperty("separateAxes", instance.separateAxes, ES3Type_bool.Instance); - writer.WriteProperty("range", instance.range, ES3Type_Vector2.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.RotationBySpeedModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.RotationBySpeedModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "x": - instance.x = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "xMultiplier": - instance.xMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "y": - instance.y = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "yMultiplier": - instance.yMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "z": - instance.z = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "zMultiplier": - instance.zMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "separateAxes": - instance.separateAxes = reader.Read(ES3Type_bool.Instance); - break; - case "range": - instance.range = reader.Read(ES3Type_Vector2.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationBySpeedModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationBySpeedModule.cs.meta deleted file mode 100644 index 1f0bd64..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationBySpeedModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0a7279e70f63d4a2787489257b5e3ea9 -timeCreated: 1519132280 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationOverLifetimeModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationOverLifetimeModule.cs deleted file mode 100644 index 11c3648..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationOverLifetimeModule.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "x", "xMultiplier", "y", "yMultiplier", "z", "zMultiplier", "separateAxes")] - public class ES3Type_RotationOverLifetimeModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_RotationOverLifetimeModule() : base(typeof(UnityEngine.ParticleSystem.RotationOverLifetimeModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.RotationOverLifetimeModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("x", instance.x, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("xMultiplier", instance.xMultiplier, ES3Type_float.Instance); - writer.WriteProperty("y", instance.y, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("yMultiplier", instance.yMultiplier, ES3Type_float.Instance); - writer.WriteProperty("z", instance.z, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("zMultiplier", instance.zMultiplier, ES3Type_float.Instance); - writer.WriteProperty("separateAxes", instance.separateAxes, ES3Type_bool.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.RotationOverLifetimeModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.RotationOverLifetimeModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "x": - instance.x = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "xMultiplier": - instance.xMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "y": - instance.y = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "yMultiplier": - instance.yMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "z": - instance.z = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "zMultiplier": - instance.zMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "separateAxes": - instance.separateAxes = reader.Read(ES3Type_bool.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationOverLifetimeModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationOverLifetimeModule.cs.meta deleted file mode 100644 index 6eeaf0a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_RotationOverLifetimeModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e54d1e36b07864bc2b7f33a6182d124b -timeCreated: 1519132299 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Shader.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Shader.cs deleted file mode 100644 index fe02907..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Shader.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("name","maximumLOD")] - public class ES3Type_Shader : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Shader() : base(typeof(UnityEngine.Shader)){ Instance = this; } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Shader)obj; - - writer.WriteProperty("name", instance.name, ES3Type_string.Instance); - writer.WriteProperty("maximumLOD", instance.maximumLOD, ES3Type_int.Instance); - } - - public override object Read(ES3Reader reader) - { - Shader obj = Shader.Find(reader.ReadProperty(ES3Type_string.Instance)); - if(obj == null) - obj = Shader.Find("Diffuse"); - ReadInto(reader, obj); - return obj; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.Shader)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - case "name": - instance.name = reader.Read(ES3Type_string.Instance); - break; - case "maximumLOD": - instance.maximumLOD = reader.Read(ES3Type_int.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_ShaderArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_ShaderArray() : base(typeof(UnityEngine.Shader[]), ES3Type_Shader.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Shader.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Shader.cs.meta deleted file mode 100644 index c980dbf..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Shader.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9d42e849fe2364f1b92d805b3fa7f874 -timeCreated: 1519132292 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ShapeModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ShapeModule.cs deleted file mode 100644 index d498cbd..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ShapeModule.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "shapeType", "randomDirectionAmount", "sphericalDirectionAmount", "alignToDirection", "radius", "angle", "length", "box", "meshShapeType", "mesh", "meshRenderer", "skinnedMeshRenderer", "useMeshMaterialIndex", "meshMaterialIndex", "useMeshColors", "normalOffset", "meshScale", "arc")] - public class ES3Type_ShapeModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_ShapeModule() : base(typeof(UnityEngine.ParticleSystem.ShapeModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.ShapeModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("shapeType", instance.shapeType); - writer.WriteProperty("randomDirectionAmount", instance.randomDirectionAmount, ES3Type_float.Instance); - writer.WriteProperty("sphericalDirectionAmount", instance.sphericalDirectionAmount, ES3Type_float.Instance); - writer.WriteProperty("alignToDirection", instance.alignToDirection, ES3Type_bool.Instance); - writer.WriteProperty("radius", instance.radius, ES3Type_float.Instance); - writer.WriteProperty("angle", instance.angle, ES3Type_float.Instance); - writer.WriteProperty("length", instance.length, ES3Type_float.Instance); - #if UNITY_5 - writer.WriteProperty("box", instance.box, ES3Type_Vector3.Instance); - writer.WriteProperty("meshScale", instance.meshScale, ES3Type_float.Instance); - #else - writer.WriteProperty("scale", instance.scale, ES3Type_Vector3.Instance); - #endif - writer.WriteProperty("meshShapeType", instance.meshShapeType); - writer.WritePropertyByRef("mesh", instance.mesh); - writer.WritePropertyByRef("meshRenderer", instance.meshRenderer); - writer.WritePropertyByRef("skinnedMeshRenderer", instance.skinnedMeshRenderer); - writer.WriteProperty("useMeshMaterialIndex", instance.useMeshMaterialIndex, ES3Type_bool.Instance); - writer.WriteProperty("meshMaterialIndex", instance.meshMaterialIndex, ES3Type_int.Instance); - writer.WriteProperty("useMeshColors", instance.useMeshColors, ES3Type_bool.Instance); - writer.WriteProperty("normalOffset", instance.normalOffset, ES3Type_float.Instance); - writer.WriteProperty("arc", instance.arc, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.ShapeModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.ShapeModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "shapeType": - instance.shapeType = reader.Read(); - break; - case "randomDirectionAmount": - instance.randomDirectionAmount = reader.Read(ES3Type_float.Instance); - break; - case "sphericalDirectionAmount": - instance.sphericalDirectionAmount = reader.Read(ES3Type_float.Instance); - break; - case "alignToDirection": - instance.alignToDirection = reader.Read(ES3Type_bool.Instance); - break; - case "radius": - instance.radius = reader.Read(ES3Type_float.Instance); - break; - case "angle": - instance.angle = reader.Read(ES3Type_float.Instance); - break; - case "length": - instance.length = reader.Read(ES3Type_float.Instance); - break; - #if UNITY_5 - case "box": - instance.box = reader.Read(ES3Type_Vector3.Instance); - break; - case "meshScale": - instance.meshScale = reader.Read(ES3Type_float.Instance); - break; - #else - case "scale": - instance.scale = reader.Read(ES3Type_Vector3.Instance); - break; - #endif - case "meshShapeType": - instance.meshShapeType = reader.Read(); - break; - case "mesh": - instance.mesh = reader.Read(); - break; - case "meshRenderer": - instance.meshRenderer = reader.Read(); - break; - case "skinnedMeshRenderer": - instance.skinnedMeshRenderer = reader.Read(); - break; - case "useMeshMaterialIndex": - instance.useMeshMaterialIndex = reader.Read(ES3Type_bool.Instance); - break; - case "meshMaterialIndex": - instance.meshMaterialIndex = reader.Read(ES3Type_int.Instance); - break; - case "useMeshColors": - instance.useMeshColors = reader.Read(ES3Type_bool.Instance); - break; - case "normalOffset": - instance.normalOffset = reader.Read(ES3Type_float.Instance); - break; - case "arc": - instance.arc = reader.Read(ES3Type_float.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ShapeModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ShapeModule.cs.meta deleted file mode 100644 index a9a4b21..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_ShapeModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 238b82f3d73ce4b4ebeb3a5c22eff5e9 -timeCreated: 1519132281 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeBySpeedModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeBySpeedModule.cs deleted file mode 100644 index a37aefc..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeBySpeedModule.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "size", "sizeMultiplier", "x", "xMultiplier", "y", "yMultiplier", "z", "zMultiplier", "separateAxes", "range")] - public class ES3Type_SizeBySpeedModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_SizeBySpeedModule() : base(typeof(UnityEngine.ParticleSystem.SizeBySpeedModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.SizeBySpeedModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("size", instance.size, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("sizeMultiplier", instance.sizeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("x", instance.x, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("xMultiplier", instance.xMultiplier, ES3Type_float.Instance); - writer.WriteProperty("y", instance.y, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("yMultiplier", instance.yMultiplier, ES3Type_float.Instance); - writer.WriteProperty("z", instance.z, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("zMultiplier", instance.zMultiplier, ES3Type_float.Instance); - writer.WriteProperty("separateAxes", instance.separateAxes, ES3Type_bool.Instance); - writer.WriteProperty("range", instance.range, ES3Type_Vector2.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.SizeBySpeedModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.SizeBySpeedModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "size": - instance.size = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "sizeMultiplier": - instance.sizeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "x": - instance.x = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "xMultiplier": - instance.xMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "y": - instance.y = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "yMultiplier": - instance.yMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "z": - instance.z = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "zMultiplier": - instance.zMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "separateAxes": - instance.separateAxes = reader.Read(ES3Type_bool.Instance); - break; - case "range": - instance.range = reader.Read(ES3Type_Vector2.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeBySpeedModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeBySpeedModule.cs.meta deleted file mode 100644 index 9a3e3e9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeBySpeedModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 553dbccc70c984444a8e1e4fb140acaa -timeCreated: 1519132285 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeOverLifetimeModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeOverLifetimeModule.cs deleted file mode 100644 index 9fa4e3c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeOverLifetimeModule.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "size", "sizeMultiplier", "x", "xMultiplier", "y", "yMultiplier", "z", "zMultiplier", "separateAxes")] - public class ES3Type_SizeOverLifetimeModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_SizeOverLifetimeModule() : base(typeof(UnityEngine.ParticleSystem.SizeOverLifetimeModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.SizeOverLifetimeModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("size", instance.size, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("sizeMultiplier", instance.sizeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("x", instance.x, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("xMultiplier", instance.xMultiplier, ES3Type_float.Instance); - writer.WriteProperty("y", instance.y, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("yMultiplier", instance.yMultiplier, ES3Type_float.Instance); - writer.WriteProperty("z", instance.z, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("zMultiplier", instance.zMultiplier, ES3Type_float.Instance); - writer.WriteProperty("separateAxes", instance.separateAxes, ES3Type_bool.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.SizeOverLifetimeModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.SizeOverLifetimeModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "size": - instance.size = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "sizeMultiplier": - instance.sizeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "x": - instance.x = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "xMultiplier": - instance.xMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "y": - instance.y = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "yMultiplier": - instance.yMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "z": - instance.z = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "zMultiplier": - instance.zMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "separateAxes": - instance.separateAxes = reader.Read(ES3Type_bool.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeOverLifetimeModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeOverLifetimeModule.cs.meta deleted file mode 100644 index a1511c2..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SizeOverLifetimeModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 414f41e320e5f4be0a7aa4b39344c5e4 -timeCreated: 1519132284 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SkinnedMeshRenderer.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SkinnedMeshRenderer.cs deleted file mode 100644 index 6c6d3ca..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SkinnedMeshRenderer.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("bones", "rootBone", "quality", "sharedMesh", "updateWhenOffscreen", "skinnedMotionVectors", "localBounds", "enabled", "shadowCastingMode", "receiveShadows", "sharedMaterials", "lightmapIndex", "realtimeLightmapIndex", "lightmapScaleOffset", "motionVectorGenerationMode", "realtimeLightmapScaleOffset", "lightProbeUsage", "lightProbeProxyVolumeOverride", "probeAnchor", "reflectionProbeUsage", "sortingLayerName", "sortingLayerID", "sortingOrder")] - public class ES3Type_SkinnedMeshRenderer : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_SkinnedMeshRenderer() : base(typeof(UnityEngine.SkinnedMeshRenderer)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.SkinnedMeshRenderer)obj; - - writer.WriteProperty("bones", instance.bones); - writer.WriteProperty("rootBone", instance.rootBone); - writer.WriteProperty("quality", instance.quality); - writer.WriteProperty("sharedMesh", instance.sharedMesh); - writer.WriteProperty("updateWhenOffscreen", instance.updateWhenOffscreen, ES3Type_bool.Instance); - writer.WriteProperty("skinnedMotionVectors", instance.skinnedMotionVectors, ES3Type_bool.Instance); - writer.WriteProperty("localBounds", instance.localBounds, ES3Type_Bounds.Instance); - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("shadowCastingMode", instance.shadowCastingMode); - writer.WriteProperty("receiveShadows", instance.receiveShadows, ES3Type_bool.Instance); - writer.WriteProperty("sharedMaterials", instance.sharedMaterials); - writer.WriteProperty("lightmapIndex", instance.lightmapIndex, ES3Type_int.Instance); - writer.WriteProperty("realtimeLightmapIndex", instance.realtimeLightmapIndex, ES3Type_int.Instance); - writer.WriteProperty("lightmapScaleOffset", instance.lightmapScaleOffset, ES3Type_Vector4.Instance); - writer.WriteProperty("motionVectorGenerationMode", instance.motionVectorGenerationMode); - writer.WriteProperty("realtimeLightmapScaleOffset", instance.realtimeLightmapScaleOffset, ES3Type_Vector4.Instance); - writer.WriteProperty("lightProbeUsage", instance.lightProbeUsage); - writer.WriteProperty("lightProbeProxyVolumeOverride", instance.lightProbeProxyVolumeOverride); - writer.WriteProperty("probeAnchor", instance.probeAnchor); - writer.WriteProperty("reflectionProbeUsage", instance.reflectionProbeUsage); - writer.WriteProperty("sortingLayerName", instance.sortingLayerName, ES3Type_string.Instance); - writer.WriteProperty("sortingLayerID", instance.sortingLayerID, ES3Type_int.Instance); - writer.WriteProperty("sortingOrder", instance.sortingOrder, ES3Type_int.Instance); - - // Get BlendShapeWeights - if (instance.sharedMesh != null) - { - var blendShapeWeights = new float[instance.sharedMesh.blendShapeCount]; - for (int i = 0; i < blendShapeWeights.Length; i++) - blendShapeWeights[i] = instance.GetBlendShapeWeight(i); - writer.WriteProperty("blendShapeWeights", blendShapeWeights, ES3Type_floatArray.Instance); - } - - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.SkinnedMeshRenderer)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - - case "bones": - instance.bones = reader.Read(); - break; - case "rootBone": - instance.rootBone = reader.Read(ES3Type_Transform.Instance); - break; - case "quality": - instance.quality = reader.Read(); - break; - case "sharedMesh": - instance.sharedMesh = reader.Read(ES3Type_Mesh.Instance); - break; - case "updateWhenOffscreen": - instance.updateWhenOffscreen = reader.Read(ES3Type_bool.Instance); - break; - case "skinnedMotionVectors": - instance.skinnedMotionVectors = reader.Read(ES3Type_bool.Instance); - break; - case "localBounds": - instance.localBounds = reader.Read(ES3Type_Bounds.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "shadowCastingMode": - instance.shadowCastingMode = reader.Read(); - break; - case "receiveShadows": - instance.receiveShadows = reader.Read(ES3Type_bool.Instance); - break; - case "sharedMaterials": - instance.sharedMaterials = reader.Read(); - break; - case "lightmapIndex": - instance.lightmapIndex = reader.Read(ES3Type_int.Instance); - break; - case "realtimeLightmapIndex": - instance.realtimeLightmapIndex = reader.Read(ES3Type_int.Instance); - break; - case "lightmapScaleOffset": - instance.lightmapScaleOffset = reader.Read(ES3Type_Vector4.Instance); - break; - case "motionVectorGenerationMode": - instance.motionVectorGenerationMode = reader.Read(); - break; - case "realtimeLightmapScaleOffset": - instance.realtimeLightmapScaleOffset = reader.Read(ES3Type_Vector4.Instance); - break; - case "lightProbeUsage": - instance.lightProbeUsage = reader.Read(); - break; - case "lightProbeProxyVolumeOverride": - instance.lightProbeProxyVolumeOverride = reader.Read(ES3Type_GameObject.Instance); - break; - case "probeAnchor": - instance.probeAnchor = reader.Read(ES3Type_Transform.Instance); - break; - case "reflectionProbeUsage": - instance.reflectionProbeUsage = reader.Read(); - break; - case "sortingLayerName": - instance.sortingLayerName = reader.Read(ES3Type_string.Instance); - break; - case "sortingLayerID": - instance.sortingLayerID = reader.Read(ES3Type_int.Instance); - break; - case "sortingOrder": - instance.sortingOrder = reader.Read(ES3Type_int.Instance); - break; - case "blendShapeWeights": - var blendShapeWeights = reader.Read(ES3Type_floatArray.Instance); - if (instance.sharedMesh == null) break; - if (blendShapeWeights.Length != instance.sharedMesh.blendShapeCount) - ES3Internal.ES3Debug.LogError("The number of blend shape weights we are loading does not match the number of blend shapes in this SkinnedMeshRenderer's Mesh"); - for (int i = 0; i < blendShapeWeights.Length; i++) - instance.SetBlendShapeWeight(i, blendShapeWeights[i]); - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_SkinnedMeshRendererArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_SkinnedMeshRendererArray() : base(typeof(UnityEngine.SkinnedMeshRenderer[]), ES3Type_SkinnedMeshRenderer.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SkinnedMeshRenderer.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SkinnedMeshRenderer.cs.meta deleted file mode 100644 index be24b9c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SkinnedMeshRenderer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c60a9d4280a1740059c9784d75d00ad9 -timeCreated: 1519132296 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Sprite.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Sprite.cs deleted file mode 100644 index 3f8c1d2..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Sprite.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("texture", "rect", "pivot", "pixelsPerUnit", "border")] - public class ES3Type_Sprite : ES3UnityObjectType - { - public static ES3Type Instance = null; - - public ES3Type_Sprite() : base(typeof(UnityEngine.Sprite)) { Instance = this; } - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = (UnityEngine.Sprite)obj; - - writer.WriteProperty("texture", instance.texture, ES3Type_Texture2D.Instance); - writer.WriteProperty("rect", instance.rect, ES3Type_Rect.Instance); - // Pivot value is in pixels, but we require a normalised pivot when using Sprite.Create during loading, so we normalise it here. - writer.WriteProperty("pivot", new Vector2(instance.pivot.x / instance.texture.width, instance.pivot.y / instance.texture.height), ES3Type_Vector2.Instance); - writer.WriteProperty("pixelsPerUnit", instance.pixelsPerUnit, ES3Type_float.Instance); - writer.WriteProperty("border", instance.border, ES3Type_Vector4.Instance); - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - foreach (string propertyName in reader.Properties) - reader.Skip(); - } - - protected override object ReadUnityObject(ES3Reader reader) - { - Texture2D texture = null; - Rect rect = Rect.zero; - Vector2 pivot = Vector2.zero; - float pixelsPerUnit = 0; - Vector4 border = Vector4.zero; - - foreach (string propertyName in reader.Properties) - { - switch (propertyName) - { - case "texture": - texture = reader.Read(ES3Type_Texture2D.Instance); - break; - case "textureRect": - case "rect": - rect = reader.Read(ES3Type_Rect.Instance); - break; - case "pivot": - pivot = reader.Read(ES3Type_Vector2.Instance); - break; - case "pixelsPerUnit": - pixelsPerUnit = reader.Read(ES3Type_float.Instance); - break; - case "border": - border = reader.Read(ES3Type_Vector4.Instance); - break; - default: - reader.Skip(); - break; - } - } - - return Sprite.Create(texture, rect, pivot, pixelsPerUnit, 0, SpriteMeshType.Tight, border); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Sprite.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Sprite.cs.meta deleted file mode 100644 index 24da62d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Sprite.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: dd9947bd586c04b26ae52e608a032be9 -timeCreated: 1519132298 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SpriteRenderer.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SpriteRenderer.cs deleted file mode 100644 index 5b53084..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SpriteRenderer.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("sprite", "color", "flipX", "flipY", "enabled", "shadowCastingMode", "receiveShadows", "sharedMaterials", "lightmapIndex", "realtimeLightmapIndex", "lightmapScaleOffset", "motionVectorGenerationMode", "realtimeLightmapScaleOffset", "lightProbeUsage", "lightProbeProxyVolumeOverride", "probeAnchor", "reflectionProbeUsage", "sortingLayerName", "sortingLayerID", "sortingOrder")] - public class ES3Type_SpriteRenderer : ES3ComponentType - { - public static ES3Type Instance = null; - - public ES3Type_SpriteRenderer() : base(typeof(UnityEngine.SpriteRenderer)) - { - Instance = this; - } - - protected override void WriteComponent(object obj, ES3Writer writer) - { - var instance = (UnityEngine.SpriteRenderer)obj; - - writer.WriteProperty("sprite", instance.sprite); - writer.WriteProperty("color", instance.color, ES3Type_Color.Instance); - writer.WriteProperty("flipX", instance.flipX, ES3Type_bool.Instance); - writer.WriteProperty("flipY", instance.flipY, ES3Type_bool.Instance); - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("shadowCastingMode", instance.shadowCastingMode); - writer.WriteProperty("receiveShadows", instance.receiveShadows, ES3Type_bool.Instance); - writer.WriteProperty("sharedMaterials", instance.sharedMaterials); - writer.WriteProperty("lightmapIndex", instance.lightmapIndex, ES3Type_int.Instance); - writer.WriteProperty("realtimeLightmapIndex", instance.realtimeLightmapIndex, ES3Type_int.Instance); - writer.WriteProperty("lightmapScaleOffset", instance.lightmapScaleOffset, ES3Type_Vector4.Instance); - writer.WriteProperty("motionVectorGenerationMode", instance.motionVectorGenerationMode); - writer.WriteProperty("realtimeLightmapScaleOffset", instance.realtimeLightmapScaleOffset, ES3Type_Vector4.Instance); - writer.WriteProperty("lightProbeUsage", instance.lightProbeUsage); - writer.WriteProperty("lightProbeProxyVolumeOverride", instance.lightProbeProxyVolumeOverride, ES3Type_GameObject.Instance); - writer.WriteProperty("probeAnchor", instance.probeAnchor, ES3Type_Transform.Instance); - writer.WriteProperty("reflectionProbeUsage", instance.reflectionProbeUsage); - writer.WriteProperty("sortingLayerName", instance.sortingLayerName, ES3Type_string.Instance); - writer.WriteProperty("sortingLayerID", instance.sortingLayerID, ES3Type_int.Instance); - writer.WriteProperty("sortingOrder", instance.sortingOrder, ES3Type_int.Instance); - } - - protected override void ReadComponent(ES3Reader reader, object obj) - { - var instance = (UnityEngine.SpriteRenderer)obj; - foreach(string propertyName in reader.Properties) - { - switch(propertyName) - { - case "sprite": - instance.sprite = reader.Read(ES3Type_Sprite.Instance); - break; - case "color": - instance.color = reader.Read(ES3Type_Color.Instance); - break; - case "flipX": - instance.flipX = reader.Read(ES3Type_bool.Instance); - break; - case "flipY": - instance.flipY = reader.Read(ES3Type_bool.Instance); - break; - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "shadowCastingMode": - instance.shadowCastingMode = reader.Read(); - break; - case "receiveShadows": - instance.receiveShadows = reader.Read(ES3Type_bool.Instance); - break; - case "sharedMaterials": - instance.sharedMaterials = reader.Read(); - break; - case "lightmapIndex": - instance.lightmapIndex = reader.Read(ES3Type_int.Instance); - break; - case "realtimeLightmapIndex": - instance.realtimeLightmapIndex = reader.Read(ES3Type_int.Instance); - break; - case "lightmapScaleOffset": - instance.lightmapScaleOffset = reader.Read(ES3Type_Vector4.Instance); - break; - case "motionVectorGenerationMode": - instance.motionVectorGenerationMode = reader.Read(); - break; - case "realtimeLightmapScaleOffset": - instance.realtimeLightmapScaleOffset = reader.Read(ES3Type_Vector4.Instance); - break; - case "lightProbeUsage": - instance.lightProbeUsage = reader.Read(); - break; - case "lightProbeProxyVolumeOverride": - instance.lightProbeProxyVolumeOverride = reader.Read(ES3Type_GameObject.Instance); - break; - case "probeAnchor": - instance.probeAnchor = reader.Read(ES3Type_Transform.Instance); - break; - case "reflectionProbeUsage": - instance.reflectionProbeUsage = reader.Read(); - break; - case "sortingLayerName": - instance.sortingLayerName = reader.Read(ES3Type_string.Instance); - break; - case "sortingLayerID": - instance.sortingLayerID = reader.Read(ES3Type_int.Instance); - break; - case "sortingOrder": - instance.sortingOrder = reader.Read(ES3Type_int.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } - - public class ES3Type_SpriteRendererArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_SpriteRendererArray() : base(typeof(UnityEngine.SpriteRenderer[]), ES3Type_SpriteRenderer.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SpriteRenderer.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SpriteRenderer.cs.meta deleted file mode 100644 index f5cf21b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SpriteRenderer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f9f81f5e14f124e78877586f0b733864 -timeCreated: 1519132301 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SubEmittersModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SubEmittersModule.cs deleted file mode 100644 index 5b5a085..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_SubEmittersModule.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("properties", "systems", "types")] - public class ES3Type_SubEmittersModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_SubEmittersModule() : base(typeof(UnityEngine.ParticleSystem.SubEmittersModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.SubEmittersModule)obj; - - var seProperties = new ParticleSystemSubEmitterProperties[instance.subEmittersCount]; - var seSystems = new ParticleSystem[instance.subEmittersCount]; - var seTypes = new ParticleSystemSubEmitterType[instance.subEmittersCount]; - - for(int i=0; i(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.SubEmittersModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.SubEmittersModule)obj; - - ParticleSystemSubEmitterProperties[] seProperties = null; - ParticleSystem[] seSystems = null; - ParticleSystemSubEmitterType[] seTypes = null; - - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "properties": - seProperties = reader.Read(new ES3ArrayType(typeof(ParticleSystemSubEmitterProperties[]))); - break; - case "systems": - seSystems = reader.Read(); - break; - case "types": - seTypes = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - - if(seProperties != null) - { - for(int i=0; i(ES3Reader reader, object obj) - { - if (obj.GetType () == typeof(Texture2D)) - ES3Type_Texture2D.Instance.ReadInto(reader, obj); - else - throw new NotSupportedException ("Textures of type "+obj.GetType()+" are not currently supported."); - } - - public override object Read(ES3Reader reader) - { - return ES3Type_Texture2D.Instance.Read(reader); - } - } - - public class ES3Type_TextureArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_TextureArray() : base(typeof(UnityEngine.Texture[]), ES3Type_Texture.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture.cs.meta deleted file mode 100644 index 7429668..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 615cb2cf345144f858b56b5ff6690a9f -timeCreated: 1536306115 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture2D.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture2D.cs deleted file mode 100644 index 1a06a8c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture2D.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("filterMode", "anisoLevel", "wrapMode", "mipMapBias", "rawTextureData")] - public class ES3Type_Texture2D : ES3UnityObjectType - { - public static ES3Type Instance = null; - - public ES3Type_Texture2D() : base(typeof(Texture2D)){ Instance = this; } - - protected override void WriteUnityObject(object obj, ES3Writer writer) - { - var instance = (Texture2D)obj; - - if (!IsReadable(instance)) - { - ES3Internal.ES3Debug.LogWarning("Easy Save cannot save the pixels or properties of this Texture because it is not read/write enabled, so Easy Save will store it by reference instead. To save the pixel data, check the 'Read/Write Enabled' checkbox in the Texture's import settings. Clicking this warning will take you to the Texture, assuming it is not generated at runtime.", instance); - return; - } - - writer.WriteProperty("width", instance.width, ES3Type_int.Instance); - writer.WriteProperty("height", instance.height, ES3Type_int.Instance); - writer.WriteProperty("format", instance.format); - writer.WriteProperty("mipmapCount", instance.mipmapCount, ES3Type_int.Instance); - writer.WriteProperty("filterMode", instance.filterMode); - writer.WriteProperty("anisoLevel", instance.anisoLevel, ES3Type_int.Instance); - writer.WriteProperty("wrapMode", instance.wrapMode); - writer.WriteProperty("mipMapBias", instance.mipMapBias, ES3Type_float.Instance); - writer.WriteProperty("rawTextureData", instance.GetRawTextureData(), ES3Type_byteArray.Instance); - } - - protected override void ReadUnityObject(ES3Reader reader, object obj) - { - if (obj == null) - return; - - if (obj.GetType() == typeof(RenderTexture)) - { - ES3Type_RenderTexture.Instance.ReadInto(reader, obj); - return; - } - - var instance = (Texture2D)obj; - - if (!IsReadable(instance)) - ES3Internal.ES3Debug.LogWarning($"Easy Save cannot load the properties or pixels for this Texture {instance.name} because it is not read/write enabled, so it will be loaded by reference. To load the properties and pixels for this Texture, check the 'Read/Write Enabled' checkbox in its Import Settings.", instance); - - foreach (string propertyName in reader.Properties) - { - // If this Texture isn't readable, we should skip past all of its properties. - if (!IsReadable(instance)) - { - reader.Skip(); - continue; - } - - switch (propertyName) - { - case "filterMode": - instance.filterMode = reader.Read(); - break; - case "anisoLevel": - instance.anisoLevel = reader.Read(ES3Type_int.Instance); - break; - case "wrapMode": - instance.wrapMode = reader.Read(); - break; - case "mipMapBias": - instance.mipMapBias = reader.Read(ES3Type_float.Instance); - break; - case "rawTextureData": - // LoadRawTextureData requires that the correct width, height, TextureFormat and mipMaps are set before being called. - // If an error occurs here, it's likely that we're using LoadInto to load into a Texture which differs in these values. - // In this case, LoadInto should be avoided and Load should be used instead. - if (!IsReadable(instance)) - { - ES3Internal.ES3Debug.LogWarning("Easy Save cannot load the pixels of this Texture because it is not read/write enabled, so Easy Save will ignore the pixel data. To load the pixel data, check the 'Read/Write Enabled' checkbox in the Texture's import settings. Clicking this warning will take you to the Texture, assuming it is not generated at runtime.", instance); - reader.Skip(); - } - else - { - try - { - instance.LoadRawTextureData(reader.Read(ES3Type_byteArray.Instance)); - instance.Apply(); - } - catch(Exception e) - { - ES3Internal.ES3Debug.LogError("Easy Save encountered an error when trying to load this Texture, please see the end of this messasge for the error. This is most likely because the Texture format of the instance we are loading into is different to the Texture we saved.\n"+e.ToString(), instance); - } - } - break; - default: - reader.Skip(); - break; - } - } - } - - protected override object ReadUnityObject(ES3Reader reader) - { - var instance = new Texture2D( reader.Read(ES3Type_int.Instance), // Property name has already been read in ES3UnityObjectType, so we only need to read the value. - reader.ReadProperty(ES3Type_int.Instance), - reader.ReadProperty(), - (reader.ReadProperty(ES3Type_int.Instance) > 1)); - ReadObject(reader, instance); - return instance; - } - - protected bool IsReadable(Texture2D instance) - { - #if UNITY_2018_3_OR_NEWER - return instance != null && instance.isReadable; - #else - return true; - #endif - } - } - - public class ES3Type_Texture2DArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Texture2DArray() : base(typeof(Texture2D[]), ES3Type_Texture2D.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture2D.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture2D.cs.meta deleted file mode 100644 index 03717ba..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Texture2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 86d4ce7d016c24d0489778178716fa3d -timeCreated: 1519132290 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TextureSheetAnimationModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TextureSheetAnimationModule.cs deleted file mode 100644 index 2a4608d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TextureSheetAnimationModule.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "numTilesX", "numTilesY", "animation", "useRandomRow", "frameOverTime", "frameOverTimeMultiplier", "startFrame", "startFrameMultiplier", "cycleCount", "rowIndex", "uvChannelMask", "flipU", "flipV")] - public class ES3Type_TextureSheetAnimationModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_TextureSheetAnimationModule() : base(typeof(UnityEngine.ParticleSystem.TextureSheetAnimationModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.TextureSheetAnimationModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("numTilesX", instance.numTilesX, ES3Type_int.Instance); - writer.WriteProperty("numTilesY", instance.numTilesY, ES3Type_int.Instance); - writer.WriteProperty("animation", instance.animation); -#if UNITY_2019_1_OR_NEWER - writer.WriteProperty("useRandomRow", instance.rowMode); -#else - writer.WriteProperty("useRandomRow", instance.useRandomRow, ES3Type_bool.Instance); -#endif - writer.WriteProperty("frameOverTime", instance.frameOverTime, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("frameOverTimeMultiplier", instance.frameOverTimeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("startFrame", instance.startFrame, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("startFrameMultiplier", instance.startFrameMultiplier, ES3Type_float.Instance); - writer.WriteProperty("cycleCount", instance.cycleCount, ES3Type_int.Instance); - writer.WriteProperty("rowIndex", instance.rowIndex, ES3Type_int.Instance); - writer.WriteProperty("uvChannelMask", instance.uvChannelMask); - //writer.WriteProperty("flipU", instance.flipU, ES3Type_float.Instance); - //writer.WriteProperty("flipV", instance.flipV, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.TextureSheetAnimationModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.TextureSheetAnimationModule)obj; - string propertyName; - while ((propertyName = reader.ReadPropertyName()) != null) - { - switch (propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "numTilesX": - instance.numTilesX = reader.Read(ES3Type_int.Instance); - break; - case "numTilesY": - instance.numTilesY = reader.Read(ES3Type_int.Instance); - break; - case "animation": - instance.animation = reader.Read(); - break; -#if UNITY_2019_1_OR_NEWER - case "rowMode": - instance.rowMode = reader.Read(); - break; -#else - case "useRandomRow": - instance.useRandomRow = reader.Read(ES3Type_bool.Instance); - break; -#endif - case "frameOverTime": - instance.frameOverTime = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "frameOverTimeMultiplier": - instance.frameOverTimeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "startFrame": - instance.startFrame = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "startFrameMultiplier": - instance.startFrameMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "cycleCount": - instance.cycleCount = reader.Read(ES3Type_int.Instance); - break; - case "rowIndex": - instance.rowIndex = reader.Read(ES3Type_int.Instance); - break; - case "uvChannelMask": - instance.uvChannelMask = reader.Read(); - break; - /*case "flipU": - instance.flipU = reader.Read(ES3Type_float.Instance); - break; - case "flipV": - instance.flipV = reader.Read(ES3Type_float.Instance); - break;*/ - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TextureSheetAnimationModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TextureSheetAnimationModule.cs.meta deleted file mode 100644 index 9f58775..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TextureSheetAnimationModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 059be233c84494c01be9f48a8be8e89e -timeCreated: 1519132279 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TrailModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TrailModule.cs deleted file mode 100644 index 4009e68..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TrailModule.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "ratio", "lifetime", "lifetimeMultiplier", "minVertexDistance", "textureMode", "worldSpace", "dieWithParticles", "sizeAffectsWidth", "sizeAffectsLifetime", "inheritParticleColor", "colorOverLifetime", "widthOverTrail", "widthOverTrailMultiplier", "colorOverTrail")] - public class ES3Type_TrailModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_TrailModule() : base(typeof(UnityEngine.ParticleSystem.TrailModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.TrailModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("ratio", instance.ratio, ES3Type_float.Instance); - writer.WriteProperty("lifetime", instance.lifetime, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("lifetimeMultiplier", instance.lifetimeMultiplier, ES3Type_float.Instance); - writer.WriteProperty("minVertexDistance", instance.minVertexDistance, ES3Type_float.Instance); - writer.WriteProperty("textureMode", instance.textureMode); - writer.WriteProperty("worldSpace", instance.worldSpace, ES3Type_bool.Instance); - writer.WriteProperty("dieWithParticles", instance.dieWithParticles, ES3Type_bool.Instance); - writer.WriteProperty("sizeAffectsWidth", instance.sizeAffectsWidth, ES3Type_bool.Instance); - writer.WriteProperty("sizeAffectsLifetime", instance.sizeAffectsLifetime, ES3Type_bool.Instance); - writer.WriteProperty("inheritParticleColor", instance.inheritParticleColor, ES3Type_bool.Instance); - writer.WriteProperty("colorOverLifetime", instance.colorOverLifetime, ES3Type_MinMaxGradient.Instance); - writer.WriteProperty("widthOverTrail", instance.widthOverTrail, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("widthOverTrailMultiplier", instance.widthOverTrailMultiplier, ES3Type_float.Instance); - writer.WriteProperty("colorOverTrail", instance.colorOverTrail, ES3Type_MinMaxGradient.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.TrailModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.TrailModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "ratio": - instance.ratio = reader.Read(ES3Type_float.Instance); - break; - case "lifetime": - instance.lifetime = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "lifetimeMultiplier": - instance.lifetimeMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "minVertexDistance": - instance.minVertexDistance = reader.Read(ES3Type_float.Instance); - break; - case "textureMode": - instance.textureMode = reader.Read(); - break; - case "worldSpace": - instance.worldSpace = reader.Read(ES3Type_bool.Instance); - break; - case "dieWithParticles": - instance.dieWithParticles = reader.Read(ES3Type_bool.Instance); - break; - case "sizeAffectsWidth": - instance.sizeAffectsWidth = reader.Read(ES3Type_bool.Instance); - break; - case "sizeAffectsLifetime": - instance.sizeAffectsLifetime = reader.Read(ES3Type_bool.Instance); - break; - case "inheritParticleColor": - instance.inheritParticleColor = reader.Read(ES3Type_bool.Instance); - break; - case "colorOverLifetime": - instance.colorOverLifetime = reader.Read(ES3Type_MinMaxGradient.Instance); - break; - case "widthOverTrail": - instance.widthOverTrail = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "widthOverTrailMultiplier": - instance.widthOverTrailMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "colorOverTrail": - instance.colorOverTrail = reader.Read(ES3Type_MinMaxGradient.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TrailModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TrailModule.cs.meta deleted file mode 100644 index bdb0464..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TrailModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 56ad47761f46a452b84d1efde61de80c -timeCreated: 1519132285 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TriggerModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TriggerModule.cs deleted file mode 100644 index 20a4a5b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TriggerModule.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "inside", "outside", "enter", "exit", "radiusScale")] - public class ES3Type_TriggerModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_TriggerModule() : base(typeof(UnityEngine.ParticleSystem.TriggerModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.TriggerModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("inside", instance.inside); - writer.WriteProperty("outside", instance.outside); - writer.WriteProperty("enter", instance.enter); - writer.WriteProperty("exit", instance.exit); - writer.WriteProperty("radiusScale", instance.radiusScale, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.TriggerModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.TriggerModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "inside": - instance.inside = reader.Read(); - break; - case "outside": - instance.outside = reader.Read(); - break; - case "enter": - instance.enter = reader.Read(); - break; - case "exit": - instance.exit = reader.Read(); - break; - case "radiusScale": - instance.radiusScale = reader.Read(ES3Type_float.Instance); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TriggerModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TriggerModule.cs.meta deleted file mode 100644 index 9aed376..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_TriggerModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7cf3d6f533d04498fb0601796570f998 -timeCreated: 1519132289 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2.cs deleted file mode 100644 index 3ba779d..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("x", "y")] - public class ES3Type_Vector2 : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Vector2() : base(typeof(Vector2)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Vector2 casted = (Vector2)obj; - writer.WriteProperty("x", casted.x, ES3Type_float.Instance); - writer.WriteProperty("y", casted.y, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Vector2( reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } - - public class ES3Type_Vector2Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Vector2Array() : base(typeof(Vector2[]), ES3Type_Vector2.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2.cs.meta deleted file mode 100644 index 6d94ec3..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6cdccaf6dcab94e45931bf15d2a90640 -timeCreated: 1519132287 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2Int.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2Int.cs deleted file mode 100644 index 79f8e03..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2Int.cs +++ /dev/null @@ -1,42 +0,0 @@ -#if UNITY_2017_2_OR_NEWER -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("x", "y")] - public class ES3Type_Vector2Int : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Vector2Int() : base(typeof(Vector2Int)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Vector2Int casted = (Vector2Int)obj; - writer.WriteProperty("x", casted.x, ES3Type_int.Instance); - writer.WriteProperty("y", casted.y, ES3Type_int.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Vector2Int( reader.ReadProperty(ES3Type_int.Instance), - reader.ReadProperty(ES3Type_int.Instance)); - } - } - - public class ES3Type_Vector2IntArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Vector2IntArray() : base(typeof(Vector2Int[]), ES3Type_Vector2Int.Instance) - { - Instance = this; - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2Int.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2Int.cs.meta deleted file mode 100644 index a8cc143..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector2Int.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d4ce5526a479a4cdab37fa9c10dc3964 -timeCreated: 1519132287 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3.cs deleted file mode 100644 index dd4da36..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3Properties("x", "y", "z")] - public class ES3Type_Vector3 : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Vector3() : base(typeof(Vector3)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Vector3 casted = (Vector3)obj; - writer.WriteProperty("x", casted.x, ES3Type_float.Instance); - writer.WriteProperty("y", casted.y, ES3Type_float.Instance); - writer.WriteProperty("z", casted.z, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Vector3( reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - } - - public class ES3Type_Vector3Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Vector3Array() : base(typeof(Vector3[]), ES3Type_Vector3.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3.cs.meta deleted file mode 100644 index 80e53bb..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 65ba0614942de49678702985ca4ca357 -timeCreated: 1519132287 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3Int.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3Int.cs deleted file mode 100644 index 552a817..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3Int.cs +++ /dev/null @@ -1,44 +0,0 @@ -#if UNITY_2017_2_OR_NEWER -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("x", "y", "z")] - public class ES3Type_Vector3Int : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Vector3Int() : base(typeof(Vector3Int)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Vector3Int casted = (Vector3Int)obj; - writer.WriteProperty("x", casted.x, ES3Type_int.Instance); - writer.WriteProperty("y", casted.y, ES3Type_int.Instance); - writer.WriteProperty("z", casted.z, ES3Type_int.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Vector3Int( reader.ReadProperty(ES3Type_int.Instance), - reader.ReadProperty(ES3Type_int.Instance), - reader.ReadProperty(ES3Type_int.Instance)); - } - } - - public class ES3Type_Vector3IntArray : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Vector3IntArray() : base(typeof(Vector3Int[]), ES3Type_Vector3Int.Instance) - { - Instance = this; - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3Int.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3Int.cs.meta deleted file mode 100644 index cf4d455..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector3Int.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7e3a1d8e6e8144f71a61562fc86b2b2c -timeCreated: 1519132287 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector4.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector4.cs deleted file mode 100644 index 5782c43..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector4.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("x", "y", "z", "w")] - public class ES3Type_Vector4 : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_Vector4() : base(typeof(Vector4)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - Vector4 casted = (Vector4)obj; - writer.WriteProperty("x", casted.x, ES3Type_float.Instance); - writer.WriteProperty("y", casted.y, ES3Type_float.Instance); - writer.WriteProperty("z", casted.z, ES3Type_float.Instance); - writer.WriteProperty("w", casted.w, ES3Type_float.Instance); - } - - public override object Read(ES3Reader reader) - { - return new Vector4( reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance), - reader.ReadProperty(ES3Type_float.Instance)); - } - - public static bool Equals(Vector4 a, Vector4 b) - { - return (Mathf.Approximately(a.x,b.x) && Mathf.Approximately(a.y,b.y) && Mathf.Approximately(a.z,b.z) && Mathf.Approximately(a.w,b.w)); - } - } - - public class ES3Type_Vector4Array : ES3ArrayType - { - public static ES3Type Instance; - - public ES3Type_Vector4Array() : base(typeof(Vector4[]), ES3Type_Vector4.Instance) - { - Instance = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector4.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector4.cs.meta deleted file mode 100644 index 8b99b5c..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_Vector4.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 970684b89a8e24102a42f02a5ed59a66 -timeCreated: 1519132292 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_VelocityOverLifetimeModule.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_VelocityOverLifetimeModule.cs deleted file mode 100644 index c72cd72..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_VelocityOverLifetimeModule.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using UnityEngine; - -namespace ES3Types -{ - [UnityEngine.Scripting.Preserve] - [ES3PropertiesAttribute("enabled", "x", "y", "z", "xMultiplier", "yMultiplier", "zMultiplier", "space")] - public class ES3Type_VelocityOverLifetimeModule : ES3Type - { - public static ES3Type Instance = null; - - public ES3Type_VelocityOverLifetimeModule() : base(typeof(UnityEngine.ParticleSystem.VelocityOverLifetimeModule)) - { - Instance = this; - } - - public override void Write(object obj, ES3Writer writer) - { - var instance = (UnityEngine.ParticleSystem.VelocityOverLifetimeModule)obj; - - writer.WriteProperty("enabled", instance.enabled, ES3Type_bool.Instance); - writer.WriteProperty("x", instance.x, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("y", instance.y, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("z", instance.z, ES3Type_MinMaxCurve.Instance); - writer.WriteProperty("xMultiplier", instance.xMultiplier, ES3Type_float.Instance); - writer.WriteProperty("yMultiplier", instance.yMultiplier, ES3Type_float.Instance); - writer.WriteProperty("zMultiplier", instance.zMultiplier, ES3Type_float.Instance); - writer.WriteProperty("space", instance.space); - } - - public override object Read(ES3Reader reader) - { - var instance = new UnityEngine.ParticleSystem.VelocityOverLifetimeModule(); - ReadInto(reader, instance); - return instance; - } - - public override void ReadInto(ES3Reader reader, object obj) - { - var instance = (UnityEngine.ParticleSystem.VelocityOverLifetimeModule)obj; - string propertyName; - while((propertyName = reader.ReadPropertyName()) != null) - { - switch(propertyName) - { - case "enabled": - instance.enabled = reader.Read(ES3Type_bool.Instance); - break; - case "x": - instance.x = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "y": - instance.y = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "z": - instance.z = reader.Read(ES3Type_MinMaxCurve.Instance); - break; - case "xMultiplier": - instance.xMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "yMultiplier": - instance.yMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "zMultiplier": - instance.zMultiplier = reader.Read(ES3Type_float.Instance); - break; - case "space": - instance.space = reader.Read(); - break; - default: - reader.Skip(); - break; - } - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_VelocityOverLifetimeModule.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_VelocityOverLifetimeModule.cs.meta deleted file mode 100644 index a344c8b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_VelocityOverLifetimeModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a4884364ae36a4916a8bc2bd6e5e9683 -timeCreated: 1519132293 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/UnityObjectType.cs b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/UnityObjectType.cs deleted file mode 100644 index 976750e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/UnityObjectType.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -public class UnityObjectType : MonoBehaviour -{ - public List objs; // Assign to this in the Editor - - void Start() - { - if(!ES3.KeyExists("this")) - ES3.Save("this", this); - else - ES3.LoadInto("this", this); - - foreach(var obj in objs) - Debug.Log(obj); - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/UnityObjectType.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/UnityObjectType.cs.meta deleted file mode 100644 index 412fb55..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/UnityObjectType.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 871617aa2d4bcfe428d9625de50b8f65 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Web.meta b/Assets/Plugins/Easy Save 3/Scripts/Web.meta deleted file mode 100644 index 454424f..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Web.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a31790717a932467d825f30d95c413bb -folderAsset: yes -timeCreated: 1500448038 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3Cloud.cs b/Assets/Plugins/Easy Save 3/Scripts/Web/ES3Cloud.cs deleted file mode 100644 index 7f7fac2..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3Cloud.cs +++ /dev/null @@ -1,757 +0,0 @@ -#if !DISABLE_WEB -using System.Collections; -using System.Collections.Generic; -using System.Text; -using UnityEngine; -using UnityEngine.Networking; -using System; -using ES3Internal; - -#if UNITY_VISUAL_SCRIPTING -[Unity.VisualScripting.IncludeInSettings(true)] -#elif BOLT_VISUAL_SCRIPTING -[Ludiq.IncludeInSettings(true)] -#endif -public class ES3Cloud : ES3WebClass -{ - int timeout = 20; - - /// Constructs an new ES3Cloud object with the given URL to an ES3.php file. - /// The URL of the ES3.php file on your server you want to use. - public ES3Cloud(string url, string apiKey) : base(url, apiKey) - { - } - - public ES3Cloud(string url, string apiKey, int timeout) : base(url, apiKey) - { - this.timeout = timeout; - } - - #region Downloaded Data Handling - - /// The encoding to use when encoding and decoding data as strings. - public System.Text.Encoding encoding = System.Text.Encoding.UTF8; - - - private byte[] _data = null; - /// Any downloaded data, if applicable. This may also contain an error message, so you should check the 'ifError' variable before reading data. - public byte[] data - { - get{ return _data; } - } - - /// The downloaded data as text, decoded using the encoding specified by the 'encoding' variable. - public string text - { - get - { - if(data == null) - return null; - return encoding.GetString(data); - } - } - - /// An array of filenames downloaded from the server. This must only be accessed after calling the 'DownloadFilenames' routine. - public string[] filenames - { - get - { - if(data == null || data.Length == 0) - return new string[0]; - return text.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries); - } - - } - - /// A UTC DateTime object representing the date and time a file on the server was last updated. This should only be called after calling the 'DownloadTimestamp' routine. - public DateTime timestamp - { - get - { - if(data == null || data.Length == 0) - return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - - double timestamp; - if(!double.TryParse(text, out timestamp)) - throw new FormatException("Could not convert downloaded data to a timestamp. Data downloaded was: " + text); - - return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(timestamp); - } - } - - #endregion - - #region Sync - - /// Synchronises the default file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - public IEnumerator Sync() - { - return Sync(new ES3Settings(), "", ""); - } - - /// Synchronises a local file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - /// The relative or absolute path of the local file we want to synchronise. - public IEnumerator Sync(string filePath) - { - return Sync(new ES3Settings(filePath), "", ""); - } - - /// Synchronises a local file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - /// The relative or absolute path of the local file we want to synchronise. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator Sync(string filePath, string user) - { - return Sync(new ES3Settings(filePath), user, ""); - } - - /// Synchronises a local file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - /// The relative or absolute path of the local file we want to synchronise. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator Sync(string filePath, string user, string password) - { - return Sync(new ES3Settings(filePath), user, password); - } - - /// Synchronises a local file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - /// The relative or absolute path of the local file we want to synchronise. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - /// The settings we want to use to override the default settings. - public IEnumerator Sync(string filePath, ES3Settings settings) - { - return Sync(new ES3Settings(filePath, settings), "", ""); - } - - /// Synchronises a local file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - /// The relative or absolute path of the file we want to use. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The settings we want to use to override the default settings. - public IEnumerator Sync(string filePath, string user, ES3Settings settings) - { - return Sync(new ES3Settings(filePath, settings), user, ""); - } - - /// Synchronises a local file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - /// The relative or absolute path of the local file we want to synchronise. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - /// The settings we want to use to override the default settings. - public IEnumerator Sync(string filePath, string user, string password, ES3Settings settings) - { - return Sync(new ES3Settings(filePath, settings), user, password); - } - - /// Synchronises a local file with a file on the server. If the file on the server is newer than the local copy, the local file will be overwritten by the file on the server. Otherwise, the file on the server will be overwritten. - /// The settings we want to use to override the default settings. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - private IEnumerator Sync(ES3Settings settings, string user, string password) - { - Reset(); - - yield return DownloadFile(settings, user, password, GetFileTimestamp(settings)); - - if(errorCode == 3) - { - // Clear the error. - Reset(); - - // File does not exist on server, or is older than locally stored data, so upload the local file to the server if it exists. - if(ES3.FileExists(settings)) - yield return UploadFile(settings, user, password); - } - - isDone = true; - } - - #endregion - - #region UploadFile - - /// Uploads the default file to the server, overwriting any existing file. - public IEnumerator UploadFile() - { - return UploadFile(new ES3Settings(), "", ""); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// The relative or absolute path of the file we want to use. - public IEnumerator UploadFile(string filePath) - { - return UploadFile(new ES3Settings(filePath), "", ""); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// The relative or absolute path of the file we want to use. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator UploadFile(string filePath, string user) - { - return UploadFile(new ES3Settings(filePath), user, ""); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// The relative or absolute path of the file we want to use. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator UploadFile(string filePath, string user, string password) - { - return UploadFile(new ES3Settings(filePath), user, password); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// The relative or absolute path of the file we want to use. - /// The settings we want to use to override the default settings. - public IEnumerator UploadFile(string filePath, ES3Settings settings) - { - return UploadFile(new ES3Settings(filePath, settings), "", ""); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// The relative or absolute path of the file we want to use. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The settings we want to use to override the default settings. - public IEnumerator UploadFile(string filePath, string user, ES3Settings settings) - { - return UploadFile(new ES3Settings(filePath, settings), user, ""); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// The relative or absolute path of the file we want to use. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - /// The settings we want to use to override the default settings. - public IEnumerator UploadFile(string filePath, string user, string password, ES3Settings settings) - { - return UploadFile(new ES3Settings(filePath, settings), user, password); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// An ES3File containing the data we want to upload. - public IEnumerator UploadFile(ES3File es3File) - { - return UploadFile(es3File.GetBytes(), es3File.settings, "", "", DateTimeToUnixTimestamp(DateTime.Now)); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// An ES3File containing the data we want to upload. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator UploadFile(ES3File es3File, string user) - { - return UploadFile(es3File.GetBytes(), es3File.settings, user, "", DateTimeToUnixTimestamp(DateTime.Now)); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// An ES3File containing the data we want to upload. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator UploadFile(ES3File es3File, string user, string password) - { - return UploadFile(es3File.GetBytes(), es3File.settings, user, password, DateTimeToUnixTimestamp(DateTime.Now)); - } - - /// Uploads a local file to the server, overwriting any existing file. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator UploadFile(ES3Settings settings, string user, string password) - { - return UploadFile(ES3.LoadRawBytes(settings), settings, user, password); - } - - public IEnumerator UploadFile(byte[] bytes, ES3Settings settings, string user, string password) - { - return UploadFile(bytes, settings, user, password, DateTimeToUnixTimestamp(ES3.GetTimestamp(settings))); - } - - private IEnumerator UploadFile(byte[] bytes, ES3Settings settings, string user, string password, long fileTimestamp) - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("putFile", settings.path); - form.AddField("timestamp", fileTimestamp.ToString()); - form.AddField("user", GetUser(user, password)); - form.AddBinaryData("data", bytes, "data.dat", "multipart/form-data"); - - using(var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - yield return SendWebRequest(webRequest); - HandleError(webRequest, true); - } - - isDone = true; - } - - #endregion - - #region DownloadFile - - /// Downloads the default file from the server and saves it locally, overwriting the existing local default file. An error is returned if the file does not exist. - public IEnumerator DownloadFile() - { - return DownloadFile(new ES3Settings(), "", "", 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The relative or absolute path of the file we want to download. - public IEnumerator DownloadFile(string filePath) - { - return DownloadFile(new ES3Settings(filePath), "", "", 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The relative or absolute path of the file we want to download. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator DownloadFile(string filePath, string user) - { - return DownloadFile(new ES3Settings(filePath), user, "", 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The relative or absolute path of the file we want to download. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator DownloadFile(string filePath, string user, string password) - { - return DownloadFile(new ES3Settings(filePath), user, password, 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The relative or absolute path of the file we want to download. - /// The settings we want to use to override the default settings. - public IEnumerator DownloadFile(string filePath, ES3Settings settings) - { - return DownloadFile(new ES3Settings(filePath, settings), "", "", 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The relative or absolute path of the file we want to download. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The settings we want to use to override the default settings. - public IEnumerator DownloadFile(string filePath, string user, ES3Settings settings) - { - return DownloadFile(new ES3Settings(filePath, settings), user, "", 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The relative or absolute path of the file we want to download. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - /// The settings we want to use to override the default settings. - public IEnumerator DownloadFile(string filePath, string user, string password, ES3Settings settings) - { - return DownloadFile(new ES3Settings(filePath, settings), user, password, 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The ES3File we want to load our data into. The filename in the settings of the ES3File will be used when downloading. - public IEnumerator DownloadFile(ES3File es3File) - { - return DownloadFile(es3File, "", "", 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The ES3File we want to load our data into. The filename in the settings of the ES3File will be used when downloading. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator DownloadFile(ES3File es3File, string user) - { - return DownloadFile(es3File, user, "", 0); - } - - /// Downloads a file from the server and saves it locally, overwriting any existing local file. An error is returned if the file does not exist. - /// The ES3File we want to load our data into. The filename in the settings of the ES3File will be used when downloading. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator DownloadFile(ES3File es3File, string user, string password) - { - return DownloadFile(es3File, user, password, 0); - } - - private IEnumerator DownloadFile(ES3File es3File, string user, string password, long timestamp) - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("getFile", es3File.settings.path); - form.AddField("user", GetUser(user, password)); - if(timestamp > 0) - form.AddField("timestamp", timestamp.ToString()); - - using(var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - - yield return SendWebRequest(webRequest); - - if(!HandleError(webRequest, false)) - { - if(webRequest.downloadedBytes > 0) - { - es3File.Clear(); - es3File.SaveRaw(webRequest.downloadHandler.data); - } - else - { - error = string.Format("File {0} was not found on the server.", es3File.settings.path); - errorCode = 3; - } - } - } - - isDone = true; - } - - private IEnumerator DownloadFile(ES3Settings settings, string user, string password, long timestamp) - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("getFile", settings.path); - form.AddField("user", GetUser(user, password)); - if(timestamp > 0) - form.AddField("timestamp", timestamp.ToString()); - - using(var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - - yield return SendWebRequest(webRequest); - if(!HandleError(webRequest, false)) - { - if(webRequest.downloadedBytes > 0) - { - ES3.SaveRaw(webRequest.downloadHandler.data, settings); - } - else - { - error = string.Format("File {0} was not found on the server.", settings.path); - errorCode = 3; - } - } - } - - isDone = true; - } - - #endregion - - #region DeleteFile - - /// Deletes the default file from the server. An error is *not* returned if the file does not exist. - public IEnumerator DeleteFile() - { - return DeleteFile(new ES3Settings(), "", ""); - } - - /// Deletes a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - public IEnumerator DeleteFile(string filePath) - { - return DeleteFile(new ES3Settings(filePath), "", ""); - } - - /// Deletes a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator DeleteFile(string filePath, string user) - { - return DeleteFile(new ES3Settings(filePath), user, ""); - } - - /// Deletes a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator DeleteFile(string filePath, string user, string password) - { - return DeleteFile(new ES3Settings(filePath), user, password); - } - - /// Deletes a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The settings we want to use to override the default settings. - public IEnumerator DeleteFile(string filePath, ES3Settings settings) - { - return DeleteFile(new ES3Settings(filePath, settings), "", ""); - } - - /// Deletes a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The settings we want to use to override the default settings. - public IEnumerator DeleteFile(string filePath, string user, ES3Settings settings) - { - return DeleteFile(new ES3Settings(filePath, settings), user, ""); - } - - /// Deletes a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - /// The settings we want to use to override the default settings. - public IEnumerator DeleteFile(string filePath, string user, string password, ES3Settings settings) - { - return DeleteFile(new ES3Settings(filePath, settings), user, password); - } - - private IEnumerator DeleteFile(ES3Settings settings, string user, string password) - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("deleteFile", settings.path); - form.AddField("user", GetUser(user, password)); - - using(var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - - yield return SendWebRequest(webRequest); - HandleError(webRequest, true); - } - - isDone = true; - } - - #endregion - - #region RenameFile - - /// Renames a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - public IEnumerator RenameFile(string filePath, string newFilePath) - { - return RenameFile(new ES3Settings(filePath), new ES3Settings(newFilePath), "", ""); - } - - /// Renames a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator RenameFile(string filePath, string newFilePath, string user) - { - return RenameFile(new ES3Settings(filePath), new ES3Settings(newFilePath), user, ""); - } - - /// Renames a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator RenameFile(string filePath, string newFilePath, string user, string password) - { - return RenameFile(new ES3Settings(filePath), new ES3Settings(newFilePath), user, password); - } - - /// Renames a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The settings we want to use to override the default settings. - public IEnumerator RenameFile(string filePath, string newFilePath, ES3Settings settings) - { - return RenameFile(new ES3Settings(filePath, settings), new ES3Settings(newFilePath, settings), "", ""); - } - - /// Renames a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The settings we want to use to override the default settings. - public IEnumerator RenameFile(string filePath, string newFilePath, string user, ES3Settings settings) - { - return RenameFile(new ES3Settings(filePath, settings), new ES3Settings(newFilePath, settings), user, ""); - } - - /// Renames a file from the server. An error is *not* returned if the file does not exist. - /// The relative or absolute path of the file we want to delete. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - /// The settings we want to use to override the default settings. - public IEnumerator RenameFile(string filePath, string newFilePath, string user, string password, ES3Settings settings) - { - return RenameFile(new ES3Settings(filePath, settings), new ES3Settings(newFilePath, settings), user, password); - } - - private IEnumerator RenameFile(ES3Settings settings, ES3Settings newSettings, string user, string password) - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("renameFile", settings.path); - form.AddField("newFilename", newSettings.path); - form.AddField("user", GetUser(user, password)); - - using(var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - - yield return SendWebRequest(webRequest); - HandleError(webRequest, true); - } - - isDone = true; - } - - #endregion - - #region DownloadFilenames - - /// Downloads the names of all of the files on the server. Downloaded filenames are stored in the 'filenames' variable of the ES3Cloud object. - /// The unique name of the user we want to find the filenames of. - /// The password of the user we want to find the filenames of. - public IEnumerator DownloadFilenames(string user="", string password="") - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("getFilenames", ""); - form.AddField("user", GetUser(user, password)); - - using(var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - - yield return SendWebRequest(webRequest); - if(!HandleError(webRequest, false)) - _data = webRequest.downloadHandler.data; - } - - isDone = true; - } - - /// Downloads the names of all of the files on the server. Downloaded filenames are stored in the 'filenames' variable of the ES3Cloud object. - /// The unique name of the user we want to find the filenames of. - /// The password of the user we want to find the filenames of. - /// A search pattern containing '%' or '_' wildcards where '%' represents zero, one, or multiple characters, and '_' represents a single character. - public IEnumerator SearchFilenames(string searchPattern, string user="", string password="") - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("getFilenames", ""); - form.AddField("user", GetUser(user, password)); - if (!string.IsNullOrEmpty(searchPattern)) - form.AddField("pattern", searchPattern); - - using (var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - - yield return SendWebRequest(webRequest); - if (!HandleError(webRequest, false)) - _data = webRequest.downloadHandler.data; - } - - isDone = true; - } - - #endregion - - #region DownloadTimestamp - - /// Downloads the timestamp representing when the server file was last updated. The downloaded timestamp is stored in the 'timestamp' variable of the ES3Cloud object. - public IEnumerator DownloadTimestamp() - { - return DownloadTimestamp(new ES3Settings(), "", ""); - } - - /// Downloads the timestamp representing when the server file was last updated. The downloaded timestamp is stored in the 'timestamp' variable of the ES3Cloud object. - /// The relative or absolute path of the file we want to get the timestamp of. - public IEnumerator DownloadTimestamp(string filePath) - { - return DownloadTimestamp(new ES3Settings(filePath), "", ""); - } - - /// Downloads the timestamp representing when the server file was last updated. The downloaded timestamp is stored in the 'timestamp' variable of the ES3Cloud object. - /// The relative or absolute path of the file we want to get the timestamp of. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - public IEnumerator DownloadTimestamp(string filePath, string user) - { - return DownloadTimestamp(new ES3Settings(filePath), user, ""); - } - - /// Downloads the timestamp representing when the server file was last updated. The downloaded timestamp is stored in the 'timestamp' variable of the ES3Cloud object. - /// The relative or absolute path of the file we want to get the timestamp of. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - public IEnumerator DownloadTimestamp(string filePath, string user, string password) - { - return DownloadTimestamp(new ES3Settings(filePath), user, password); - } - - /// Downloads the timestamp representing when the server file was last updated. The downloaded timestamp is stored in the 'timestamp' variable of the ES3Cloud object. - /// The relative or absolute path of the file we want to get the timestamp of. - /// The settings we want to use to override the default settings. - public IEnumerator DownloadTimestamp(string filePath, ES3Settings settings) - { - return DownloadTimestamp(new ES3Settings(filePath, settings), "", ""); - } - - /// Downloads the timestamp representing when the server file was last updated. The downloaded timestamp is stored in the 'timestamp' variable of the ES3Cloud object. - /// The relative or absolute path of the file we want to get the timestamp of. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The settings we want to use to override the default settings. - public IEnumerator DownloadTimestamp(string filePath, string user, ES3Settings settings) - { - return DownloadTimestamp(new ES3Settings(filePath, settings), user, ""); - } - - /// Downloads the timestamp representing when the server file was last updated. The downloaded timestamp is stored in the 'timestamp' variable of the ES3Cloud object. - /// The relative or absolute path of the file we want to get the timestamp of. - /// The unique name of the user this file belongs to, if the file isn't globally accessible. - /// The password of the user this file belongs to. - /// The settings we want to use to override the default settings. - public IEnumerator DownloadTimestamp(string filePath, string user, string password, ES3Settings settings) - { - return DownloadTimestamp(new ES3Settings(filePath, settings), user, password); - } - - private IEnumerator DownloadTimestamp(ES3Settings settings, string user, string password) - { - Reset(); - - var form = CreateWWWForm(); - form.AddField("apiKey", apiKey); - form.AddField("getTimestamp", settings.path); - form.AddField("user", GetUser(user, password)); - - using(var webRequest = UnityWebRequest.Post(url, form)) - { - webRequest.timeout = timeout; - - yield return SendWebRequest(webRequest); - if(!HandleError(webRequest, false)) - _data = webRequest.downloadHandler.data; - } - - isDone = true; - } - - #endregion - - #region Internal Methods - - private long DateTimeToUnixTimestamp(DateTime dt) - { - return Convert.ToInt64((dt.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds); - } - - private long GetFileTimestamp(ES3Settings settings) - { - return DateTimeToUnixTimestamp(ES3.GetTimestamp(settings)); - } - - protected override void Reset() - { - _data = null; - base.Reset(); - } - - #endregion -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3Cloud.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Web/ES3Cloud.cs.meta deleted file mode 100644 index 02e505e..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3Cloud.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e639a3698613946f0951d104a492f138 -timeCreated: 1500448165 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3WebClass.cs b/Assets/Plugins/Easy Save 3/Scripts/Web/ES3WebClass.cs deleted file mode 100644 index b9d8465..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3WebClass.cs +++ /dev/null @@ -1,148 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Networking; - -namespace ES3Internal -{ - public class ES3WebClass - { - protected string url; - protected string apiKey; - - protected List> formData = new List>(); - protected UnityWebRequest _webRequest = null; - - - public bool isDone = false; - public float uploadProgress - { - get - { - if(_webRequest == null) - return 0; - else - return _webRequest.uploadProgress; - } - } - - public float downloadProgress - { - get - { - if(_webRequest == null) - return 0; - else - return _webRequest.downloadProgress; - } - } - - #region Error Handling - - /// An error message, if an error occurred. - public string error = null; - /// This is set to true if an error occurred while performing an operation. - public bool isError{ get{ return !string.IsNullOrEmpty(error) || errorCode > 0; } } - /// The error code relating to the error, if one occurred. If it's a server error, this will return the HTTP error code. - public long errorCode = 0; - - public static bool IsNetworkError(UnityWebRequest www) - { -#if UNITY_2020_1_OR_NEWER - return www.result == UnityWebRequest.Result.ConnectionError; -#else - return www.isNetworkError; -#endif - } - -#endregion - - protected ES3WebClass(string url, string apiKey) - { - this.url = url; - this.apiKey = apiKey; - } - -#region Other Methods - - /// Adds POST data to any requests sent by this ES3Cloud object. Use this if you are sending data to a custom script on your server. - /// The name of the POST field we want to add. - /// The string value of the POST field we want to add. - public void AddPOSTField(string fieldName, string value) - { - formData.Add(new KeyValuePair(fieldName, value)); - } - -#endregion - -#region Internal Methods - - protected string GetUser(string user, string password) - { - if(string.IsNullOrEmpty(user)) - return ""; - // Final user string is a combination of the username and password, and hashed if encryption is enabled. - if(!string.IsNullOrEmpty(password)) - user += password; - -#if !DISABLE_ENCRYPTION && !DISABLE_HASHING - user = ES3Internal.ES3Hash.SHA1Hash(user); -#endif - return user; - } - - protected WWWForm CreateWWWForm() - { - var form = new WWWForm(); - foreach(var kvp in formData) - form.AddField(kvp.Key, kvp.Value); - return form; - } - - /* Checks if an error occurred and sets relevant details, and returns true if an error did occur */ - protected bool HandleError(UnityWebRequest webRequest, bool errorIfDataIsDownloaded) - { - if(IsNetworkError(webRequest)) - { - errorCode = 1; - error = "Error: " + webRequest.error; - } - else if(webRequest.responseCode >= 400) - { - errorCode = webRequest.responseCode; - if(string.IsNullOrEmpty(webRequest.downloadHandler.text)) - error = string.Format("Server returned {0} error with no message", webRequest.responseCode); - else - error = webRequest.downloadHandler.text; - } - else if(errorIfDataIsDownloaded && webRequest.downloadedBytes > 0) - { - errorCode = 2; - error = "Server error: '" + webRequest.downloadHandler.text + "'"; - } - else - return false; - return true; - } - - protected IEnumerator SendWebRequest(UnityWebRequest webRequest) - { - _webRequest = webRequest; -#if !UNITY_2017_2_OR_NEWER - yield return webRequest.Send(); -#else - yield return webRequest.SendWebRequest(); -#endif - } - - protected virtual void Reset() - { - error = null; - errorCode = 0; - isDone = false; - } - - -#endregion - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3WebClass.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Web/ES3WebClass.cs.meta deleted file mode 100644 index c290041..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Web/ES3WebClass.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 338b6919533e14c37afa52e7b0a91a6d -timeCreated: 1502349814 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers.meta b/Assets/Plugins/Easy Save 3/Scripts/Writers.meta deleted file mode 100644 index e867721..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f81e45d5acda04835b484a483f4aa7e0 -folderAsset: yes -timeCreated: 1499764821 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Binary.cs b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Binary.cs deleted file mode 100644 index cadd1e7..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Binary.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System; - -namespace ES3Internal -{ - internal enum ES3SpecialByte : byte - { - Null = 0, - Bool = 1, - Byte = 2, - Sbyte = 3, - Char = 4, - Decimal = 5, - Double = 6, - Float = 7, - Int = 8, - Uint = 9, - Long = 10, - Ulong = 11, - Short = 12, - Ushort = 13, - String = 14, - ByteArray = 15, - Collection = 128, - Dictionary = 129, - CollectionItem = 130, - Object = 254, - Terminator = 255 - } - - internal static class ES3Binary - { - internal const string ObjectTerminator = "."; - - internal static readonly Dictionary IdToType = new Dictionary() - { - { ES3SpecialByte.Null, null }, - { ES3SpecialByte.Bool, typeof(bool)}, - { ES3SpecialByte.Byte, typeof(byte)}, - { ES3SpecialByte.Sbyte, typeof(sbyte)}, - { ES3SpecialByte.Char, typeof(char)}, - { ES3SpecialByte.Decimal, typeof(decimal)}, - { ES3SpecialByte.Double, typeof(double)}, - { ES3SpecialByte.Float, typeof(float)}, - { ES3SpecialByte.Int, typeof(int)}, - { ES3SpecialByte.Uint, typeof(uint)}, - { ES3SpecialByte.Long, typeof(long)}, - { ES3SpecialByte.Ulong, typeof(ulong)}, - { ES3SpecialByte.Short, typeof(short)}, - { ES3SpecialByte.Ushort, typeof(ushort)}, - { ES3SpecialByte.String, typeof(string)}, - { ES3SpecialByte.ByteArray, typeof(byte[])} - }; - - internal static readonly Dictionary TypeToId = new Dictionary() - { - { typeof(bool), ES3SpecialByte.Bool}, - { typeof(byte), ES3SpecialByte.Byte}, - { typeof(sbyte), ES3SpecialByte.Sbyte}, - { typeof(char), ES3SpecialByte.Char}, - { typeof(decimal), ES3SpecialByte.Decimal}, - { typeof(double), ES3SpecialByte.Double}, - { typeof(float), ES3SpecialByte.Float}, - { typeof(int), ES3SpecialByte.Int}, - { typeof(uint), ES3SpecialByte.Uint}, - { typeof(long), ES3SpecialByte.Long}, - { typeof(ulong), ES3SpecialByte.Ulong}, - { typeof(short), ES3SpecialByte.Short}, - { typeof(ushort), ES3SpecialByte.Ushort}, - { typeof(string), ES3SpecialByte.String}, - { typeof(byte[]), ES3SpecialByte.ByteArray} - }; - - internal static ES3SpecialByte TypeToByte(Type type) - { - ES3SpecialByte b; - if (TypeToId.TryGetValue(type, out b)) - return b; - return ES3SpecialByte.Object; - } - - internal static Type ByteToType(ES3SpecialByte b) - { - return ByteToType((byte)b); - } - - internal static Type ByteToType(byte b) - { - Type type; - if (IdToType.TryGetValue((ES3SpecialByte)b, out type)) - return type; - return typeof(object); - } - - internal static bool IsPrimitive(ES3SpecialByte b) - { - switch(b) - { - case ES3SpecialByte.Bool: - case ES3SpecialByte.Byte: - case ES3SpecialByte.Sbyte: - case ES3SpecialByte.Char: - case ES3SpecialByte.Decimal: - case ES3SpecialByte.Double: - case ES3SpecialByte.Float: - case ES3SpecialByte.Int: - case ES3SpecialByte.Uint: - case ES3SpecialByte.Long: - case ES3SpecialByte.Ulong: - case ES3SpecialByte.Short: - case ES3SpecialByte.Ushort: - case ES3SpecialByte.String: - case ES3SpecialByte.ByteArray: - return true; - default: - return false; - } - } - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Binary.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Binary.cs.meta deleted file mode 100644 index 9019d8b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Binary.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9398c7a61f9679e41af5e48cac61f763 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3BinaryWriter.cs b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3BinaryWriter.cs deleted file mode 100644 index 3850d28..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3BinaryWriter.cs +++ /dev/null @@ -1,4 +0,0 @@ -/* - * BinaryWriter is not implemented. - * See this post for more info: https://moodkie.com/forum/viewtopic.php?p=7478#p7478 - */ diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3BinaryWriter.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3BinaryWriter.cs.meta deleted file mode 100644 index 4b787bf..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3BinaryWriter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 890d1774e6bacdc43bf99692dfc5360a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3CacheWriter.cs b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3CacheWriter.cs deleted file mode 100644 index 537480a..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3CacheWriter.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System.Collections.Generic; -using System.Collections; -using System.IO; -using System; -using UnityEngine; -using System.Text; -using System.Globalization; - -namespace ES3Internal -{ - internal class ES3CacheWriter : ES3Writer - { - ES3File es3File; - - internal ES3CacheWriter(ES3Settings settings, bool writeHeaderAndFooter, bool mergeKeys) : base(settings, writeHeaderAndFooter, mergeKeys) - { - es3File = new ES3File(settings); - } - - /* User-facing methods used when writing randomly-accessible Key-Value pairs. */ - #region Write(key, value) Methods - - /// Writes a value to the writer with the given key. - /// The key which uniquely identifies this value. - /// The value we want to write. - public override void Write(string key, object value) - { - es3File.Save(key, (T)value); - } - - internal override void Write(string key, Type type, byte[] value) - { - ES3Debug.LogError("Not implemented"); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public override void Write(Type type, string key, object value) - { - es3File.Save(key, value); - } - - #endregion - - - #region WritePrimitive(value) methods. - - internal override void WritePrimitive(int value) { } - internal override void WritePrimitive(float value) { } - internal override void WritePrimitive(bool value) { } - internal override void WritePrimitive(decimal value) { } - internal override void WritePrimitive(double value) { } - internal override void WritePrimitive(long value) { } - internal override void WritePrimitive(ulong value) { } - internal override void WritePrimitive(uint value) { } - internal override void WritePrimitive(byte value) { } - internal override void WritePrimitive(sbyte value) { } - internal override void WritePrimitive(short value) { } - internal override void WritePrimitive(ushort value) { } - internal override void WritePrimitive(char value) { } - internal override void WritePrimitive(byte[] value) { } - - - internal override void WritePrimitive(string value) - { - } - - internal override void WriteNull() - { - } - - #endregion - - #region Format-specific methods - - private static bool CharacterRequiresEscaping(char c) - { - return false; - } - - private void WriteCommaIfRequired() - { - } - - internal override void WriteRawProperty(string name, byte[] value) - { - } - - internal override void StartWriteFile() - { - } - - internal override void EndWriteFile() - { - } - - internal override void StartWriteProperty(string name) - { - base.StartWriteProperty(name); - } - - internal override void EndWriteProperty(string name) - { - } - - internal override void StartWriteObject(string name) - { - } - - internal override void EndWriteObject(string name) - { - } - - internal override void StartWriteCollection() - { - } - - internal override void EndWriteCollection() - { - } - - internal override void StartWriteCollectionItem(int index) - { - } - - internal override void EndWriteCollectionItem(int index) - { - } - - internal override void StartWriteDictionary() - { - } - - internal override void EndWriteDictionary() - { - } - - internal override void StartWriteDictionaryKey(int index) - { - } - - internal override void EndWriteDictionaryKey(int index) - { - } - - internal override void StartWriteDictionaryValue(int index) - { - } - - internal override void EndWriteDictionaryValue(int index) - { - } - - #endregion - - public override void Dispose(){} - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3CacheWriter.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3CacheWriter.cs.meta deleted file mode 100644 index fe20eeb..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3CacheWriter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 52e4ba456dd1422409a95cdc6bf43f6b -timeCreated: 1499764822 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3JSONWriter.cs b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3JSONWriter.cs deleted file mode 100644 index 9e2fc2b..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3JSONWriter.cs +++ /dev/null @@ -1,233 +0,0 @@ -using System.Collections.Generic; -using System.Collections; -using System.IO; -using System; -using UnityEngine; -using System.Text; -using System.Globalization; - -namespace ES3Internal -{ - internal class ES3JSONWriter : ES3Writer - { - internal StreamWriter baseWriter; - - private bool isFirstProperty = true; - - public ES3JSONWriter(Stream stream, ES3Settings settings) : this(stream, settings, true, true){} - - internal ES3JSONWriter(Stream stream, ES3Settings settings, bool writeHeaderAndFooter, bool mergeKeys) : base(settings, writeHeaderAndFooter, mergeKeys) - { - baseWriter = new StreamWriter(stream); - StartWriteFile(); - } - - #region WritePrimitive(value) methods. - - internal override void WritePrimitive(int value) { baseWriter.Write(value); } - internal override void WritePrimitive(float value) { baseWriter.Write(value.ToString("R", CultureInfo.InvariantCulture)); } - internal override void WritePrimitive(bool value) { baseWriter.Write(value ? "true" : "false"); } - internal override void WritePrimitive(decimal value) { baseWriter.Write(value.ToString(CultureInfo.InvariantCulture)); } - internal override void WritePrimitive(double value) { baseWriter.Write(value.ToString("R", CultureInfo.InvariantCulture)); } - internal override void WritePrimitive(long value) { baseWriter.Write(value); } - internal override void WritePrimitive(ulong value) { baseWriter.Write(value); } - internal override void WritePrimitive(uint value) { baseWriter.Write(value); } - internal override void WritePrimitive(byte value) { baseWriter.Write(System.Convert.ToInt32(value)); } - internal override void WritePrimitive(sbyte value) { baseWriter.Write(System.Convert.ToInt32(value)); } - internal override void WritePrimitive(short value) { baseWriter.Write(System.Convert.ToInt32(value)); } - internal override void WritePrimitive(ushort value) { baseWriter.Write(System.Convert.ToInt32(value)); } - internal override void WritePrimitive(char value) { WritePrimitive( value.ToString() ); } - internal override void WritePrimitive(byte[] value) { WritePrimitive( System.Convert.ToBase64String(value) ); } - - - internal override void WritePrimitive(string value) - { - baseWriter.Write("\""); - - // Escape any quotation marks within the string. - for(int i = 0; i keysToDelete = new HashSet(); - - internal bool writeHeaderAndFooter = true; - internal bool overwriteKeys = true; - - protected int serializationDepth = 0; - - #region ES3Writer Abstract Methods - - internal abstract void WriteNull(); - - internal virtual void StartWriteFile() - { - serializationDepth++; - } - - internal virtual void EndWriteFile() - { - serializationDepth--; - } - - internal virtual void StartWriteObject(string name) - { - serializationDepth++; - } - - internal virtual void EndWriteObject(string name) - { - serializationDepth--; - } - - internal virtual void StartWriteProperty(string name) - { - if (name == null) - throw new ArgumentNullException("Key or field name cannot be NULL when saving data."); - ES3Debug.Log(""+name +" (writing property)", null, serializationDepth); - } - - internal virtual void EndWriteProperty(string name) - { - } - - internal virtual void StartWriteCollection() - { - serializationDepth++; - } - - internal virtual void EndWriteCollection() - { - serializationDepth--; - } - - internal abstract void StartWriteCollectionItem(int index); - internal abstract void EndWriteCollectionItem(int index); - - internal abstract void StartWriteDictionary(); - internal abstract void EndWriteDictionary(); - internal abstract void StartWriteDictionaryKey(int index); - internal abstract void EndWriteDictionaryKey(int index); - internal abstract void StartWriteDictionaryValue(int index); - internal abstract void EndWriteDictionaryValue(int index); - - public abstract void Dispose(); - - #endregion - - #region ES3Writer Interface abstract methods - - internal abstract void WriteRawProperty(string name, byte[] bytes); - - internal abstract void WritePrimitive(int value); - internal abstract void WritePrimitive(float value); - internal abstract void WritePrimitive(bool value); - internal abstract void WritePrimitive(decimal value); - internal abstract void WritePrimitive(double value); - internal abstract void WritePrimitive(long value); - internal abstract void WritePrimitive(ulong value); - internal abstract void WritePrimitive(uint value); - internal abstract void WritePrimitive(byte value); - internal abstract void WritePrimitive(sbyte value); - internal abstract void WritePrimitive(short value); - internal abstract void WritePrimitive(ushort value); - internal abstract void WritePrimitive(char value); - internal abstract void WritePrimitive(string value); - internal abstract void WritePrimitive(byte[] value); - - #endregion - - protected ES3Writer(ES3Settings settings, bool writeHeaderAndFooter, bool overwriteKeys) - { - this.settings = settings; - this.writeHeaderAndFooter = writeHeaderAndFooter; - this.overwriteKeys = overwriteKeys; - } - - /* User-facing methods used when writing randomly-accessible Key-Value pairs. */ - #region Write(key, value) Methods - - internal virtual void Write(string key, Type type, byte[] value) - { - StartWriteProperty(key); - StartWriteObject(key); - WriteType(type); - WriteRawProperty("value", value); - EndWriteObject(key); - EndWriteProperty(key); - MarkKeyForDeletion(key); - } - - /// Writes a value to the writer with the given key. - /// The key which uniquely identifies this value. - /// The value we want to write. - public virtual void Write(string key, object value) - { - if (typeof(T) == typeof(object)) - { - if (value == null) - Write(typeof(System.Object), key, null); - else - Write(value.GetType(), key, value); - } - else - Write(typeof(T), key, value); - } - - /// Writes a value to the writer with the given key, using the given type rather than the generic parameter. - /// The key which uniquely identifies this value. - /// The value we want to write. - /// The type we want to use for the header, and to retrieve an ES3Type. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void Write(Type type, string key, object value) - { - StartWriteProperty(key); - StartWriteObject(key); - WriteType(type); - WriteProperty("value", value, ES3TypeMgr.GetOrCreateES3Type(type), settings.referenceMode); - EndWriteObject(key); - EndWriteProperty(key); - MarkKeyForDeletion(key); - } - - #endregion - - #region Write(value) & Write(value, ES3Type) Methods - - /// Writes a value to the writer. Note that this should only be called within an ES3Type. - /// The value we want to write. - /// Whether we want to write UnityEngine.Object fields and properties by reference, by value, or both. - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void Write(object value, ES3.ReferenceMode memberReferenceMode = ES3.ReferenceMode.ByRef) - { - if(value == null){ WriteNull(); return; } - - var type = ES3TypeMgr.GetOrCreateES3Type(value.GetType()); - Write(value, type, memberReferenceMode); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void Write(object value, ES3Type type, ES3.ReferenceMode memberReferenceMode = ES3.ReferenceMode.ByRef) - { - // Note that we have to check UnityEngine.Object types for null by casting it first, otherwise - // it will always return false. - if (value == null || (ES3Reflection.IsAssignableFrom(typeof(UnityEngine.Object), value.GetType()) && value as UnityEngine.Object == null)) - { - WriteNull(); - return; - } - - // Deal with System.Objects - if (type == null || type.type == typeof(object)) - { - var valueType = value.GetType(); - type = ES3TypeMgr.GetOrCreateES3Type(valueType); - - if(type == null) - throw new NotSupportedException("Types of " + valueType + " are not supported. Please see the Supported Types guide for more information: https://docs.moodkie.com/easy-save-3/es3-supported-types/"); - - if (!type.isCollection && !type.isDictionary) - { - StartWriteObject(null); - WriteType(valueType); - - type.Write(value, this); - - EndWriteObject(null); - return; - } - } - - if(type == null) - throw new ArgumentNullException("ES3Type argument cannot be null."); - if (type.isUnsupported) - { - if(type.isCollection || type.isDictionary) - throw new NotSupportedException(type.type + " is not supported because it's element type is not supported. Please see the Supported Types guide for more information: https://docs.moodkie.com/easy-save-3/es3-supported-types/"); - else - throw new NotSupportedException("Types of " + type.type + " are not supported. Please see the Supported Types guide for more information: https://docs.moodkie.com/easy-save-3/es3-supported-types/"); - } - - if (type.isPrimitive || type.isEnum) - type.Write(value, this); - else if (type.isCollection) - { - StartWriteCollection(); - ((ES3CollectionType)type).Write(value, this, memberReferenceMode); - EndWriteCollection(); - } - else if (type.isDictionary) - { - StartWriteDictionary(); - ((ES3DictionaryType)type).Write(value, this, memberReferenceMode); - EndWriteDictionary(); - } - else - { - if (type.type == typeof(GameObject)) - ((ES3Type_GameObject)type).saveChildren = settings.saveChildren; - - StartWriteObject(null); - - if (type.isES3TypeUnityObject) - ((ES3UnityObjectType)type).WriteObject(value, this, memberReferenceMode); - else - type.Write(value, this); - EndWriteObject(null); - } - } - - internal virtual void WriteRef(UnityEngine.Object obj) - { - WriteRef(obj, ES3ReferenceMgrBase.referencePropertyName); - } - - internal virtual void WriteRef(UnityEngine.Object obj, string propertyName) - { - WriteRef(obj, ES3ReferenceMgrBase.referencePropertyName, ES3ReferenceMgrBase.Current); - } - - internal virtual void WriteRef(UnityEngine.Object obj, string propertyName, ES3ReferenceMgrBase refMgr) - { - if (refMgr == null) - throw new InvalidOperationException($"An Easy Save 3 Manager is required to save references. To add one to your scene, exit playmode and go to Tools > Easy Save 3 > Add Manager to Scene. Object being saved by reference is {obj.GetType()} with name {obj.name}."); - - // Get the reference ID, if it exists, and store it. - long id = refMgr.Get(obj); - // If reference ID doesn't exist, create reference. - if (id == -1) - id = refMgr.Add(obj); - WriteProperty(propertyName, id.ToString()); - } - - #endregion - - /* Writes a property as a name value pair. */ - #region WriteProperty(name, value) methods - - /// Writes a field or property to the writer. Note that this should only be called within an ES3Type. - /// The name of the field or property. - /// The value we want to write. - public virtual void WriteProperty(string name, object value) - { - WriteProperty(name, value, settings.memberReferenceMode); - } - - /// Writes a field or property to the writer. Note that this should only be called within an ES3Type. - /// The name of the field or property. - /// The value we want to write. - /// Whether we want to write the property by reference, by value, or both. - public virtual void WriteProperty(string name, object value, ES3.ReferenceMode memberReferenceMode) - { - if (SerializationDepthLimitExceeded()) - return; - - StartWriteProperty(name); - Write(value, memberReferenceMode); - EndWriteProperty(name); - } - - /// Writes a field or property to the writer. Note that this should only be called within an ES3Type. - /// The name of the field or property. - /// The value we want to write. - public virtual void WriteProperty(string name, object value) - { - WriteProperty(name, value, ES3TypeMgr.GetOrCreateES3Type(typeof(T)), settings.memberReferenceMode); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void WriteProperty(string name, object value, ES3Type type) - { - WriteProperty(name, value, type, settings.memberReferenceMode); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void WriteProperty(string name, object value, ES3Type type, ES3.ReferenceMode memberReferenceMode) - { - if (SerializationDepthLimitExceeded()) - return; - - StartWriteProperty(name); - Write(value, type, memberReferenceMode); - EndWriteProperty(name); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void WritePropertyByRef(string name, UnityEngine.Object value) - { - if (SerializationDepthLimitExceeded()) - return; - - StartWriteProperty(name); - if(value == null) - { - WriteNull(); - return; }; - StartWriteObject(name); - WriteRef(value); - EndWriteObject(name); - EndWriteProperty(name); - } - - /// Writes a private property to the writer. Note that this should only be called within an ES3Type. - /// The name of the property. - /// The object containing the property we want to write. - public void WritePrivateProperty(string name, object objectContainingProperty) - { - var property = ES3Reflection.GetES3ReflectedProperty(objectContainingProperty.GetType(), name); - if(property.IsNull) - throw new MissingMemberException("A private property named "+ name + " does not exist in the type "+objectContainingProperty.GetType()); - WriteProperty(name, property.GetValue(objectContainingProperty), ES3TypeMgr.GetOrCreateES3Type(property.MemberType)); - } - - /// Writes a private field to the writer. Note that this should only be called within an ES3Type. - /// The name of the field. - /// The object containing the property we want to write. - public void WritePrivateField(string name, object objectContainingField) - { - var field = ES3Reflection.GetES3ReflectedMember(objectContainingField.GetType(), name); - if(field.IsNull) - throw new MissingMemberException("A private field named "+ name + " does not exist in the type "+objectContainingField.GetType()); - WriteProperty(name,field.GetValue(objectContainingField), ES3TypeMgr.GetOrCreateES3Type(field.MemberType)); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void WritePrivateProperty(string name, object objectContainingProperty, ES3Type type) - { - var property = ES3Reflection.GetES3ReflectedProperty(objectContainingProperty.GetType(), name); - if(property.IsNull) - throw new MissingMemberException("A private property named "+ name + " does not exist in the type "+objectContainingProperty.GetType()); - WriteProperty(name, property.GetValue(objectContainingProperty), type); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void WritePrivateField(string name, object objectContainingField, ES3Type type) - { - var field = ES3Reflection.GetES3ReflectedMember(objectContainingField.GetType(), name); - if(field.IsNull) - throw new MissingMemberException("A private field named "+ name + " does not exist in the type "+objectContainingField.GetType()); - WriteProperty(name,field.GetValue(objectContainingField), type); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void WritePrivatePropertyByRef(string name, object objectContainingProperty) - { - var property = ES3Reflection.GetES3ReflectedProperty(objectContainingProperty.GetType(), name); - if(property.IsNull) - throw new MissingMemberException("A private property named "+ name + " does not exist in the type "+objectContainingProperty.GetType()); - WritePropertyByRef(name, (UnityEngine.Object)property.GetValue(objectContainingProperty)); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void WritePrivateFieldByRef(string name, object objectContainingField) - { - var field = ES3Reflection.GetES3ReflectedMember(objectContainingField.GetType(), name); - if(field.IsNull) - throw new MissingMemberException("A private field named "+ name + " does not exist in the type "+objectContainingField.GetType()); - WritePropertyByRef(name, (UnityEngine.Object)field.GetValue(objectContainingField)); - } - - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public void WriteType(Type type) - { - WriteProperty(ES3Type.typeFieldName, ES3Reflection.GetTypeString(type)); - } - - #endregion - - #region Create methods - - /// Creates a new ES3Writer. - /// The relative or absolute path of the file we want to write to. - /// The settings we want to use to override the default settings. - public static ES3Writer Create(string filePath, ES3Settings settings) - { - return Create(new ES3Settings(filePath, settings)); - } - - /// Creates a new ES3Writer. - /// The settings we want to use to override the default settings. - public static ES3Writer Create(ES3Settings settings) - { - return Create(settings, true, true, false); - } - - // Implicit Stream Methods. - internal static ES3Writer Create(ES3Settings settings, bool writeHeaderAndFooter, bool overwriteKeys, bool append) - { - var stream = ES3Stream.CreateStream(settings, (append ? ES3FileMode.Append : ES3FileMode.Write)); - if(stream == null) - return null; - return Create(stream, settings, writeHeaderAndFooter, overwriteKeys); - } - - // Explicit Stream Methods. - - internal static ES3Writer Create(Stream stream, ES3Settings settings, bool writeHeaderAndFooter, bool overwriteKeys) - { - if(stream.GetType() == typeof(MemoryStream)) - { - settings = (ES3Settings)settings.Clone(); - settings.location = ES3.Location.InternalMS; - } - - // Get the baseWriter using the given Stream. - if(settings.format == ES3.Format.JSON) - return new ES3JSONWriter(stream, settings, writeHeaderAndFooter, overwriteKeys); - else - return null; - } - - #endregion - - /* - * Checks whether serialization depth limit has been exceeded - */ - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - protected bool SerializationDepthLimitExceeded() - { - if (serializationDepth > settings.serializationDepthLimit) - { - ES3Debug.LogWarning("Serialization depth limit of " + settings.serializationDepthLimit + " has been exceeded, indicating that there may be a circular reference.\nIf this is not a circular reference, you can increase the depth by going to Window > Easy Save 3 > Settings > Advanced Settings > Serialization Depth Limit"); - return true; - } - return false; - } - - /* - * Marks a key for deletion. - * When merging files, keys marked for deletion will not be included. - */ - [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] - public virtual void MarkKeyForDeletion(string key) - { - keysToDelete.Add(key); - } - - /* - * Merges the contents of the non-temporary file with this ES3Writer, - * ignoring any keys which are marked for deletion. - */ - protected void Merge() - { - using(var reader = ES3Reader.Create(settings)) - { - if(reader == null) - return; - Merge(reader); - } - } - - /* - * Merges the contents of the ES3Reader with this ES3Writer, - * ignoring any keys which are marked for deletion. - */ - protected void Merge(ES3Reader reader) - { - foreach(KeyValuePair kvp in reader.RawEnumerator) - if(!keysToDelete.Contains(kvp.Key) || kvp.Value.type == null) // Don't add keys whose data is of a type which no longer exists in the project. - Write(kvp.Key, kvp.Value.type.type, kvp.Value.bytes); - } - - /// Stores the contents of the writer and overwrites any existing keys if overwriting is enabled. - public virtual void Save() - { - Save(overwriteKeys); - } - - /// Stores the contents of the writer and overwrites any existing keys if overwriting is enabled. - /// Whether we should overwrite existing keys. - public virtual void Save(bool overwriteKeys) - { - if(overwriteKeys) - Merge(); - EndWriteFile(); - Dispose(); - - // If we're writing to a location which can become corrupted, rename the backup file to the file we want. - // This prevents corrupt data. - if(settings.location == ES3.Location.File || settings.location == ES3.Location.PlayerPrefs) - ES3IO.CommitBackup(settings); - } -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs.meta deleted file mode 100644 index e0973a9..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 09319508912db4c13bd924c6dc89f661 -timeCreated: 1499764821 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3XMLWriter.cs b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3XMLWriter.cs deleted file mode 100644 index 1556134..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3XMLWriter.cs +++ /dev/null @@ -1,4 +0,0 @@ -public class ES3XMLWriter -{ - // Not implemented -} diff --git a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3XMLWriter.cs.meta b/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3XMLWriter.cs.meta deleted file mode 100644 index 6831603..0000000 --- a/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3XMLWriter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3bac03a64f52fa94ea3bdcafecad8788 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Web.meta b/Assets/Plugins/Easy Save 3/Web.meta deleted file mode 100644 index 814186e..0000000 --- a/Assets/Plugins/Easy Save 3/Web.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b6fb14c673b174696ac55b1a7869f3a9 -folderAsset: yes -timeCreated: 1501844154 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Web/ES3Cloud.php b/Assets/Plugins/Easy Save 3/Web/ES3Cloud.php deleted file mode 100644 index 303071e..0000000 --- a/Assets/Plugins/Easy Save 3/Web/ES3Cloud.php +++ /dev/null @@ -1,307 +0,0 @@ - PDO::ERRMODE_EXCEPTION)); -} -catch(PDOException $e) -{ - Error("Could not connect to database.", $e->getMessage(), 501); -} - -if(!isset($_POST["apiKey"])) - // Throw this message as an error so that if this is encountered via ES3Cloud it is put into an error state. - Error("ES3Cloud is functioning correctly.", "ES3Cloud is functioning correctly.", 403); - -if($_POST["apiKey"] != $api_key) - Error("Incorrect API Key", "Incorrect API Key", 403); - -// ----- GET FILE ----- -if(isset($_POST["getFile"])) -{ - $stmt = $db->prepare("SELECT $fileDataField FROM $tableName WHERE $filenameField = :filename AND $userField = :user AND $lastUpdatedField > :timestamp LIMIT 1"); - $stmt->bindParam(":filename", $_POST["getFile"]); - $postUser = GetPOSTUser(); - $stmt->bindParam(":user", $postUser); - $postTimestamp = GetPOSTTimestamp(); - $stmt->bindParam(":timestamp", $postTimestamp); - $stmt->execute(); - if($stmt->rowCount() > 0) - { - $data = $stmt->fetchColumn(); - // Manually set the content length so WWW.progress works. - header($_SERVER["SERVER_PROTOCOL"] . " 200 OK"); - header("Cache-Control: public"); - header("Content-Type: application/octet-stream"); - header("Content-Transfer-Encoding: Binary"); - header("Content-Length:".strlen($data)); - echo $data; - } -} - -// ----- PUT FILE ----- -else if(isset($_POST["putFile"])) -{ - // Get uploaded data. - $filePath = $_FILES["data"]["tmp_name"]; - - // If file doesn't exist or it contains no data, throw an error. - if(!file_exists($filePath)) - Error("Uploaded file does not exist.", "Uploaded file does not exist.", 400); - - // If file doesn't exist or it contains no data, throw an error. - if(filesize($filePath) == 0) - Error("Uploaded file is empty.", "Uploaded file is empty.", 400); - - $fp = fopen($filePath, 'rb'); - - $stmt = $db->prepare("INSERT INTO $tableName ($filenameField, $fileDataField, $userField, $lastUpdatedField) VALUES (:filename, :data, :user, :timestamp) ON DUPLICATE KEY UPDATE $fileDataField = VALUES($fileDataField), $lastUpdatedField = VALUES($lastUpdatedField)"); - $stmt->bindParam(":filename", $_POST["putFile"]); - $stmt->bindParam(":data", $fp, PDO::PARAM_LOB); - $postUser = GetPOSTUser(); - $stmt->bindParam(":user", $postUser); - $postTimestamp = GetPOSTTimestamp(); - $stmt->bindParam(":timestamp", $postTimestamp); - - $stmt->execute(); -} - -// ----- RENAME FILE ----- -else if(isset($_POST["renameFile"])) -{ - $stmt = $db->prepare("UPDATE $tableName SET $filenameField = :newFilename WHERE $filenameField = :filename AND $userField = :user"); - $stmt->bindParam(":filename", $_POST["renameFile"]); - $stmt->bindParam(":newFilename", $_POST["newFilename"]); - $postUser = GetPOSTUser(); - $stmt->bindParam(":user", $postUser); - $stmt->execute(); -} - -// ----- DELETE FILE ----- -else if(isset($_POST["deleteFile"])) -{ - - $stmt = $db->prepare("DELETE FROM $tableName WHERE $filenameField = :filename AND $userField = :user"); - $stmt->bindParam(":filename", $_POST["deleteFile"]); - $postUser = GetPOSTUser(); - $stmt->bindParam(":user", $postUser); - $stmt->execute(); -} - -// ----- GET FILENAMES WITH PATTERN ----- -else if(isset($_POST["getFilenames"]) && isset($_POST["pattern"])) -{ - echo "Here"; - $stmt = $db->prepare("SELECT $filenameField FROM $tableName WHERE $userField = :user AND $filenameField LIKE :pattern"); - $postUser = GetPOSTUser(); - $stmt->bindParam(":user", $postUser); - $stmt->bindParam(":pattern", $_POST["pattern"]); - $stmt->execute(); - $rows = $stmt->fetchAll(); - foreach($rows as $row) - echo $row[$filenameField] . ";"; -} - -// ----- GET FILENAMES ----- -else if(isset($_POST["getFilenames"])) -{ - $stmt = $db->prepare("SELECT $filenameField FROM $tableName WHERE $userField = :user"); - $postUser = GetPOSTUser(); - $stmt->bindParam(":user", $postUser); - $stmt->execute(); - $rows = $stmt->fetchAll(); - foreach($rows as $row) - echo $row[$filenameField] . ";"; -} - -// ----- GET TIMESTAMP ----- -else if(isset($_POST["getTimestamp"])) -{ - $stmt = $db->prepare("SELECT $lastUpdatedField FROM $tableName WHERE $filenameField = :filename AND $userField = :user LIMIT 1"); - $stmt->bindParam(":filename", $_POST["getTimestamp"]); - $postUser = GetPOSTUser(); - $stmt->bindParam(":user", $postUser); - $stmt->execute(); - if($stmt->rowCount() > 0) - echo $stmt->fetchColumn(); - else - Error("Could not get timestamp as file does not exist.", "Could not get timestamp as file does not exist.", 400); -} - -else - Error("No valid operation was specified", "No valid operation was specified", 400); - -// Close the connection to the database by nullifying the variable. -$db = null; - -function GetPOSTUser() -{ - return isset($_POST["user"]) ? $_POST["user"] : ""; -} - -function GetPOSTTimestamp() -{ - return isset($_POST["timestamp"]) ? $_POST["timestamp"] : 0; -} - -function Error($headerMsg, $msg, $code) -{ - header($headerMsg, true, $code); - print_r($msg); - if(isset($GLOBALS['db'])) - $GLOBALS['db'] = null; - exit(); -} - -// ------- INSTALL METHODS ------- - -function PreInstall() -{ - echo '
-

ES3 Cloud Installation

-

This will install the ES3 Cloud tables on your MySQL database, and add the required ES3Variables.php file to your server.

-

Please enter your database details below:

-

-

- Database Host:
- -
-
- Database User:
- -
-
- Database Password:
- -
-
- Database Name:
- -
-
- -
-

-
'; -} - -function Install($dbHost, $dbUser, $dbPassword, $dbName, $tableName, $filenameField, $fileDataField, $userField, $lastUpdatedField) -{ - try - { - $db = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_TIMEOUT => 5)); - - $tableExists = $db->query("SELECT * FROM information_schema.tables WHERE table_schema = '$dbName' AND table_name = '$tableName' LIMIT 1;"); - if($tableExists->rowCount() == 0) - { - - // Create the table if it doesn't already exist. - try - { - $createTableQuery = -"CREATE TABLE IF NOT EXISTS `$tableName` ( -`$filenameField` varchar(200) NOT NULL, -`$fileDataField` longblob NOT NULL, -`$userField` varchar(64) NOT NULL, -`$lastUpdatedField` int(11) unsigned NOT NULL DEFAULT '0', -PRIMARY KEY (`$filenameField`,`$userField`) -) ENGINE=InnoDB COLLATE=utf8_unicode_ci CHARSET=utf8;"; - $db->query($createTableQuery); - } - catch (PDOException $e) - { - echo "

Could not create tables on database. Database threw error:

".$e->getMessage()."

-

To manually install the MySQL tables, please run the following SQL code on your database:

-
$createTableQuery
"; - exit(); - } - } - - - try - { - $apiKey = substr(md5(microtime()),rand(0,26),12); - $phpScript = -""; - - // Check that path is writable or file_put_contents is supported. - if(!function_exists("file_put_contents")) - { - ManuallyInstall($phpScript); - exit(); - } - else - { - file_put_contents("ES3Variables.php", $phpScript); - } - } - catch(Exception $e) - { - ManuallyInstall($phpScript); - exit(); - } - - if(!file_exists("ES3Variables.php")) - { - ManuallyInstall($phpScript); - exit(); - } - - echo - " -
-

Successfully installed ES3Cloud

-

IMPORTANT:
Please take note of your API key below. You will need to use it whenever using the API.

-

Your API key can also be found in the ES3Variables.php file which has just been installed.

-

API Key: $apiKey

-
- "; - } - catch(PDOException $e) - { - echo "

Database could not be accessed with these details. The database returned the following error:

" . $e->getMessage() . "

"; - PreInstall(); - exit(); - } -} - -function ManuallyInstall($phpScript) -{ - echo "

Couldn't create PHP file on your server. This could be because file_put_contents is not supported on your server, or you do not have permission to write files to this folder on your server.

-

To manually install the PHP file, please create a file named ES3Variables.php in the same directory as your ES3.php file with the following contents:

-
$phpScript
-

After creating this file, installation will be complete.

"; -} - -?> \ No newline at end of file diff --git a/Assets/Plugins/Easy Save 3/Web/ES3Cloud.php.meta b/Assets/Plugins/Easy Save 3/Web/ES3Cloud.php.meta deleted file mode 100644 index da1459d..0000000 --- a/Assets/Plugins/Easy Save 3/Web/ES3Cloud.php.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5b891e253fd1a40e999dd9064b8a0d6f -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader.meta b/Assets/Plugins/ExcelDataReader.meta deleted file mode 100644 index 80206a0..0000000 --- a/Assets/Plugins/ExcelDataReader.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9fd6c84f10196674db31eff31919414f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll b/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll deleted file mode 100644 index 2e59e09..0000000 Binary files a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll and /dev/null differ diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.mdb b/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.mdb deleted file mode 100644 index fb809a0..0000000 Binary files a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.mdb and /dev/null differ diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.mdb.meta b/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.mdb.meta deleted file mode 100644 index ceed060..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.mdb.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5b87dbd17abf3e742ab088482db6fca9 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.meta b/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.meta deleted file mode 100644 index eacd3e6..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: fdedf494b0dab1c4f945a9cc3dfe2ccc -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.pdb b/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.pdb deleted file mode 100644 index 8db1e02..0000000 Binary files a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.pdb and /dev/null differ diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.pdb.meta b/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.pdb.meta deleted file mode 100644 index b720e34..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.pdb.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8ea5a917e1853ac46b957ee35ef38a32 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.xml b/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.xml deleted file mode 100644 index 4cdb229..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.DataSet.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - ExcelDataReader.DataSet - - - - - ExcelDataReader DataSet extensions - - - - - Converts all sheets to a DataSet - - The IExcelDataReader instance - An optional configuration object to modify the behavior of the conversion - A dataset with all workbook contents - - - - Processing configuration options and callbacks for IExcelDataReader.AsDataSet(). - - - - - Gets or sets a value indicating whether to set the DataColumn.DataType property in a second pass. - - - - - Gets or sets a callback to obtain configuration options for a DataTable. - - - - - Gets or sets a callback to determine whether to include the current sheet in the DataSet. Called once per sheet before ConfigureDataTable. - - - - - Processing configuration options and callbacks for AsDataTable(). - - - - - Gets or sets a value indicating the prefix of generated column names. - - - - - Gets or sets a value indicating whether to use a row from the data as column names. - - - - - Gets or sets a callback to determine which row is the header row. Only called when UseHeaderRow = true. - - - - - Gets or sets a callback to determine whether to include the current row in the DataTable. - - - - - Gets or sets a callback to determine whether to include the specific column in the DataTable. Called once per column after reading the headers. - - - - diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll b/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll deleted file mode 100644 index a2a95a2..0000000 Binary files a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll and /dev/null differ diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.mdb b/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.mdb deleted file mode 100644 index a895486..0000000 Binary files a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.mdb and /dev/null differ diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.mdb.meta b/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.mdb.meta deleted file mode 100644 index 3d9f6d8..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.mdb.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: dbc8ba13c33beee46b6e913deb65c2fb -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.meta b/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.meta deleted file mode 100644 index c845591..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: c0ff4146a73594c48a0e193087837e3b -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.pdb b/Assets/Plugins/ExcelDataReader/ExcelDataReader.pdb deleted file mode 100644 index f9e2c16..0000000 Binary files a/Assets/Plugins/ExcelDataReader/ExcelDataReader.pdb and /dev/null differ diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.pdb.meta b/Assets/Plugins/ExcelDataReader/ExcelDataReader.pdb.meta deleted file mode 100644 index 6873c45..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.pdb.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f76667d86ae6da6439ad559d47f214ea -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.xml b/Assets/Plugins/ExcelDataReader/ExcelDataReader.xml deleted file mode 100644 index b4592d2..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.xml +++ /dev/null @@ -1,1673 +0,0 @@ - - - - ExcelDataReader - - - - - A range for cells using 0 index positions. - - - - - Gets the column the range starts in - - - - - Gets the row the range starts in - - - - - Gets the column the range ends in - - - - - Gets the row the range ends in - - - - - If present the Calculate Message was in the status bar when Excel saved the file. - This occurs if the sheet changed, the Manual calculation option was on, and the Recalculate Before Save option was off. - - - - - Gets the string value. Encoding is only used with BIFF2-5 byte strings. - - - - - Represents blank cell - Base class for all cell types - - - - - Gets the zero-based index of row containing this cell. - - - - - Gets the zero-based index of column containing this cell. - - - - - Gets the extended format used for this cell. If BIFF2 and this value is 63, this record was preceded by an IXFE record containing the actual XFormat >= 63. - - - - - Gets the number format used for this cell. Only used in BIFF2 without XF records. Used by Excel 2.0/2.1 instead of XF/IXFE records. - - - - - - - - Gets a value indicating whether the cell's record identifier is BIFF2-specific. - The shared binary layout of BIFF2 cells are different from BIFF3+. - - - - - Represents BIFF BOF record - - - - - Gets the version. - - - - - Gets the type of the BIFF block - - - - - Gets the creation Id. - - Not used before BIFF5 - - - - Gets the creation year. - - Not used before BIFF5 - - - - Gets the file history flag. - - Not used before BIFF8 - - - - Gets the minimum Excel version to open this file. - - Not used before BIFF8 - - - - Represents Sheet record in Workbook Globals - - - - - Gets the worksheet data start offset. - - - - - Gets the worksheet type. - - - - - Gets the visibility of the worksheet. - - - - - Gets the name of the worksheet. - - - - - Represents additional space for very large records - - - - - Represents cell-indexing record, finishes each row values block - - - - - Gets the offset of first row linked with this record - - - - - Gets the addresses of cell values. - - - - - Gets the row height in twips - - - - - Represents Dimensions of worksheet - - - - - Gets the index of first row. - - - - - Gets the index of last row + 1. - - - - - Gets the index of first column. - - - - - Gets the index of last column + 1. - - - - - Represents BIFF EOF resord - - - - - Represents FILEPASS record containing XOR obfuscation details or a an EncryptionInfo structure - - - - - Represents a string value of format - - - - - Gets the string value. - - - - - Represents a cell containing formula - - - - - Indicates that a string value is stored in a String record that immediately follows this record. See[MS - XLS] 2.5.133 FormulaValue. - - - - - Indecates that the formula value is an empty string. - - - - - Indicates that the property is valid. - - - - - Indicates that the property is valid. - - - - - Indicates that the property is valid. - - - - - Gets the formula flags - - - - - Gets the formula value type. - - - - - Represents a string value of formula - - - - - Gets the string value. - - - - - Represents a string value of a header or footer. - - - - - Gets the string value. - - - - - Represents a worksheet index - - - - - Gets a value indicating whether BIFF8 addressing is used or not. - - - - - Gets the zero-based index of first existing row - - - - - Gets the zero-based index of last existing row - - - - - Gets the addresses of DbCell records - - - - - Represents a constant integer number in range 0..65535 - - - - - Gets the cell value. - - - - - Represents InterfaceHdr record in Wokrbook Globals - - - - - Gets the CodePage for Interface Header - - - - - [MS-XLS] 2.4.148 Label - Represents a string - - - - - Gets the cell value. - - - - - Represents a string stored in SST - - - - - Gets the index of string in Shared String Table - - - - - [MS-XLS] 2.4.168 MergeCells - If the count of the merged cells in the document is greater than 1026, the file will contain multiple adjacent MergeCells records. - - - - - Represents MSO Drawing record - - - - - Represents multiple Blank cell - - - - - Gets the zero-based index of last described column - - - - - Returns format forspecified column, column must be between ColumnIndex and LastColumnIndex - - Index of column - Format - - - - Represents multiple RK number cells - - - - - Gets the zero-based index of last described column - - - - - Returns format for specified column - - Index of column, must be between ColumnIndex and LastColumnIndex - The format. - - - - Gets the value for specified column - - Index of column, must be between ColumnIndex and LastColumnIndex - The value. - - - - Represents a floating-point number - - - - - Gets the value of this cell - - - - - For now QuickTip will do nothing, it seems to have a different - - - - - Represents basic BIFF record - Base class for all BIFF record types - - - - - Gets the type Id of this entry - - - - - Gets the data size of this entry - - - - - Gets the whole size of structure - - - - - Represents an RK number cell - - - - - Gets the value of this cell - - - - - Decodes RK-encoded number - - Encoded number - The number. - - - - Represents row record in table - - - - - Gets the zero-based index of row described - - - - - Gets the index of first defined column - - - - - Gets the index of last defined column - - - - - Gets a value indicating whether to use the default row height instead of the RowHeight property - - - - - Gets the row height in twips. - - - - - Gets a value indicating whether the XFormat property is used - - - - - Gets the default format for this row - - - - - Represents record with the only two-bytes value - - - - - Gets the value - - - - - Represents a Shared String Table in BIFF8 format - - - - - Gets the number of strings in SST - - - - - Gets the count of unique strings in SST - - - - - Parses strings out of the SST record and subsequent Continue records from the BIFF stream - - - - - Returns string at specified index - - Index of string to get - Workbook encoding - string value if it was found, empty string otherwise - - - - Represents a BIFF stream - - - - - Gets the size of BIFF stream in bytes - - - - - Gets or sets the current position in BIFF stream - - - - - Gets or sets the ICryptoTransform instance used to decrypt the current block - - - - - Gets or sets the current block number being decrypted with CipherTransform - - - - - Sets stream pointer to the specified offset - - Offset value - Offset origin - - - - Reads record under cursor and advances cursor position to next record - - The record -or- null. - - - - Returns record at specified offset - - The stream - The record -or- null. - - - - Create an ICryptoTransform instance to decrypt a 1024-byte block - - - - - Decrypt some dummy bytes to align the decryptor with the position in the current 1024-byte block - - - - - If present the Calculate Message was in the status bar when Excel saved the file. - This occurs if the sheet changed, the Manual calculation option was on, and the Recalculate Before Save option was off. - - - - - Represents Workbook's global window description - - - - - Gets the X position of a window - - - - - Gets the Y position of a window - - - - - Gets the width of the window - - - - - Gets the height of the window - - - - - Gets the window flags - - - - - Gets the active workbook tab (zero-based) - - - - - Gets the first visible workbook tab (zero-based) - - - - - Gets the number of selected workbook tabs - - - - - Gets the workbook tab width to horizontal scrollbar width - - - - - Word-sized string, stored as single bytes with encoding from CodePage record. Used in BIFF2-5 - - - - - Gets the number of characters in the string. - - - - - Gets the value. - - - - - Plain string without backing storage. Used internally - - - - - Byte sized string, stored as bytes, with encoding from CodePage record. Used in BIFF2-5 . - - - - - [MS-XLS] 2.5.240 ShortXLUnicodeString - Byte-sized string, stored as single or multibyte unicode characters. - - - - - Gets a value indicating whether the string is a multibyte string or not. - - - - - Helper class for parsing the BIFF8 Shared String Table (SST) - - - - - Gets or sets the offset into the current record's byte content. May point at the end when the current record has been parsed entirely. - - - - - Reads an SST string potentially spanning multiple records - - The string - - - - If the read position is exactly at the end of a record: - Read the next continue record and update the read position. - - - - - Advances the read position a number of bytes, potentially spanning - multiple records. - NOTE: If the new read position ends on a record boundary, - the next record will not be read, and the read position will point - at the end of the record! Must call EnsureRecord() as needed - to read the next continue record and reset the read position. - - Number of bytes to skip - - - - [MS-XLS] 2.5.293 XLUnicodeRichExtendedString - Word-sized formatted string in SST, stored as single or multibyte unicode characters potentially spanning multiple Continue records. - - - - - Gets the number of characters in the string. - - - - - Gets the flags. - - - - - Gets a value indicating whether the string has an extended record. - - - - - Gets a value indicating whether the string has a formatting record. - - - - - Gets a value indicating whether the string is a multibyte string or not. - - - - - Gets the number of formats used for formatting (0 if string has no formatting) - - - - - Gets the size of extended string in bytes, 0 if there is no one - - - - - Gets the head (before string data) size in bytes - - - - - Gets the tail (after string data) size in bytes - - - - - [MS-XLS] 2.5.294 XLUnicodeString - Word-sized string, stored as single or multibyte unicode characters. - - - - - Gets a value indicating whether the string is a multibyte string or not. - - - - - Represents Globals section of workbook - - - - - Gets or sets the Shared String Table of workbook - - - - - Represents Worksheet section in workbook - - - - - Gets the worksheet name - - - - - Gets the visibility of worksheet - - - - - Gets the worksheet data offset. - - - - - Find how many rows to read at a time and their offset in the file. - If rows are stored sequentially in the file, returns a block size of up to 32 rows. - If rows are stored non-sequentially, the block size may extend up to the entire worksheet stream - - - - - Reads additional records if needed: a string record might follow a formula result - - - - - Returns an index into Workbook.Formats for the given cell and preceding ixfe record. - - - - - Gets or sets the zero-based column index. - - - - - Common handling of extended formats (XF) and mappings between file-based and global number format indices. - - - - - Gets the dictionary of global number format strings. Always includes the built-in formats at their - corresponding indices and any additional formats specified in the workbook file. - - - - - Gets the the dictionary of mappings between format index in the file and key in the Formats dictionary. - - - - - Returns the global number format index from an XF index. - - - - - Returns the global number format index from a file-based format index. - - - - - Registers a number format string and its file-based format index in the workbook's Formats dictionary. - If the format string matches a built-in or previously registered format, it will be mapped to that index. - - - - - Registers an extended format and its file based number format index. - - - - - Represents single Root Directory record - - - - - Gets or sets the name of directory entry - - - - - Gets or sets the entry type - - - - - Gets or sets the entry "color" in directory tree - - - - - Gets or sets the SID of left sibling - - 0xFFFFFFFF if there's no one - - - - Gets or sets the SID of right sibling - - 0xFFFFFFFF if there's no one - - - - Gets or sets the SID of first child (if EntryType is STGTY_STORAGE) - - 0xFFFFFFFF if there's no one - - - - Gets or sets the CLSID of container (if EntryType is STGTY_STORAGE) - - - - - Gets or sets the user flags of container (if EntryType is STGTY_STORAGE) - - - - - Gets or sets the creation time of entry - - - - - Gets or sets the last modification time of entry - - - - - Gets or sets the first sector of data stream (if EntryType is STGTY_STREAM) - - if EntryType is STGTY_ROOT, this can be first sector of MiniStream - - - - Gets or sets the size of data stream (if EntryType is STGTY_STREAM) - - if EntryType is STGTY_ROOT, this can be size of MiniStream - - - - Gets or sets a value indicating whether this entry relats to a ministream - - - - - Gets or sets the prop type. Reserved, must be 0. - - - - - Reads bytes from a regular or mini stream. - - - - - The header contains the first 109 DIF entries. If there are any more, read from a separate stream. - - - - - Represents Excel file header - - - - - Gets or sets the file signature - - - - - Gets a value indicating whether the signature is valid. - - - - - Gets or sets the class id. Typically filled with zeroes - - - - - Gets or sets the version. Must be 0x003E - - - - - Gets or sets the dll version. Must be 0x0003 - - - - - Gets or sets the byte order. Must be 0xFFFE - - - - - Gets or sets the sector size in Pot - - - - - Gets the sector size. Typically 512 - - - - - Gets or sets the mini sector size in Pot - - - - - Gets the mini sector size. Typically 64 - - - - - Gets or sets the number of directory sectors. If Major Version is 3, the Number of - Directory Sectors MUST be zero. This field is not supported for version 3 compound files - - - - - Gets or sets the number of FAT sectors - - - - - Gets or sets the number of first Root Directory Entry (Property Set Storage, FAT Directory) sector - - - - - Gets or sets the transaction signature, 0 for Excel - - - - - Gets or sets the maximum size for small stream, typically 4096 bytes - - - - - Gets or sets the first sector of Mini FAT, FAT_EndOfChain if there's no one - - - - - Gets or sets the number of sectors in Mini FAT, 0 if there's no one - - - - - Gets or sets the first sector of DIF, FAT_EndOfChain if there's no one - - - - - Gets or sets the number of sectors in DIF, 0 if there's no one - - - - - Gets or sets the first 109 locations in the DIF sector chain - - - - - Reads completely through a CSV stream to determine encoding, separator, field count and row count. - Uses fallbackEncoding if there is no BOM. Throws DecoderFallbackException if there are invalid characters in the stream. - Returns the separator whose average field count is closest to its max field count. - - - - - Low level, reentrant CSV parser. Call ParseBuffer() in a loop, and finally Flush() to empty the internal buffers. - - - - - Helpers class - - - - - Determines whether the encoding is single byte or not. - - The encoding. - - if the specified encoding is single byte; otherwise, . - - - - - Convert a double from Excel to an OA DateTime double. - The returned value is normalized to the '1900' date mode and adjusted for the 1900 leap year bug. - - - - - The common workbook interface between the binary and OpenXml formats - - A type implementing IWorksheet - - - - The common worksheet interface between the binary and OpenXml formats - - - - - Parse ECMA-376 number format strings from Excel and other spreadsheet softwares. - - - - - Initializes a new instance of the class. - - The number format string. - - - - Gets a value indicating whether the number format string is valid. - - - - - Gets the number format string. - - - - - Gets a value indicating whether the format represents a DateTime - - - - - Gets a value indicating whether the format represents a TimeSpan - - - - - Parses as many placeholders and literals needed to format a number with optional decimals. - Returns number of tokens parsed, or 0 if the tokens didn't form a number. - - - - - A seekable stream for reading an EncryptedPackage blob using OpenXml Agile Encryption. - - - - - Represents "Agile Encryption" used in XLSX (Office 2010 and newer) - - - - - Base class for the various encryption schemes used by Excel - - - - - Gets a value indicating whether XOR obfuscation is used. - When true, the ICryptoTransform can be cast to XorTransform and - handle the special case where XorArrayIndex must be manipulated - per record. - - - - - Represents the binary RC4+MD5 encryption header used in XLS. - - - - - Minimal RC4 decryption compatible with System.Security.Cryptography.SymmetricAlgorithm. - - - - - Represents the binary "Standard Encryption" header used in XLS and XLSX. - XLS uses RC4+SHA1. XLSX uses AES+SHA1. - - - - - 2.3.5.2 RC4 CryptoAPI Encryption Key Generation - - - - - 2.3.4.7 ECMA-376 Document Encryption Key Generation (Standard Encryption) - - - - - Represents "XOR Deobfucation Method 1" used in XLS. - - - - - Minimal Office "XOR Deobfuscation Method 1" implementation compatible - with System.Security.Cryptography.SymmetricAlgorithm. - - - - - Generates a 16 byte obfuscation array based on the POI/LibreOffice implementations - - - - - Gets or sets the obfuscation array index. BIFF obfuscation uses a different XorArrayIndex per record. - - - - - Base class for worksheet stream elements - - - - - Shared string table - - - - - Logic for the Excel dimensions. Ex: A15 - - The value. - The column, 1-based. - The row, 1-based. - - - - Gets or sets the zero-based row index. - - - - - Gets or sets the height of this row in points. Zero if hidden or collapsed. - - - - - Gets or sets the cells in this row. - - - - - Gets a value indicating whether the row is empty. NOTE: Returns true if there are empty, but formatted cells. - - - - - Returns the zero-based maximum column index reference on this row. - - - - - Initializes a new instance of the class. - - The zip file stream. - - - - Gets the shared strings stream. - - The shared strings stream. - - - - Gets the styles stream. - - The styles stream. - - - - Gets the workbook stream. - - The workbook stream. - - - - Gets the worksheet stream. - - The sheet id. - The worksheet stream. - - - - Gets the workbook rels stream. - - The rels stream. - - - - ExcelDataReader Class - - - - - A generic implementation of the IExcelDataReader interface using IWorkbook/IWorksheet to enumerate data. - - A type implementing IWorkbook - A type implementing IWorksheet - - - - - - - - - - Configuration options for an instance of ExcelDataReader. - - - - - Gets or sets a value indicating the encoding to use when the input XLS lacks a CodePage record, - or when the input CSV lacks a BOM and does not parse as UTF8. Default: cp1252. (XLS BIFF2-5 and CSV only) - - - - - Gets or sets the password used to open password protected workbooks. - - - - - Gets or sets an array of CSV separator candidates. The reader autodetects which best fits the input data. Default: , ; TAB | # (CSV only) - - - - - Gets or sets a value indicating whether to leave the stream open after the IExcelDataReader object is disposed. Default: false - - - - - The ExcelReader Factory - - - - - Creates an instance of or - - The file stream. - The configuration object. - The excel data reader. - - - - Creates an instance of - - The file stream. - The configuration object. - The excel data reader. - - - - Creates an instance of - - The file stream. - The reader configuration -or- to use the default configuration. - The excel data reader. - - - - Creates an instance of ExcelCsvReader - - The file stream. - The reader configuration -or- to use the default configuration. - The excel data reader. - - - - Thrown when there is a problem parsing the Compound Document container format used by XLS and password-protected XLSX. - - - - - Initializes a new instance of the class. - - The error message - - - - Initializes a new instance of the class. - - The error message - The inner exception - - - - Base class for exceptions thrown by ExcelDataReader - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The error message - - - - Initializes a new instance of the class. - - The error message - The inner exception - - - - Initializes a new instance of the class. - - The serialization info - The streaming context - - - - Thrown when ExcelDataReader cannot parse the header - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The error message - - - - Initializes a new instance of the class. - - The error message - The inner exception - - - - Initializes a new instance of the class. - - The serialization info - The streaming context - - - - Thrown when ExcelDataReader cannot open a password protected document because the password - - - - - Initializes a new instance of the class. - - The error message - - - - Header and footer text. - - - - - Gets a value indicating whether the header and footer are different on the first page. - - - - - Gets a value indicating whether the header and footer are different on odd and even pages. - - - - - Gets the header used for the first page if is . - - - - - Gets the footer used for the first page if is . - - - - - Gets the header used for odd pages -or- all pages if is . - - - - - Gets the footer used for odd pages -or- all pages if is . - - - - - Gets the header used for even pages if is . - - - - - Gets the footer used for even pages if is . - - - - - The ExcelDataReader interface - - - - - Gets the sheet name. - - - - - Gets the sheet VBA code name. - - - - - Gets the sheet visible state. - - - - - Gets the sheet header and footer -or- if none set. - - - - - Gets the list of merged cell ranges. - - - - - Gets the number of results (workbooks). - - - - - Gets the number of rows in the current result. - - - - - Gets the height of the current row in points. - - - - - Seeks to the first result. - - - - - Gets the number format for the specified field -or- if there is no value. - - The index of the field to find. - The number format string of the specified field. - - - - Gets the number format index for the specified field -or- -1 if there is no value. - - The index of the field to find. - The number format index of the specified field. - - - - Gets the width the specified column. - - The index of the column to find. - The width of the specified column. - - - - Custom interface for logging messages - - - - - Debug level of the specified message. The other method is preferred since the execution is deferred. - - The message. - The formatting. - - - - Info level of the specified message. The other method is preferred since the execution is deferred. - - The message. - The formatting. - - - - Warn level of the specified message. The other method is preferred since the execution is deferred. - - The message. - The formatting. - - - - Error level of the specified message. The other method is preferred since the execution is deferred. - - The message. - The formatting. - - - - Fatal level of the specified message. The other method is preferred since the execution is deferred. - - The message. - The formatting. - - - - Factory interface for loggers. - - - - - Create a logger for the specified type. - - The type to create a logger for. - The logger instance. - - - - logger type initialization - - - - - Sets up logging to be with a certain type - - The type of ILog for the application to use - - - - Initializes a new instance of a logger for an object. - This should be done only once per object name. - - The type to get a logger for. - ILog instance for an object if log type has been intialized; otherwise a null logger. - - - - The default logger until one is set. - - - - - - - - - - - - - - - - - - - - - - - 2.0 version of LogExtensions, not as awesome as Extension methods - - - - - Gets the logger for a type. - - The type to fetch a logger for. - The type to get the logger for. - Instance of a logger for the object. - This method is thread safe. - - - diff --git a/Assets/Plugins/ExcelDataReader/ExcelDataReader.xml.meta b/Assets/Plugins/ExcelDataReader/ExcelDataReader.xml.meta deleted file mode 100644 index ee2adba..0000000 --- a/Assets/Plugins/ExcelDataReader/ExcelDataReader.xml.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e00e1bcf661bbcb4ca6b25e5c347fe8e -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI.meta b/Assets/Plugins/FairyGUI.meta deleted file mode 100644 index 7528856..0000000 --- a/Assets/Plugins/FairyGUI.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8fedc85f3f2f4e44697653fd3818ce14 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Editor.meta b/Assets/Plugins/FairyGUI/Editor.meta deleted file mode 100644 index 9e32d14..0000000 --- a/Assets/Plugins/FairyGUI/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8d62b02f274ce4253af1ef45831279e3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples.meta b/Assets/Plugins/FairyGUI/Examples.meta deleted file mode 100644 index ac1ba24..0000000 --- a/Assets/Plugins/FairyGUI/Examples.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: fd0c51d2146977c4aa7ab34e712a863d -folderAsset: yes -timeCreated: 1446193142 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag.meta b/Assets/Plugins/FairyGUI/Examples/Bag.meta deleted file mode 100644 index 4e90350..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 458c4ffa8748140419a56ce3d93de74a -folderAsset: yes -timeCreated: 1446625368 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs b/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs deleted file mode 100644 index 1f4d434..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs +++ /dev/null @@ -1,36 +0,0 @@ -using UnityEngine; -using FairyGUI; - -/// -/// A game bag demo, demonstrated how to customize loader to load icons not in the UI package. -/// -public class BagMain : MonoBehaviour -{ - GComponent _mainView; - BagWindow _bagWindow; - - void Awake() - { - //Register custom loader class - UIObjectFactory.SetLoaderExtension(typeof(MyGLoader)); - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - GRoot.inst.SetContentScaleFactor(1136, 640); - _mainView = this.GetComponent().ui; - - _bagWindow = new BagWindow(); - _mainView.GetChild("bagBtn").onClick.Add(() => { _bagWindow.Show(); }); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs.meta deleted file mode 100644 index e6ea036..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 72adad54c37cc25499988e9b785d5b90 -timeCreated: 1446194671 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs b/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs deleted file mode 100644 index 6b809f6..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs +++ /dev/null @@ -1,49 +0,0 @@ -using FairyGUI; -using UnityEngine; - -public class BagWindow : Window -{ - GList _list; - - public BagWindow() - { - } - - protected override void OnInit() - { - this.contentPane = UIPackage.CreateObject("Bag", "BagWin").asCom; - this.Center(); - this.modal = true; - - _list = this.contentPane.GetChild("list").asList; - _list.onClickItem.Add(__clickItem); - _list.itemRenderer = RenderListItem; - _list.numItems = 45; - } - - void RenderListItem(int index, GObject obj) - { - GButton button = (GButton)obj; - button.icon = "i" + UnityEngine.Random.Range(0, 10); - button.title = "" + UnityEngine.Random.Range(0, 100); - } - - override protected void DoShowAnimation() - { - this.SetScale(0.1f, 0.1f); - this.SetPivot(0.5f, 0.5f); - this.TweenScale(new Vector2(1, 1), 0.3f).OnComplete(this.OnShown); - } - - override protected void DoHideAnimation() - { - this.TweenScale(new Vector2(0.1f, 0.1f), 0.3f).OnComplete(this.HideImmediately); - } - - void __clickItem(EventContext context) - { - GButton item = (GButton)context.data; - this.contentPane.GetChild("n11").asLoader.url = item.icon; - this.contentPane.GetChild("n13").text = item.icon; - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs.meta deleted file mode 100644 index 879d477..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 418d0818f0209ee42938610bc6cb82be -timeCreated: 1446193148 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs b/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs deleted file mode 100644 index 8f82c6b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs +++ /dev/null @@ -1,188 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using FairyGUI; -#if UNITY_5_4_OR_NEWER -using UnityEngine.Networking; -#endif - -public delegate void LoadCompleteCallback(NTexture texture); -public delegate void LoadErrorCallback(string error); - -/// -/// Use to load icons from asset bundle, and pool them -/// -public class IconManager : MonoBehaviour -{ - static IconManager _instance; - public static IconManager inst - { - get - { - if (_instance == null) - { - GameObject go = new GameObject("IconManager"); - DontDestroyOnLoad(go); - _instance = go.AddComponent(); - } - return _instance; - } - } - - public const int POOL_CHECK_TIME = 30; - public const int MAX_POOL_SIZE = 10; - - List _items; - bool _started; - Hashtable _pool; - string _basePath; - - void Awake() - { - _items = new List(); - _pool = new Hashtable(); - _basePath = Application.streamingAssetsPath.Replace("\\", "/") + "/fairygui-examples/"; - if (Application.platform != RuntimePlatform.Android) - _basePath = "file:///" + _basePath; - - StartCoroutine(FreeIdleIcons()); - } - - public void LoadIcon(string url, - LoadCompleteCallback onSuccess, - LoadErrorCallback onFail) - { - LoadItem item = new LoadItem(); - item.url = url; - item.onSuccess = onSuccess; - item.onFail = onFail; - _items.Add(item); - if (!_started) - StartCoroutine(Run()); - } - - IEnumerator Run() - { - _started = true; - - LoadItem item = null; - while (true) - { - if (_items.Count > 0) - { - item = _items[0]; - _items.RemoveAt(0); - } - else - break; - - if (_pool.ContainsKey(item.url)) - { - //Debug.Log("hit " + item.url); - - NTexture texture = (NTexture)_pool[item.url]; - texture.refCount++; - - if (item.onSuccess != null) - item.onSuccess(texture); - - continue; - } - - string url = _basePath + item.url + ".ab"; -#if UNITY_2017_2_OR_NEWER -#if UNITY_2018_1_OR_NEWER - UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(url); -#else - UnityWebRequest www = UnityWebRequest.GetAssetBundle(url); -#endif - yield return www.SendWebRequest(); - -#if UNITY_2020_2_OR_NEWER - if (www.result == UnityWebRequest.Result.Success) -#else - if (!www.isNetworkError && !www.isHttpError) -#endif - { - AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www); -#else - WWW www = new WWW(url); - yield return www; - - if (string.IsNullOrEmpty(www.error)) - { - AssetBundle bundle = www.assetBundle; -#endif - - if (bundle == null) - { - Debug.LogWarning("Run Window->Build FairyGUI example Bundles first."); - if (item.onFail != null) - item.onFail(www.error); - continue; - } -#if (UNITY_5 || UNITY_5_3_OR_NEWER) - NTexture texture = new NTexture(bundle.LoadAllAssets()[0]); -#else - NTexture texture = new NTexture((Texture2D)bundle.mainAsset); -#endif - texture.refCount++; - bundle.Unload(false); - - _pool[item.url] = texture; - - if (item.onSuccess != null) - item.onSuccess(texture); - } - else - { - if (item.onFail != null) - item.onFail(www.error); - } - } - - _started = false; - } - - IEnumerator FreeIdleIcons() - { - yield return new WaitForSeconds(POOL_CHECK_TIME); //check the pool every 30 seconds - - int cnt = _pool.Count; - if (cnt > MAX_POOL_SIZE) - { - ArrayList toRemove = null; - foreach (DictionaryEntry de in _pool) - { - string key = (string)de.Key; - NTexture texture = (NTexture)de.Value; - if (texture.refCount == 0) - { - if (toRemove == null) - toRemove = new ArrayList(); - toRemove.Add(key); - texture.Dispose(); - - //Debug.Log("free icon " + de.Key); - - cnt--; - if (cnt <= 8) - break; - } - } - if (toRemove != null) - { - foreach (string key in toRemove) - _pool.Remove(key); - } - } - } - -} - -class LoadItem -{ - public string url; - public LoadCompleteCallback onSuccess; - public LoadErrorCallback onFail; -} diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs.meta deleted file mode 100644 index 57b4178..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b5725e4855896724d9bdeb29c68c6c92 -timeCreated: 1446193148 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs b/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs deleted file mode 100644 index 67cff27..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; -using FairyGUI; -using System.IO; - -/// -/// Extend the ability of GLoader -/// -public class MyGLoader : GLoader -{ - protected override void LoadExternal() - { - IconManager.inst.LoadIcon(this.url, OnLoadSuccess, OnLoadFail); - } - - protected override void FreeExternal(NTexture texture) - { - texture.refCount--; - } - - void OnLoadSuccess(NTexture texture) - { - if (string.IsNullOrEmpty(this.url)) - return; - - this.onExternalLoadSuccess(texture); - } - - void OnLoadFail(string error) - { - Debug.Log("load " + this.url + " failed: " + error); - this.onExternalLoadFailed(); - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs.meta deleted file mode 100644 index 2ed88c3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ca2c5718cae50694a8291cc372ad458d -timeCreated: 1446193148 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics.meta b/Assets/Plugins/FairyGUI/Examples/Basics.meta deleted file mode 100644 index e55613d..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Basics.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 7afac4ff0289dac479c37c0cbf60f745 -folderAsset: yes -timeCreated: 1446194671 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs b/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs deleted file mode 100644 index e211ca1..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs +++ /dev/null @@ -1,441 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using FairyGUI; - -public class BasicsMain : MonoBehaviour -{ - private GComponent _mainView; - private GObject _backBtn; - private GComponent _demoContainer; - private Controller _viewController; - private Dictionary _demoObjects; - - public Gradient lineGradient; - - void Awake() - { -#if (UNITY_5 || UNITY_5_3_OR_NEWER) - //Use the font names directly - UIConfig.defaultFont = "Microsoft YaHei"; -#else - //Need to put a ttf file into Resources folder. Here is the file name of the ttf file. - UIConfig.defaultFont = "afont"; -#endif - UIPackage.AddPackage("UI/Basics"); - - UIConfig.verticalScrollBar = "ui://Basics/ScrollBar_VT"; - UIConfig.horizontalScrollBar = "ui://Basics/ScrollBar_HZ"; - UIConfig.popupMenu = "ui://Basics/PopupMenu"; - UIConfig.buttonSound = (NAudioClip)UIPackage.GetItemAsset("Basics", "click"); - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _backBtn = _mainView.GetChild("btn_Back"); - _backBtn.visible = false; - _backBtn.onClick.Add(onClickBack); - - _demoContainer = _mainView.GetChild("container").asCom; - _viewController = _mainView.GetController("c1"); - - _demoObjects = new Dictionary(); - - int cnt = _mainView.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject obj = _mainView.GetChildAt(i); - if (obj.group != null && obj.group.name == "btns") - obj.onClick.Add(runDemo); - } - } - - private void runDemo(EventContext context) - { - string type = ((GObject)(context.sender)).name.Substring(4); - GComponent obj; - if (!_demoObjects.TryGetValue(type, out obj)) - { - obj = UIPackage.CreateObject("Basics", "Demo_" + type).asCom; - _demoObjects[type] = obj; - } - - _demoContainer.RemoveChildren(); - _demoContainer.AddChild(obj); - _viewController.selectedIndex = 1; - _backBtn.visible = true; - - switch (type) - { - case "Graph": - PlayGraph(); - break; - - case "Button": - PlayButton(); - break; - - case "Text": - PlayText(); - break; - - case "Grid": - PlayGrid(); - break; - - case "Transition": - PlayTransition(); - break; - - case "Window": - PlayWindow(); - break; - - case "Popup": - PlayPopup(); - break; - - case "Drag&Drop": - PlayDragDrop(); - break; - - case "Depth": - PlayDepth(); - break; - - case "ProgressBar": - PlayProgressBar(); - break; - } - } - - private void onClickBack() - { - _viewController.selectedIndex = 0; - _backBtn.visible = false; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } - - //----------------------------- - private void PlayGraph() - { - GComponent obj = _demoObjects["Graph"]; - - Shape shape; - - shape = obj.GetChild("pie").asGraph.shape; - EllipseMesh ellipse = shape.graphics.GetMeshFactory(); - ellipse.startDegree = 30; - ellipse.endDegreee = 300; - shape.graphics.SetMeshDirty(); - - shape = obj.GetChild("trapezoid").asGraph.shape; - PolygonMesh trapezoid = shape.graphics.GetMeshFactory(); - trapezoid.usePercentPositions = true; - trapezoid.points.Clear(); - trapezoid.points.Add(new Vector2(0f, 1f)); - trapezoid.points.Add(new Vector2(0.3f, 0)); - trapezoid.points.Add(new Vector2(0.7f, 0)); - trapezoid.points.Add(new Vector2(1f, 1f)); - trapezoid.texcoords.Clear(); - trapezoid.texcoords.AddRange(VertexBuffer.NormalizedUV); - shape.graphics.SetMeshDirty(); - shape.graphics.texture = (NTexture)UIPackage.GetItemAsset("Basics", "change"); - - shape = obj.GetChild("line").asGraph.shape; - LineMesh line = shape.graphics.GetMeshFactory(); - line.lineWidthCurve = AnimationCurve.Linear(0, 25, 1, 10); - line.roundEdge = true; - line.gradient = lineGradient; - line.path.Create(new GPathPoint[] { - new GPathPoint(new Vector3(0, 120, 0)), - new GPathPoint(new Vector3(20, 120, 0)), - new GPathPoint(new Vector3(100, 100, 0)), - new GPathPoint(new Vector3(180, 30, 0)), - new GPathPoint(new Vector3(100, 0, 0)), - new GPathPoint(new Vector3(20, 30, 0)), - new GPathPoint(new Vector3(100, 100, 0)), - new GPathPoint(new Vector3(180, 120, 0)), - new GPathPoint(new Vector3(200, 120, 0)), - }); - shape.graphics.SetMeshDirty(); - GTween.To(0, 1, 5).SetEase(EaseType.Linear).SetTarget(shape.graphics).OnUpdate((GTweener t) => - { - ((NGraphics)t.target).GetMeshFactory().fillEnd = t.value.x; - ((NGraphics)t.target).SetMeshDirty(); - }); - - shape = obj.GetChild("line2").asGraph.shape; - LineMesh line2 = shape.graphics.GetMeshFactory(); - line2.lineWidth = 3; - line2.roundEdge = true; - line2.path.Create(new GPathPoint[] { - new GPathPoint(new Vector3(0, 120, 0), GPathPoint.CurveType.Straight), - new GPathPoint(new Vector3(60, 30, 0), GPathPoint.CurveType.Straight), - new GPathPoint(new Vector3(80, 90, 0), GPathPoint.CurveType.Straight), - new GPathPoint(new Vector3(140, 30, 0), GPathPoint.CurveType.Straight), - new GPathPoint(new Vector3(160, 90, 0), GPathPoint.CurveType.Straight), - new GPathPoint(new Vector3(220, 30, 0), GPathPoint.CurveType.Straight) - }); - shape.graphics.SetMeshDirty(); - - GObject image = obj.GetChild("line3"); - LineMesh line3 = image.displayObject.graphics.GetMeshFactory(); - line3.lineWidth = 30; - line3.roundEdge = false; - line3.path.Create(new GPathPoint[] { - new GPathPoint(new Vector3(0, 30, 0), new Vector3(50, -30), new Vector3(150, -50)), - new GPathPoint(new Vector3(200, 30, 0), new Vector3(300, 130)), - new GPathPoint(new Vector3(400, 30, 0)) - }); - image.displayObject.graphics.SetMeshDirty(); - } - - //----------------------------- - private void PlayButton() - { - GComponent obj = _demoObjects["Button"]; - obj.GetChild("n34").onClick.Add(() => { UnityEngine.Debug.Log("click button"); }); - } - - //------------------------------ - private void PlayText() - { - GComponent obj = _demoObjects["Text"]; - obj.GetChild("n12").asRichTextField.onClickLink.Add((EventContext context) => - { - GRichTextField t = context.sender as GRichTextField; - t.text = "[img]ui://Basics/pet[/img][color=#FF0000]You click the link[/color]:" + context.data; - }); - obj.GetChild("n25").onClick.Add(() => - { - obj.GetChild("n24").text = obj.GetChild("n22").text; - }); - } - - //------------------------------ - private void PlayGrid() - { - GComponent obj = _demoObjects["Grid"]; - GList list1 = obj.GetChild("list1").asList; - list1.RemoveChildrenToPool(); - string[] testNames = System.Enum.GetNames(typeof(RuntimePlatform)); - Color[] testColor = new Color[] { Color.yellow, Color.red, Color.white, Color.cyan }; - int cnt = testNames.Length; - for (int i = 0; i < cnt; i++) - { - GButton item = list1.AddItemFromPool().asButton; - item.GetChild("t0").text = "" + (i + 1); - item.GetChild("t1").text = testNames[i]; - item.GetChild("t2").asTextField.color = testColor[UnityEngine.Random.Range(0, 4)]; - item.GetChild("star").asProgress.value = (int)((float)UnityEngine.Random.Range(1, 4) / 3f * 100); - } - - GList list2 = obj.GetChild("list2").asList; - list2.RemoveChildrenToPool(); - for (int i = 0; i < cnt; i++) - { - GButton item = list2.AddItemFromPool().asButton; - item.GetChild("cb").asButton.selected = false; - item.GetChild("t1").text = testNames[i]; - item.GetChild("mc").asMovieClip.playing = i % 2 == 0; - item.GetChild("t3").text = "" + UnityEngine.Random.Range(0, 10000); - } - } - - //------------------------------ - private void PlayTransition() - { - GComponent obj = _demoObjects["Transition"]; - obj.GetChild("n2").asCom.GetTransition("t0").Play(int.MaxValue, 0, null); - obj.GetChild("n3").asCom.GetTransition("peng").Play(int.MaxValue, 0, null); - - obj.onAddedToStage.Add(() => - { - obj.GetChild("n2").asCom.GetTransition("t0").Stop(); - obj.GetChild("n3").asCom.GetTransition("peng").Stop(); - }); - } - - //------------------------------ - private Window _winA; - private Window _winB; - private void PlayWindow() - { - GComponent obj = _demoObjects["Window"]; - obj.GetChild("n0").onClick.Add(() => - { - if (_winA == null) - _winA = new Window1(); - _winA.Show(); - }); - - obj.GetChild("n1").onClick.Add(() => - { - if (_winB == null) - _winB = new Window2(); - _winB.Show(); - }); - } - - //------------------------------ - private PopupMenu _pm; - private GComponent _popupCom; - private void PlayPopup() - { - if (_pm == null) - { - _pm = new PopupMenu(); - _pm.AddItem("Item 1", __clickMenu); - _pm.AddItem("Item 2", __clickMenu); - _pm.AddItem("Item 3", __clickMenu); - _pm.AddItem("Item 4", __clickMenu); - } - - if (_popupCom == null) - { - _popupCom = UIPackage.CreateObject("Basics", "Component12").asCom; - _popupCom.Center(); - } - GComponent obj = _demoObjects["Popup"]; - obj.GetChild("n0").onClick.Add((EventContext context) => - { - _pm.Show((GObject)context.sender, PopupDirection.Down); - }); - - obj.GetChild("n1").onClick.Add(() => - { - GRoot.inst.ShowPopup(_popupCom); - }); - - - obj.onRightClick.Add(() => - { - _pm.Show(); - }); - } - - private void __clickMenu(EventContext context) - { - GObject itemObject = (GObject)context.data; - UnityEngine.Debug.Log("click " + itemObject.text); - } - - //------------------------------ - Vector2 startPos; - private void PlayDepth() - { - GComponent obj = _demoObjects["Depth"]; - GComponent testContainer = obj.GetChild("n22").asCom; - GObject fixedObj = testContainer.GetChild("n0"); - fixedObj.sortingOrder = 100; - fixedObj.draggable = true; - - int numChildren = testContainer.numChildren; - int i = 0; - while (i < numChildren) - { - GObject child = testContainer.GetChildAt(i); - if (child != fixedObj) - { - testContainer.RemoveChildAt(i); - numChildren--; - } - else - i++; - } - startPos = new Vector2(fixedObj.x, fixedObj.y); - - obj.GetChild("btn0").onClick.Add(() => - { - GGraph graph = new GGraph(); - startPos.x += 10; - startPos.y += 10; - graph.xy = startPos; - graph.DrawRect(150, 150, 1, Color.black, Color.red); - obj.GetChild("n22").asCom.AddChild(graph); - }); - - obj.GetChild("btn1").onClick.Add(() => - { - GGraph graph = new GGraph(); - startPos.x += 10; - startPos.y += 10; - graph.xy = startPos; - graph.DrawRect(150, 150, 1, Color.black, Color.green); - graph.sortingOrder = 200; - obj.GetChild("n22").asCom.AddChild(graph); - }); - } - - //------------------------------ - private void PlayDragDrop() - { - GComponent obj = _demoObjects["Drag&Drop"]; - obj.GetChild("a").draggable = true; - - GButton b = obj.GetChild("b").asButton; - b.draggable = true; - b.onDragStart.Add((EventContext context) => - { - //Cancel the original dragging, and start a new one with a agent. - context.PreventDefault(); - - DragDropManager.inst.StartDrag(b, b.icon, b.icon, (int)context.data); - }); - - GButton c = obj.GetChild("c").asButton; - c.icon = null; - c.onDrop.Add((EventContext context) => - { - c.icon = (string)context.data; - }); - - GObject bounds = obj.GetChild("n7"); - Rect rect = bounds.TransformRect(new Rect(0, 0, bounds.width, bounds.height), GRoot.inst); - - //---!!Because at this time the container is on the right side of the stage and beginning to move to left(transition), so we need to caculate the final position - rect.x -= obj.parent.x; - //---- - - GButton d = obj.GetChild("d").asButton; - d.draggable = true; - d.dragBounds = rect; - } - - //------------------------------ - private void PlayProgressBar() - { - GComponent obj = _demoObjects["ProgressBar"]; - Timers.inst.Add(0.001f, 0, __playProgress); - obj.onRemovedFromStage.Add(() => { Timers.inst.Remove(__playProgress); }); - } - - void __playProgress(object param) - { - GComponent obj = _demoObjects["ProgressBar"]; - int cnt = obj.numChildren; - for (int i = 0; i < cnt; i++) - { - GProgressBar child = obj.GetChildAt(i) as GProgressBar; - if (child != null) - { - - child.value += 1; - if (child.value > child.max) - child.value = 0; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs.meta deleted file mode 100644 index 72dbdfb..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a7c649dfadf79df4a963190eded74b30 -timeCreated: 1446194671 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs b/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs deleted file mode 100644 index 318878f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using FairyGUI; - -public class Window1 : Window -{ - public Window1() - { - } - - protected override void OnInit() - { - this.contentPane = UIPackage.CreateObject("Basics", "WindowA").asCom; - this.Center(); - } - - override protected void OnShown() - { - GList list = this.contentPane.GetChild("n6").asList; - list.RemoveChildrenToPool(); - - for (int i = 0; i < 6; i++) - { - GButton item = list.AddItemFromPool().asButton; - item.title = "" + i; - item.icon = UIPackage.GetItemURL("Basics", "r4"); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs.meta b/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs.meta deleted file mode 100644 index d8c168c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f9e33dc08a51fd04883526e4f5129e42 -timeCreated: 1447054717 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs b/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs deleted file mode 100644 index df1a5ef..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using FairyGUI; -using UnityEngine; - -public class Window2 : Window -{ - public Window2() - { - } - - protected override void OnInit() - { - this.contentPane = UIPackage.CreateObject("Basics", "WindowB").asCom; - this.Center(); - } - - override protected void DoShowAnimation() - { - this.SetScale(0.1f, 0.1f); - this.SetPivot(0.5f, 0.5f); - this.TweenScale(new Vector2(1, 1), 0.3f).OnComplete(this.OnShown); - } - - override protected void DoHideAnimation() - { - this.TweenScale(new Vector2(0.1f, 0.1f), 0.3f).OnComplete(this.HideImmediately); - } - - override protected void OnShown() - { - contentPane.GetTransition("t1").Play(); - } - - override protected void OnHide() - { - contentPane.GetTransition("t1").Stop(); - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs.meta b/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs.meta deleted file mode 100644 index 70f78ff..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f922289dfda2b1d4689eabfcdf6a5b91 -timeCreated: 1447054712 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/BundleUsage.meta b/Assets/Plugins/FairyGUI/Examples/BundleUsage.meta deleted file mode 100644 index c7499fb..0000000 --- a/Assets/Plugins/FairyGUI/Examples/BundleUsage.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ae0ad495a670df246b212607e661ec96 -folderAsset: yes -timeCreated: 1446643487 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs b/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs deleted file mode 100644 index a6bd420..0000000 --- a/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections; -using UnityEngine; -using FairyGUI; -using System.Net; -using UnityEngine.Networking; -using System; - -/// -/// Demonstrated how to load UI package from assetbundle. The bundle can be build from the Window Menu->Build FairyGUI example bundles. -/// -class BundleUsageMain : MonoBehaviour -{ - GComponent _mainView; - - void Start() - { - Application.targetFrameRate = 60; - - Stage.inst.onKeyDown.Add(OnKeyDown); - - StartCoroutine(LoadUIPackage()); - } - - IEnumerator LoadUIPackage() - { - string url = Application.streamingAssetsPath.Replace("\\", "/") + "/fairygui-examples/bundleusage.ab"; - if (Application.isEditor) - { - UriBuilder uri = new UriBuilder(url); - uri.Scheme = "file"; - url = uri.ToString(); - } - -#if UNITY_2017_2_OR_NEWER - -#if UNITY_2018_1_OR_NEWER - UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(url); -#else - UnityWebRequest www = UnityWebRequest.GetAssetBundle(url); -#endif - yield return www.SendWebRequest(); - -#if UNITY_2020_2_OR_NEWER - if (www.result == UnityWebRequest.Result.Success) -#else - if (!www.isNetworkError && !www.isHttpError) -#endif - { - AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www); -#else - WWW www = new WWW(url); - yield return www; - - if (string.IsNullOrEmpty(www.error)) - { - AssetBundle bundle = www.assetBundle; -#endif - if (bundle == null) - { - Debug.LogWarning("Run Window->Build FairyGUI example Bundles first."); - yield return 0; - } - UIPackage.AddPackage(bundle); - - _mainView = UIPackage.CreateObject("BundleUsage", "Main").asCom; - _mainView.fairyBatching = true; - _mainView.MakeFullScreen(); - _mainView.AddRelation(GRoot.inst, RelationType.Size); - - GRoot.inst.AddChild(_mainView); - _mainView.GetTransition("t0").Play(); - } - else - { - Debug.LogWarning("Run Window->Build FairyGUI example Bundles first."); - } - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs.meta deleted file mode 100644 index 6eba8f8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c34dde491ef252c49af798031b5a37de -timeCreated: 1446643490 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Cooldown.meta b/Assets/Plugins/FairyGUI/Examples/Cooldown.meta deleted file mode 100644 index ae29f7a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Cooldown.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ee28fce39e275054fad5911e3f98c5e2 -folderAsset: yes -timeCreated: 1447173764 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs b/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs deleted file mode 100644 index b540b93..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs +++ /dev/null @@ -1,57 +0,0 @@ -using UnityEngine; -using FairyGUI; -public class CooldownMain : MonoBehaviour -{ - GComponent _mainView; - - GButton _btn0; - GImage _mask0; - float _time1; - - GButton _btn1; - GImage _mask1; - float _time2; - - void Start() - { - Application.targetFrameRate = 60; - - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.gameObject.GetComponent().ui; - - _btn0 = _mainView.GetChild("b0").asButton; - _btn0.icon = "Cooldown/k0"; - _time1 = 5; - _mask0 = _btn0.GetChild("mask").asImage; - - _btn1 = _mainView.GetChild("b1").asButton; - _btn1.icon = "Cooldown/k1"; - _time2 = 10; - _mask1 = _btn1.GetChild("mask").asImage; - - } - - void Update() - { - _time1 -= Time.deltaTime; - if (_time1 < 0) - _time1 = 5; - _mask0.fillAmount = 1 - (5 - _time1) / 5f; - - _time2 -= Time.deltaTime; - if (_time2 < 0) - _time2 = 10; - _btn1.text = string.Empty + Mathf.RoundToInt(_time2); - _mask1.fillAmount = 1 - (10 - _time2) / 10f; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } - -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs.meta deleted file mode 100644 index a26b879..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c59a131f345dd4e4895409b111e0c434 -timeCreated: 1447174165 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Curve.meta b/Assets/Plugins/FairyGUI/Examples/Curve.meta deleted file mode 100644 index 6c26a32..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Curve.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 9255b3554fc92214b98dc85f52b3ebb2 -folderAsset: yes -timeCreated: 1461431337 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs b/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs deleted file mode 100644 index 0b5803b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs +++ /dev/null @@ -1,58 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class CurveMain : MonoBehaviour -{ - GComponent _mainView; - GList _list; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _list = _mainView.GetChild("list").asList; - _list.SetVirtualAndLoop(); - _list.itemRenderer = RenderListItem; - _list.numItems = 5; - _list.scrollPane.onScroll.Add(DoSpecialEffect); - - DoSpecialEffect(); - } - - void DoSpecialEffect() - { - //change the scale according to the distance to middle - float midX = _list.scrollPane.posX + _list.viewWidth / 2; - int cnt = _list.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject obj = _list.GetChildAt(i); - float dist = Mathf.Abs(midX - obj.x - obj.width / 2); - if (dist > obj.width) //no intersection - obj.SetScale(1, 1); - else - { - float ss = 1 + (1 - dist / obj.width) * 0.24f; - obj.SetScale(ss, ss); - } - } - } - - void RenderListItem(int index, GObject obj) - { - GButton item = (GButton)obj; - item.SetPivot(0.5f, 0.5f); - item.icon = UIPackage.GetItemURL("Curve", "n" + (index + 1)); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs.meta deleted file mode 100644 index aed15a3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d30b14c0ce756e2428ef9db93b692b69 -timeCreated: 1461431341 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene.meta b/Assets/Plugins/FairyGUI/Examples/CutScene.meta deleted file mode 100644 index 083adc2..0000000 --- a/Assets/Plugins/FairyGUI/Examples/CutScene.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0b781546cb2bc024a9f388f515ff11e4 -folderAsset: yes -timeCreated: 1446628629 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs b/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs deleted file mode 100644 index a1cfafd..0000000 --- a/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections; -using UnityEngine; -using FairyGUI; - -/// -/// Demonstrated the simple flow of a game. -/// -public class CutSceneMain : MonoBehaviour -{ - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - UIPackage.AddPackage("UI/CutScene"); - - LevelManager.inst.Init(); - LevelManager.inst.LoadLevel("scene1"); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs.meta deleted file mode 100644 index 0c9d223..0000000 --- a/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f0c05fcb4b735cf4587717a360b2a231 -timeCreated: 1446628633 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs b/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs deleted file mode 100644 index a08c2a1..0000000 --- a/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Collections; -using UnityEngine; -#if UNITY_5_3_OR_NEWER -using UnityEngine.SceneManagement; -#endif -using FairyGUI; - -public class LevelManager : MonoBehaviour -{ - static LevelManager _instance; - public static LevelManager inst - { - get - { - if (_instance == null) - { - GameObject go = new GameObject("LevelManager"); - DontDestroyOnLoad(go); - _instance = go.AddComponent(); - } - return _instance; - } - } - - GComponent _cutSceneView; - GComponent _mainView; - - public LevelManager() - { - } - - public void Init() - { - _cutSceneView = UIPackage.CreateObject("CutScene", "CutScene").asCom; - _cutSceneView.SetSize(GRoot.inst.width, GRoot.inst.height); - _cutSceneView.AddRelation(GRoot.inst, RelationType.Size); - - _mainView = UIPackage.CreateObject("CutScene", "Main").asCom; - _mainView.SetSize(GRoot.inst.width, GRoot.inst.height); - _mainView.AddRelation(GRoot.inst, RelationType.Size); - - _mainView.GetChild("n0").onClick.Add(() => - { - LoadLevel("scene1"); - }); - - _mainView.GetChild("n1").onClick.Add(() => - { - LoadLevel("scene2"); - }); - } - - public void LoadLevel(string levelName) - { - StartCoroutine(DoLoad(levelName)); - GRoot.inst.AddChild(_cutSceneView); - } - - IEnumerator DoLoad(string sceneName) - { - GRoot.inst.AddChild(_cutSceneView); - GProgressBar pb = _cutSceneView.GetChild("pb").asProgress; - pb.value = 0; -#if UNITY_5_3_OR_NEWER - AsyncOperation op = SceneManager.LoadSceneAsync(sceneName); -#else - AsyncOperation op = Application.LoadLevelAsync(sceneName); -#endif - float startTime = Time.time; - while (!op.isDone || pb.value != 100) - { - int value = (int)((Time.time - startTime) * 100f / 3f); - if (value > 100) - value = 100; - pb.value = value; - yield return null; - } - - GRoot.inst.RemoveChild(_cutSceneView); - GRoot.inst.AddChild(_mainView); - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs.meta b/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs.meta deleted file mode 100644 index 15e4d49..0000000 --- a/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: cfefd808bb86e4f4cb34eaf9da5d1a36 -timeCreated: 1446630965 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Editor.meta b/Assets/Plugins/FairyGUI/Examples/Editor.meta deleted file mode 100644 index 543b0eb..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b79c211a7d63ecf4796b13556fd29826 -folderAsset: yes -timeCreated: 1446620759 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs b/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs deleted file mode 100644 index 5dab672..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.IO; - -public class BuildAssetBundles -{ - [MenuItem("Window/Build FairyGUI Example Bundles")] - public static void Build() - { - string testPath = "UI/BundleUsage_fui"; - Object obj = Resources.Load(testPath); - string path = AssetDatabase.GetAssetPath(obj); - if(string.IsNullOrEmpty(path)) - { - Debug.LogWarning("sample not found: " + testPath); - return; - } - string basePath = path.Substring(0, path.Length - testPath.Length - 6); - - for (int i = 0; i < 10; i++) - { - AssetImporter.GetAtPath(basePath + "Icons/i" + i + ".png").assetBundleName = "fairygui-examples/i" + i + ".ab"; - } - - AssetImporter.GetAtPath(basePath + "UI/BundleUsage_fui.bytes").assetBundleName = "fairygui-examples/bundleusage.ab"; - AssetImporter.GetAtPath(basePath + "UI/BundleUsage_atlas0.png").assetBundleName = "fairygui-examples/bundleusage.ab"; - - if (!Directory.Exists(Application.streamingAssetsPath)) - Directory.CreateDirectory(Application.streamingAssetsPath); - - BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget); - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs.meta b/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs.meta deleted file mode 100644 index 8545c92..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bb6ce699bc9e31440b4f01462aacc612 -timeCreated: 1446625466 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers.meta deleted file mode 100644 index bae1563..0000000 --- a/Assets/Plugins/FairyGUI/Examples/EmitNumbers.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 91fdebf77175d934ab3d4689ca57f396 -folderAsset: yes -timeCreated: 1446569240 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs deleted file mode 100644 index 2910a78..0000000 --- a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs +++ /dev/null @@ -1,94 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class EmitComponent : GComponent -{ - GLoader _symbolLoader; - GTextField _numberText; - Transform _owner; - - const float OFFSET_ADDITION = 2.2f; - static Vector2 JITTER_FACTOR = new Vector2(80, 80); - - public EmitComponent() - { - this.touchable = false; - - _symbolLoader = new GLoader(); - _symbolLoader.autoSize = true; - AddChild(_symbolLoader); - - _numberText = new GTextField(); - _numberText.autoSize = AutoSizeType.Both; - - AddChild(_numberText); - } - - public void SetHurt(Transform owner, int type, long hurt, bool critical) - { - _owner = owner; - - TextFormat tf = _numberText.textFormat; - if (type == 0) - tf.font = EmitManager.inst.hurtFont1; - else - tf.font = EmitManager.inst.hurtFont2; - _numberText.textFormat = tf; - _numberText.text = "-" + hurt; - - if (critical) - _symbolLoader.url = EmitManager.inst.criticalSign; - else - _symbolLoader.url = ""; - - UpdateLayout(); - - this.alpha = 1; - UpdatePosition(Vector2.zero); - Vector2 rnd = Vector2.Scale(UnityEngine.Random.insideUnitCircle, JITTER_FACTOR); - int toX = (int)rnd.x * 2; - int toY = (int)rnd.y * 2; - - EmitManager.inst.view.AddChild(this); - GTween.To(Vector2.zero, new Vector2(toX, toY), 1f).SetTarget(this) - .OnUpdate((GTweener tweener) => { this.UpdatePosition(tweener.value.vec2); }).OnComplete(this.OnCompleted); - this.TweenFade(0, 0.5f).SetDelay(0.5f); - } - - void UpdateLayout() - { - this.SetSize(_symbolLoader.width + _numberText.width, Mathf.Max(_symbolLoader.height, _numberText.height)); - _numberText.SetXY(_symbolLoader.width > 0 ? (_symbolLoader.width + 2) : 0, - (this.height - _numberText.height) / 2); - _symbolLoader.y = (this.height - _symbolLoader.height) / 2; - } - - void UpdatePosition(Vector2 pos) - { - Vector3 ownerPos = _owner.position; - ownerPos.y += OFFSET_ADDITION; - Vector3 screenPos = Camera.main.WorldToScreenPoint(ownerPos); - screenPos.y = Screen.height - screenPos.y; //convert to Stage coordinates system - - Vector3 pt = GRoot.inst.GlobalToLocal(screenPos); - this.SetXY(Mathf.RoundToInt(pt.x + pos.x - this.actualWidth / 2), Mathf.RoundToInt(pt.y + pos.y - this.height)); - } - - void OnCompleted() - { - _owner = null; - EmitManager.inst.view.RemoveChild(this); - EmitManager.inst.ReturnComponent(this); - } - - public void Cancel() - { - _owner = null; - if (this.parent != null) - { - GTween.Kill(this); - EmitManager.inst.view.RemoveChild(this); - } - EmitManager.inst.ReturnComponent(this); - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs.meta deleted file mode 100644 index 8b7e97f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d8535a403e7324c49890b1de70edc2a0 -timeCreated: 1446570746 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs deleted file mode 100644 index ef12b53..0000000 --- a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI; - -public class EmitManager -{ - static EmitManager _instance; - public static EmitManager inst - { - get - { - if (_instance == null) - _instance = new EmitManager(); - return _instance; - } - } - - public string hurtFont1; - public string hurtFont2; - public string criticalSign; - - public GComponent view { get; private set; } - - private readonly Stack _componentPool = new Stack(); - - public EmitManager() - { - hurtFont1 = "ui://EmitNumbers/number1"; - hurtFont2 = "ui://EmitNumbers/number2"; - criticalSign = "ui://EmitNumbers/critical"; - - view = new GComponent(); - GRoot.inst.AddChild(view); - } - - public void Emit(Transform owner, int type, long hurt, bool critical) - { - EmitComponent ec; - if (_componentPool.Count > 0) - ec = _componentPool.Pop(); - else - ec = new EmitComponent(); - ec.SetHurt(owner, type, hurt, critical); - } - - public void ReturnComponent(EmitComponent com) - { - _componentPool.Push(com); - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs.meta deleted file mode 100644 index 53bd627..0000000 --- a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 335d4e8607937704285d9e0aec495020 -timeCreated: 1446570745 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs deleted file mode 100644 index f1cdcdf..0000000 --- a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections; -using UnityEngine; -using FairyGUI; - -public class EmitNumbersMain : MonoBehaviour -{ - Transform _npc1; - Transform _npc2; - bool _finished; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _npc1 = GameObject.Find("npc1").transform; - _npc2 = GameObject.Find("npc2").transform; - - StartCoroutine(RunTest()); - } - - void OnDisable() - { - _finished = true; - } - - IEnumerator RunTest() - { - while (!_finished) - { - EmitManager.inst.Emit(_npc1, 0, UnityEngine.Random.Range(100, 100000), UnityEngine.Random.Range(0, 10) == 5); - EmitManager.inst.Emit(_npc2, 1, UnityEngine.Random.Range(100, 100000), UnityEngine.Random.Range(0, 10) == 5); - yield return new WaitForSeconds(0.3f); - } - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs.meta deleted file mode 100644 index e286ee3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3ee84d8c960d2404893a09cb4009bee8 -timeCreated: 1446569244 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji.meta b/Assets/Plugins/FairyGUI/Examples/Emoji.meta deleted file mode 100644 index b7f5509..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Emoji.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: fbba022553e7d1d438d20305716af90e -folderAsset: yes -timeCreated: 1446193142 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs deleted file mode 100644 index 9489713..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs +++ /dev/null @@ -1,196 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using FairyGUI; - -public class EmojiMain : MonoBehaviour -{ - GComponent _mainView; - GList _list; - GTextInput _input1; - GTextInput _input2; - GComponent _emojiSelectUI1; - GComponent _emojiSelectUI2; - - class Message - { - public string sender; - public string senderIcon; - public string msg; - public bool fromMe; - } - List _messages; - - Dictionary _emojies; - - void Awake() - { - UIPackage.AddPackage("UI/Emoji"); - - UIConfig.verticalScrollBar = "ui://Emoji/ScrollBar_VT"; - UIConfig.defaultScrollBarDisplay = ScrollBarDisplayType.Auto; - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _messages = new List(); - - _mainView = this.GetComponent().ui; - - _list = _mainView.GetChild("list").asList; - _list.SetVirtual(); - _list.itemProvider = GetListItemResource; - _list.itemRenderer = RenderListItem; - - _input1 = _mainView.GetChild("input1").asTextInput; - _input1.onKeyDown.Add(__inputKeyDown1); - - _input2 = _mainView.GetChild("input2").asTextInput; - _input2.onKeyDown.Add(__inputKeyDown2); - - //作为demo,这里只添加了部分表情素材 - _emojies = new Dictionary(); - for (uint i = 0x1f600; i < 0x1f637; i++) - { - string url = UIPackage.GetItemURL("Emoji", Convert.ToString(i, 16)); - if (url != null) - _emojies.Add(i, new Emoji(url)); - } - _input2.emojies = _emojies; - - _mainView.GetChild("btnSend1").onClick.Add(__clickSendBtn1); - _mainView.GetChild("btnSend2").onClick.Add(__clickSendBtn2); - - _mainView.GetChild("btnEmoji1").onClick.Add(__clickEmojiBtn1); - _mainView.GetChild("btnEmoji2").onClick.Add(__clickEmojiBtn2); - - _emojiSelectUI1 = UIPackage.CreateObject("Emoji", "EmojiSelectUI").asCom; - _emojiSelectUI1.fairyBatching = true; - _emojiSelectUI1.GetChild("list").asList.onClickItem.Add(__clickEmoji1); - - _emojiSelectUI2 = UIPackage.CreateObject("Emoji", "EmojiSelectUI_ios").asCom; - _emojiSelectUI2.fairyBatching = true; - _emojiSelectUI2.GetChild("list").asList.onClickItem.Add(__clickEmoji2); - } - - void AddMsg(string sender, string senderIcon, string msg, bool fromMe) - { - bool isScrollBottom = _list.scrollPane.isBottomMost; - - Message newMessage = new Message(); - newMessage.sender = sender; - newMessage.senderIcon = senderIcon; - newMessage.msg = msg; - newMessage.fromMe = fromMe; - _messages.Add(newMessage); - - if (newMessage.fromMe) - { - if (_messages.Count == 1 || UnityEngine.Random.Range(0f, 1f) < 0.5f) - { - Message replyMessage = new Message(); - replyMessage.sender = "FairyGUI"; - replyMessage.senderIcon = "r1"; - replyMessage.msg = "Today is a good day. \U0001f600"; - replyMessage.fromMe = false; - _messages.Add(replyMessage); - } - } - - if (_messages.Count > 100) - _messages.RemoveRange(0, _messages.Count - 100); - - _list.numItems = _messages.Count; - - if (isScrollBottom) - _list.scrollPane.ScrollBottom(); - } - - string GetListItemResource(int index) - { - Message msg = _messages[index]; - if (msg.fromMe) - return "ui://Emoji/chatRight"; - else - return "ui://Emoji/chatLeft"; - } - - void RenderListItem(int index, GObject obj) - { - GButton item = (GButton)obj; - Message msg = _messages[index]; - if (!msg.fromMe) - item.GetChild("name").text = msg.sender; - item.icon = UIPackage.GetItemURL("Emoji", msg.senderIcon); - - //Recaculate the text width - GRichTextField tf = item.GetChild("msg").asRichTextField; - tf.emojies = _emojies; - tf.text = EmojiParser.inst.Parse(msg.msg); - } - - void __clickSendBtn1(EventContext context) - { - string msg = _input1.text; - if (msg.Length == 0) - return; - - AddMsg("Unity", "r0", msg, true); - _input1.text = ""; - } - - void __clickSendBtn2(EventContext context) - { - string msg = _input2.text; - if (msg.Length == 0) - return; - - AddMsg("Unity", "r0", msg, true); - _input2.text = ""; - } - - void __clickEmojiBtn1(EventContext context) - { - GRoot.inst.ShowPopup(_emojiSelectUI1, (GObject)context.sender, PopupDirection.Up); - } - - void __clickEmojiBtn2(EventContext context) - { - GRoot.inst.ShowPopup(_emojiSelectUI2, (GObject)context.sender, PopupDirection.Up); - } - - void __clickEmoji1(EventContext context) - { - GButton item = (GButton)context.data; - _input1.ReplaceSelection("[:" + item.text + "]"); - } - - void __clickEmoji2(EventContext context) - { - GButton item = (GButton)context.data; - _input2.ReplaceSelection(Char.ConvertFromUtf32(Convert.ToInt32(UIPackage.GetItemByURL(item.icon).name, 16))); - } - - void __inputKeyDown1(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Return) - _mainView.GetChild("btnSend1").onClick.Call(); - } - - void __inputKeyDown2(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Return) - _mainView.GetChild("btnSend2").onClick.Call(); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs.meta deleted file mode 100644 index 6d3b882..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4953851686ef2ed4d90f67c5fe144849 -timeCreated: 1446193148 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs deleted file mode 100644 index 93a4e80..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs +++ /dev/null @@ -1,31 +0,0 @@ -using FairyGUI; -using FairyGUI.Utils; - -public class EmojiParser : UBBParser -{ - static EmojiParser _instance; - public new static EmojiParser inst - { - get - { - if (_instance == null) - _instance = new EmojiParser(); - return _instance; - } - } - - private static string[] TAGS = new string[] - { "88","am","bs","bz","ch","cool","dhq","dn","fd","gz","han","hx","hxiao","hxiu" }; - public EmojiParser () - { - foreach (string ss in TAGS) - { - this.handlers[":"+ss] = OnTag_Emoji; - } - } - - string OnTag_Emoji(string tagName, bool end, string attr) - { - return ""; - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs.meta b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs.meta deleted file mode 100644 index 994d6b4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ebe7b2fb6b5fe8c488fac00b1b177326 -timeCreated: 1446193148 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Extension.meta b/Assets/Plugins/FairyGUI/Examples/Extension.meta deleted file mode 100644 index 5ff8a6a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Extension.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: dc519b1dfb870064ea786640d8a0a8d1 -folderAsset: yes -timeCreated: 1446648215 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs b/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs deleted file mode 100644 index 231c54b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs +++ /dev/null @@ -1,55 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class ExtensionMain : MonoBehaviour -{ - GComponent _mainView; - GList _list; - - void Awake() - { - UIPackage.AddPackage("UI/Extension"); - UIObjectFactory.SetPackageItemExtension("ui://Extension/mailItem", typeof(MailItem)); - - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _list = _mainView.GetChild("mailList").asList; - for (int i = 0; i < 10; i++) - { - MailItem item = (MailItem)_list.AddItemFromPool(); - item.setFetched(i % 3 == 0); - item.setRead(i % 2 == 0); - item.setTime("5 Nov 2015 16:24:33"); - item.title = "Mail title here"; - } - - _list.EnsureBoundsCorrect(); - float delay = 0f; - for (int i = 0; i < 10; i++) - { - MailItem item = (MailItem)_list.GetChildAt(i); - if (_list.IsChildInView(item)) - { - item.PlayEffect(delay); - delay += 0.2f; - } - else - break; - } - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs.meta deleted file mode 100644 index 410eea4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 1b0647927cbff65449b89590caf97481 -timeCreated: 1446648215 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs b/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs deleted file mode 100644 index a67c34c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs +++ /dev/null @@ -1,41 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class MailItem : GButton -{ - GTextField _timeText; - Controller _readController; - Controller _fetchController; - Transition _trans; - - public override void ConstructFromXML(FairyGUI.Utils.XML cxml) - { - base.ConstructFromXML(cxml); - - _timeText = this.GetChild("timeText").asTextField; - _readController = this.GetController("IsRead"); - _fetchController = this.GetController("c1"); - _trans = this.GetTransition("t0"); - } - - public void setTime(string value) - { - _timeText.text = value; - } - - public void setRead(bool value) - { - _readController.selectedIndex = value ? 1 : 0; - } - - public void setFetched(bool value) - { - _fetchController.selectedIndex = value ? 1 : 0; - } - - public void PlayEffect(float delay) - { - this.visible = false; - _trans.Play(1, delay, null); - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs.meta b/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs.meta deleted file mode 100644 index 15df212..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 26140e87934f8754689c7bf2ac147fbe -timeCreated: 1446648219 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Filter.meta b/Assets/Plugins/FairyGUI/Examples/Filter.meta deleted file mode 100644 index 1436889..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Filter.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 029ae1bcb2ae7f2448723a7be724a31d -folderAsset: yes -timeCreated: 1465913233 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs b/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs deleted file mode 100644 index 16f101a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs +++ /dev/null @@ -1,78 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class FilterMain : MonoBehaviour -{ - GComponent _mainView; - GSlider _s0; - GSlider _s1; - GSlider _s2; - GSlider _s3; - GSlider _s4; - - void Awake() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - UIPackage.AddPackage("UI/Filter"); - } - - void Start() - { - _mainView = this.GetComponent().ui; - - BlurFilter blurFilter = new BlurFilter(); - blurFilter.blurSize = 2; - _mainView.GetChild("n21").filter = blurFilter; - - _s0 = _mainView.GetChild("s0").asSlider; - _s1 = _mainView.GetChild("s1").asSlider; - _s2 = _mainView.GetChild("s2").asSlider; - _s3 = _mainView.GetChild("s3").asSlider; - _s4 = _mainView.GetChild("s4").asSlider; - - _s0.value = 100; - _s1.value = 100; - _s2.value = 100; - _s3.value = 200; - _s4.value = 20; - - _s0.onChanged.Add(__sliderChanged); - _s1.onChanged.Add(__sliderChanged); - _s2.onChanged.Add(__sliderChanged); - _s3.onChanged.Add(__sliderChanged); - _s4.onChanged.Add(__sliderChanged); - } - - void __sliderChanged(EventContext context) - { - int cnt = _mainView.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject obj = _mainView.GetChildAt(i); - if (obj.filter is ColorFilter) - { - ColorFilter filter = (ColorFilter)obj.filter; - filter.Reset(); - filter.AdjustBrightness((float)(_s0.value - 100) / 100f); - filter.AdjustContrast((float)(_s1.value - 100) / 100f); - filter.AdjustSaturation((float)(_s2.value - 100) / 100f); - filter.AdjustHue((float)(_s3.value - 100) / 100f); - } - else if (obj.filter is BlurFilter) - { - BlurFilter filter = (BlurFilter)obj.filter; - filter.blurSize = (float)_s4.value / 100; - } - } - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs.meta deleted file mode 100644 index 798bacf..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 78878c40447242843aa913ef50cce606 -timeCreated: 1465402161 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Gesture.meta b/Assets/Plugins/FairyGUI/Examples/Gesture.meta deleted file mode 100644 index 319ed25..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Gesture.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c2c523738da07e8498b13cb58f69289e -folderAsset: yes -timeCreated: 1464248161 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs b/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs deleted file mode 100644 index 85015b7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs +++ /dev/null @@ -1,115 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class GestureMain : MonoBehaviour -{ - GComponent _mainView; - Transform _ball; - - void Awake() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - UIPackage.AddPackage("UI/Gesture"); - } - - void Start() - { - _mainView = this.GetComponent().ui; - GObject holder = _mainView.GetChild("holder"); - - _ball = GameObject.Find("Globe").transform; - - SwipeGesture gesture1 = new SwipeGesture(holder); - gesture1.onMove.Add(OnSwipeMove); - gesture1.onEnd.Add(OnSwipeEnd); - - LongPressGesture gesture2 = new LongPressGesture(holder); - gesture2.once = false; - gesture2.onAction.Add(OnHold); - - PinchGesture gesture3 = new PinchGesture(holder); - gesture3.onAction.Add(OnPinch); - - RotationGesture gesture4 = new RotationGesture(holder); - gesture4.onAction.Add(OnRotate); - } - - void OnSwipeMove(EventContext context) - { - SwipeGesture gesture = (SwipeGesture)context.sender; - Vector3 v = new Vector3(); - if (Mathf.Abs(gesture.delta.x) > Mathf.Abs(gesture.delta.y)) - { - v.y = -Mathf.Round(gesture.delta.x); - if (Mathf.Abs(v.y) < 2) //消除手抖的影响 - return; - } - else - { - v.x = -Mathf.Round(gesture.delta.y); - if (Mathf.Abs(v.x) < 2) - return; - } - _ball.Rotate(v, Space.World); - } - - void OnSwipeEnd(EventContext context) - { - SwipeGesture gesture = (SwipeGesture)context.sender; - Vector3 v = new Vector3(); - if (Mathf.Abs(gesture.velocity.x) > Mathf.Abs(gesture.velocity.y)) - { - v.y = -Mathf.Round(Mathf.Sign(gesture.velocity.x) * Mathf.Sqrt(Mathf.Abs(gesture.velocity.x))); - if (Mathf.Abs(v.y) < 2) - return; - } - else - { - v.x = -Mathf.Round(Mathf.Sign(gesture.velocity.y) * Mathf.Sqrt(Mathf.Abs(gesture.velocity.y))); - if (Mathf.Abs(v.x) < 2) - return; - } - - GTween.To(v, Vector3.zero, 0.3f).SetTarget(_ball).OnUpdate( - (GTweener tweener) => - { - _ball.Rotate(tweener.deltaValue.vec3, Space.World); - }); - } - - void OnHold(EventContext context) - { - GTween.Shake(_ball.transform.localPosition, 0.05f, 0.5f).SetTarget(_ball).OnUpdate( - (GTweener tweener) => - { - _ball.transform.localPosition = new Vector3(tweener.value.x, tweener.value.y, _ball.transform.localPosition.z); - }); - } - - void OnPinch(EventContext context) - { - GTween.Kill(_ball); - - PinchGesture gesture = (PinchGesture)context.sender; - float newValue = Mathf.Clamp(_ball.localScale.x + gesture.delta, 0.3f, 2); - _ball.localScale = new Vector3(newValue, newValue, newValue); - } - - void OnRotate(EventContext context) - { - GTween.Kill(_ball); - - RotationGesture gesture = (RotationGesture)context.sender; - _ball.Rotate(Vector3.forward, -gesture.delta, Space.World); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs.meta deleted file mode 100644 index a9cf54f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: dffc58029aa66074287bfe11db08a102 -timeCreated: 1464248165 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Guide.meta b/Assets/Plugins/FairyGUI/Examples/Guide.meta deleted file mode 100644 index 56649df..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Guide.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bf04af674d0fada4d93df62ec9e22a95 -folderAsset: yes -timeCreated: 1456392097 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs b/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs deleted file mode 100644 index 896236f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class GuideMain : MonoBehaviour -{ - GComponent _mainView; - GComponent _guideLayer; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _guideLayer = UIPackage.CreateObject("Guide", "GuideLayer").asCom; - _guideLayer.SetSize(GRoot.inst.width, GRoot.inst.height); - _guideLayer.AddRelation(GRoot.inst, RelationType.Size); - - GObject bagBtn = _mainView.GetChild("bagBtn"); - bagBtn.onClick.Add(() => - { - _guideLayer.RemoveFromParent(); - }); - - _mainView.GetChild("n2").onClick.Add(() => - { - GRoot.inst.AddChild(_guideLayer); //!!Before using TransformRect(or GlobalToLocal), the object must be added first - Rect rect = bagBtn.TransformRect(new Rect(0, 0, bagBtn.width, bagBtn.height), _guideLayer); - - GObject window = _guideLayer.GetChild("window"); - window.size = new Vector2((int)rect.size.x, (int)rect.size.y); - window.TweenMove(new Vector2((int)rect.position.x, (int)rect.position.y), 0.5f); - }); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs.meta deleted file mode 100644 index e2369c8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 917e86e515017db488b38e836ed52634 -timeCreated: 1456392101 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HeadBar.meta b/Assets/Plugins/FairyGUI/Examples/HeadBar.meta deleted file mode 100644 index ec48900..0000000 --- a/Assets/Plugins/FairyGUI/Examples/HeadBar.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8294eab8d3a942c43aed8054200d3119 -folderAsset: yes -timeCreated: 1446540831 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs b/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs deleted file mode 100644 index 47b1fc4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class HeadBarMain : MonoBehaviour -{ - GComponent _mainView; - - void Start() - { - Application.targetFrameRate = 60; - - Stage.inst.onKeyDown.Add(OnKeyDown); - - Transform npc = GameObject.Find("npc1").transform; - UIPanel panel = npc.Find("HeadBar").GetComponent(); - panel.ui.GetChild("name").text = "Long [color=#FFFFFF]Long[/color][img]ui://HeadBar/cool[/img] Name"; - panel.ui.GetChild("blood").asProgress.value = 75; - panel.ui.GetChild("sign").asLoader.url = "ui://HeadBar/task"; - - npc = GameObject.Find("npc2").transform; - panel = npc.Find("HeadBar").GetComponent(); - panel.ui.GetChild("name").text = "Man2"; - panel.ui.GetChild("blood").asProgress.value = 25; - panel.ui.GetChild("sign").asLoader.url = "ui://HeadBar/fighting"; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs.meta deleted file mode 100644 index 5e271bf..0000000 --- a/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3f24b49a96743734c8d2ef9ba2c9b32d -timeCreated: 1446540834 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HitTest.meta b/Assets/Plugins/FairyGUI/Examples/HitTest.meta deleted file mode 100644 index 4a3463d..0000000 --- a/Assets/Plugins/FairyGUI/Examples/HitTest.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 108d5a390778d664cb644fadf56d6faf -folderAsset: yes -timeCreated: 1456474673 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs b/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs deleted file mode 100644 index c72eb11..0000000 --- a/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs +++ /dev/null @@ -1,40 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class HitTestMain : MonoBehaviour -{ - Transform cube; - - void Start() - { - Application.targetFrameRate = 60; - - cube = GameObject.Find("Cube").transform; - - Stage.inst.onTouchBegin.Add(OnTouchBegin); - } - - void OnTouchBegin() - { - if (!Stage.isTouchOnUI) - { - RaycastHit hit; - Ray ray = Camera.main.ScreenPointToRay(new Vector2(Stage.inst.touchPosition.x, Screen.height - Stage.inst.touchPosition.y)); - if (Physics.Raycast(ray, out hit)) - { - if (hit.transform == cube) - { - Debug.Log("Hit the cube"); - } - } - } - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs.meta deleted file mode 100644 index 5b8d374..0000000 --- a/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 12542fe68a883624ea477c953ae0cf52 -timeCreated: 1456474677 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick.meta b/Assets/Plugins/FairyGUI/Examples/Joystick.meta deleted file mode 100644 index 0814ea1..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Joystick.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c90dbc7e654112a4dbaa796e7e3cc987 -folderAsset: yes -timeCreated: 1446193142 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs deleted file mode 100644 index 6e60f2b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class JoystickMain : MonoBehaviour -{ - GComponent _mainView; - GTextField _text; - JoystickModule _joystick; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _text = _mainView.GetChild("n9").asTextField; - - _joystick = new JoystickModule(_mainView); - _joystick.onMove.Add(__joystickMove); - _joystick.onEnd.Add(__joystickEnd); - } - - void __joystickMove(EventContext context) - { - float degree = (float)context.data; - _text.text = "" + degree; - } - - void __joystickEnd() - { - _text.text = ""; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs.meta deleted file mode 100644 index 896b67e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 09cf2c20abdf7ea428bd3f1c68941949 -timeCreated: 1446193147 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs deleted file mode 100644 index 52e00af..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs +++ /dev/null @@ -1,159 +0,0 @@ -using FairyGUI; -using UnityEngine; - -public class JoystickModule : EventDispatcher -{ - float _InitX; - float _InitY; - float _startStageX; - float _startStageY; - float _lastStageX; - float _lastStageY; - GButton _button; - GObject _touchArea; - GObject _thumb; - GObject _center; - int touchId; - GTweener _tweener; - - public EventListener onMove { get; private set; } - public EventListener onEnd { get; private set; } - - public int radius { get; set; } - - public JoystickModule(GComponent mainView) - { - onMove = new EventListener(this, "onMove"); - onEnd = new EventListener(this, "onEnd"); - - _button = mainView.GetChild("joystick").asButton; - _button.changeStateOnClick = false; - _thumb = _button.GetChild("thumb"); - _touchArea = mainView.GetChild("joystick_touch"); - _center = mainView.GetChild("joystick_center"); - - _InitX = _center.x + _center.width / 2; - _InitY = _center.y + _center.height / 2; - touchId = -1; - radius = 150; - - _touchArea.onTouchBegin.Add(this.OnTouchBegin); - _touchArea.onTouchMove.Add(this.OnTouchMove); - _touchArea.onTouchEnd.Add(this.OnTouchEnd); - } - - public void Trigger(EventContext context) - { - OnTouchBegin(context); - } - - private void OnTouchBegin(EventContext context) - { - if (touchId == -1)//First touch - { - InputEvent evt = (InputEvent)context.data; - touchId = evt.touchId; - - if (_tweener != null) - { - _tweener.Kill(); - _tweener = null; - } - - Vector2 pt = GRoot.inst.GlobalToLocal(new Vector2(evt.x, evt.y)); - float bx = pt.x; - float by = pt.y; - _button.selected = true; - - if (bx < 0) - bx = 0; - else if (bx > _touchArea.width) - bx = _touchArea.width; - - if (by > GRoot.inst.height) - by = GRoot.inst.height; - else if (by < _touchArea.y) - by = _touchArea.y; - - _lastStageX = bx; - _lastStageY = by; - _startStageX = bx; - _startStageY = by; - - _center.visible = true; - _center.SetXY(bx - _center.width / 2, by - _center.height / 2); - _button.SetXY(bx - _button.width / 2, by - _button.height / 2); - - float deltaX = bx - _InitX; - float deltaY = by - _InitY; - float degrees = Mathf.Atan2(deltaY, deltaX) * 180 / Mathf.PI; - _thumb.rotation = degrees + 90; - - context.CaptureTouch(); - } - } - - private void OnTouchEnd(EventContext context) - { - InputEvent inputEvt = (InputEvent)context.data; - if (touchId != -1 && inputEvt.touchId == touchId) - { - touchId = -1; - _thumb.rotation = _thumb.rotation + 180; - _center.visible = false; - _tweener = _button.TweenMove(new Vector2(_InitX - _button.width / 2, _InitY - _button.height / 2), 0.3f).OnComplete(() => - { - _tweener = null; - _button.selected = false; - _thumb.rotation = 0; - _center.visible = true; - _center.SetXY(_InitX - _center.width / 2, _InitY - _center.height / 2); - } - ); - - this.onEnd.Call(); - } - } - - private void OnTouchMove(EventContext context) - { - InputEvent evt = (InputEvent)context.data; - if (touchId != -1 && evt.touchId == touchId) - { - Vector2 pt = GRoot.inst.GlobalToLocal(new Vector2(evt.x, evt.y)); - float bx = pt.x; - float by = pt.y; - float moveX = bx - _lastStageX; - float moveY = by - _lastStageY; - _lastStageX = bx; - _lastStageY = by; - float buttonX = _button.x + moveX; - float buttonY = _button.y + moveY; - - float offsetX = buttonX + _button.width / 2 - _startStageX; - float offsetY = buttonY + _button.height / 2 - _startStageY; - - float rad = Mathf.Atan2(offsetY, offsetX); - float degree = rad * 180 / Mathf.PI; - _thumb.rotation = degree + 90; - - float maxX = radius * Mathf.Cos(rad); - float maxY = radius * Mathf.Sin(rad); - if (Mathf.Abs(offsetX) > Mathf.Abs(maxX)) - offsetX = maxX; - if (Mathf.Abs(offsetY) > Mathf.Abs(maxY)) - offsetY = maxY; - - buttonX = _startStageX + offsetX; - buttonY = _startStageY + offsetY; - if (buttonX < 0) - buttonX = 0; - if (buttonY > GRoot.inst.height) - buttonY = GRoot.inst.height; - - _button.SetXY(buttonX - _button.width / 2, buttonY - _button.height / 2); - - this.onMove.Call(degree); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs.meta b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs.meta deleted file mode 100644 index 2e42949..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c3af309cbf1dcb94f88c9484271c4c9d -timeCreated: 1446193148 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/LoopList.meta b/Assets/Plugins/FairyGUI/Examples/LoopList.meta deleted file mode 100644 index 26de28c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/LoopList.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 7b7ffb771e0a22b4ebf0a7c2bed7d802 -folderAsset: yes -timeCreated: 1456388404 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs b/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs deleted file mode 100644 index 0ae15a1..0000000 --- a/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs +++ /dev/null @@ -1,63 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class LoopListMain : MonoBehaviour -{ - GComponent _mainView; - GList _list; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - UIPackage.AddPackage("UI/LoopList"); - - _mainView = this.GetComponent().ui; - - _list = _mainView.GetChild("list").asList; - _list.SetVirtualAndLoop(); - - _list.itemRenderer = RenderListItem; - _list.numItems = 5; - _list.scrollPane.onScroll.Add(DoSpecialEffect); - - DoSpecialEffect(); - } - - void DoSpecialEffect() - { - //change the scale according to the distance to middle - float midX = _list.scrollPane.posX + _list.viewWidth / 2; - int cnt = _list.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject obj = _list.GetChildAt(i); - float dist = Mathf.Abs(midX - obj.x - obj.width / 2); - if (dist > obj.width) //no intersection - obj.SetScale(1, 1); - else - { - float ss = 1 + (1 - dist / obj.width) * 0.24f; - obj.SetScale(ss, ss); - } - } - - _mainView.GetChild("n3").text = "" + ((_list.GetFirstChildInView() + 1) % _list.numItems); - } - - void RenderListItem(int index, GObject obj) - { - GButton item = (GButton)obj; - item.SetPivot(0.5f, 0.5f); - item.icon = UIPackage.GetItemURL("LoopList", "n" + (index + 1)); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs.meta deleted file mode 100644 index c50012e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bab7cb69f587250498d0079f0e323fb0 -timeCreated: 1456388407 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting.meta b/Assets/Plugins/FairyGUI/Examples/ModalWaiting.meta deleted file mode 100644 index 05f2cac..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ModalWaiting.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 7d56bcf9c2887a841b07c14e421e98d5 -folderAsset: yes -timeCreated: 1447054712 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs deleted file mode 100644 index 969e55c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using UnityEngine; -using FairyGUI; - -public class ModalWaitingMain : MonoBehaviour -{ - GComponent _mainView; - Window4 _testWin; - - void Awake() - { - UIPackage.AddPackage("UI/ModalWaiting"); - UIConfig.globalModalWaiting = "ui://ModalWaiting/GlobalModalWaiting"; - UIConfig.windowModalWaiting = "ui://ModalWaiting/WindowModalWaiting"; - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _testWin = new Window4(); - - _mainView.GetChild("n0").onClick.Add(() => { _testWin.Show(); }); - - StartCoroutine(WaitSomeTime()); - } - - IEnumerator WaitSomeTime() - { - GRoot.inst.ShowModalWait(); - - yield return new WaitForSeconds(3); - - GRoot.inst.CloseModalWait(); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs.meta deleted file mode 100644 index 0dbe5b4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 81df70f0eca40f24eb4d6448b5e3ed22 -timeCreated: 1447054712 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs deleted file mode 100644 index a6fad6d..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs +++ /dev/null @@ -1,20 +0,0 @@ -using FairyGUI; - -public class Window4 : Window -{ - public Window4() - { - } - - protected override void OnInit() - { - this.contentPane = UIPackage.CreateObject("ModalWaiting", "TestWin").asCom; - this.contentPane.GetChild("n1").onClick.Add(OnClick); - } - - void OnClick() - { - this.ShowModalWait(); - Timers.inst.Add(3, 1, (object param) => { this.CloseModalWait(); }); - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs.meta b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs.meta deleted file mode 100644 index 5ff4f79..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ac9ab786f60351340a5de178d7d19c0d -timeCreated: 1447054712 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Model.meta b/Assets/Plugins/FairyGUI/Examples/Model.meta deleted file mode 100644 index 1e64b70..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Model.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0b78b9866af43744b820fe19b605d80a -folderAsset: yes -timeCreated: 1456389889 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs b/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs deleted file mode 100644 index 0d7382d..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class ModelMain : MonoBehaviour -{ - GComponent _mainView; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - Object prefab = Resources.Load("Role/npc"); - GameObject go = (GameObject)Object.Instantiate(prefab); - go.transform.localPosition = new Vector3(61, -89, 1000); //set z to far from UICamera is important! - go.transform.localScale = new Vector3(180, 180, 180); - go.transform.localEulerAngles = new Vector3(0, 100, 0); - _mainView.GetChild("holder").asGraph.SetNativeObject(new GoWrapper(go)); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs.meta deleted file mode 100644 index e0b0cd6..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: eabf5f06c048be84cbc8226659385e1f -timeCreated: 1456390000 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Particles.meta b/Assets/Plugins/FairyGUI/Examples/Particles.meta deleted file mode 100644 index 77a8e97..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Particles.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: df311ae819dccf7428102e1700e12ae1 -folderAsset: yes -timeCreated: 1446730751 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs b/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs deleted file mode 100644 index 6dd1a18..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs +++ /dev/null @@ -1,16 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class CoolComponent : GComponent -{ - public override void ConstructFromXML(FairyGUI.Utils.XML cxml) - { - base.ConstructFromXML(cxml); - - GGraph graph = this.GetChild("effect").asGraph; - - Object prefab = Resources.Load("Flame"); - GameObject go = (GameObject)Object.Instantiate(prefab); - graph.SetNativeObject(new GoWrapper(go)); - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs.meta b/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs.meta deleted file mode 100644 index c64195f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b5abdea97f302e7438821d427b458651 -timeCreated: 1446781797 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs b/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs deleted file mode 100644 index c2db087..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class ParticlesMain : MonoBehaviour -{ - GComponent _mainView; - - void Awake() - { - UIPackage.AddPackage("UI/Particles"); - - UIObjectFactory.SetPackageItemExtension("ui://Particles/CoolComponent", typeof(CoolComponent)); - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - Object prefab = Resources.Load("Flame"); - GameObject go = (GameObject)Object.Instantiate(prefab); - _mainView.GetChild("holder").asGraph.SetNativeObject(new GoWrapper(go)); - - _mainView.GetChild("c0").draggable = true; - _mainView.GetChild("c1").draggable = true; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs.meta deleted file mode 100644 index 82a01aa..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 1be113d23714dfb49819b314ffb3ffdc -timeCreated: 1446731503 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Perspetive.meta b/Assets/Plugins/FairyGUI/Examples/Perspetive.meta deleted file mode 100644 index 3f08dbe..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Perspetive.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 75bbf0b6726dd1c4685b6a5f8970b045 -folderAsset: yes -timeCreated: 1456393929 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs b/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs deleted file mode 100644 index 0357efd..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs +++ /dev/null @@ -1,29 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class PerspectiveMain : MonoBehaviour -{ - GList _list; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - //GComponent g1 = GameObject.Find("UIPanel1").GetComponent().ui; - - GComponent g2 = GameObject.Find("UIPanel2").GetComponent().ui; - _list = g2.GetChild("mailList").asList; - _list.SetVirtual(); - _list.itemRenderer = (int index, GObject obj) => { obj.text = index + " Mail title here"; }; - _list.numItems = 20; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs.meta deleted file mode 100644 index 94a60e9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ccbee12c33459e546bf698dc4ca46bea -timeCreated: 1456393933 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh.meta b/Assets/Plugins/FairyGUI/Examples/PullToRefresh.meta deleted file mode 100644 index 980872c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/PullToRefresh.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4cd02b3a50ee7314290496197a8ad749 -folderAsset: yes -timeCreated: 1497251849 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs deleted file mode 100644 index 762f917..0000000 --- a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs +++ /dev/null @@ -1,98 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class PullToRefreshMain : MonoBehaviour -{ - GComponent _mainView; - GList _list1; - GList _list2; - - void Awake() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - UIObjectFactory.SetPackageItemExtension("ui://PullToRefresh/Header", typeof(ScrollPaneHeader)); - } - - void Start() - { - _mainView = this.GetComponent().ui; - - _list1 = _mainView.GetChild("list1").asList; - _list1.itemRenderer = RenderListItem1; - _list1.SetVirtual(); - _list1.numItems = 1; - _list1.scrollPane.onPullDownRelease.Add(OnPullDownToRefresh); - - _list2 = _mainView.GetChild("list2").asList; - _list2.itemRenderer = RenderListItem2; - _list2.SetVirtual(); - _list2.numItems = 1; - _list2.scrollPane.onPullUpRelease.Add(OnPullUpToRefresh); - } - - void RenderListItem1(int index, GObject obj) - { - GButton item = obj.asButton; - item.title = "Item " + (_list1.numItems - index - 1); - } - - void RenderListItem2(int index, GObject obj) - { - GButton item = obj.asButton; - item.title = "Item " + index; - } - - void OnPullDownToRefresh() - { - ScrollPaneHeader header = (ScrollPaneHeader)_list1.scrollPane.header; - if (header.ReadyToRefresh) - { - header.SetRefreshStatus(2); - _list1.scrollPane.LockHeader(header.sourceHeight); - - //Simulate a async resquest - Timers.inst.Add(2, 1, (object param) => - { - _list1.numItems += 5; - - //Refresh completed - header.SetRefreshStatus(3); - _list1.scrollPane.LockHeader(35); - - Timers.inst.Add(2, 1, (object param2) => - { - header.SetRefreshStatus(0); - _list1.scrollPane.LockHeader(0); - }); - }); - } - } - - void OnPullUpToRefresh() - { - GComponent footer = (GComponent)_list2.scrollPane.footer; - - footer.GetController("c1").selectedIndex = 1; - _list2.scrollPane.LockFooter(footer.sourceHeight); - - //Simulate a async resquest - Timers.inst.Add(2, 1, (object param) => - { - _list2.numItems += 5; - - //Refresh completed - footer.GetController("c1").selectedIndex = 0; - _list2.scrollPane.LockFooter(0); - }); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs.meta deleted file mode 100644 index 374cb90..0000000 --- a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: cc11ef8b3e553814d83688351418d0cf -timeCreated: 1497251849 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs deleted file mode 100644 index 66e1d83..0000000 --- a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs +++ /dev/null @@ -1,37 +0,0 @@ -using FairyGUI; -using UnityEngine; - -public class ScrollPaneHeader : GComponent -{ - Controller _c1; - - public override void ConstructFromXML(FairyGUI.Utils.XML xml) - { - base.ConstructFromXML(xml); - - _c1 = this.GetController("c1"); - - this.onSizeChanged.Add(OnSizeChanged); - } - - void OnSizeChanged() - { - if (_c1.selectedIndex == 2 || _c1.selectedIndex == 3) - return; - - if (this.height > this.sourceHeight) - _c1.selectedIndex = 1; - else - _c1.selectedIndex = 0; - } - - public bool ReadyToRefresh - { - get { return _c1.selectedIndex == 1; } - } - - public void SetRefreshStatus(int value) - { - _c1.selectedIndex = value; - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs.meta b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs.meta deleted file mode 100644 index 6b2c18f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 30c3bcfb5d9414e4d8f75eedcfddea9c -timeCreated: 1497253470 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture.meta deleted file mode 100644 index 87a2655..0000000 --- a/Assets/Plugins/FairyGUI/Examples/RenderTexture.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f22327fed912f5d43a01c26c059c39ac -folderAsset: yes -timeCreated: 1446193142 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs deleted file mode 100644 index 5b8f035..0000000 --- a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs +++ /dev/null @@ -1,292 +0,0 @@ -using FairyGUI; -using FairyGUI.Utils; -using System.Collections; -using UnityEngine; - -public class RenderImage -{ - public Transform modelRoot { get; private set; } - - Camera _camera; - Image _image; - Transform _root; - Transform _background; - Transform _model; - RenderTexture _renderTexture; - int _width; - int _height; - bool _cacheTexture; - float _rotating; - - const int RENDER_LAYER = 0; - const int HIDDEN_LAYER = 10; - - public RenderImage(GGraph holder) - { - _width = (int)holder.width; - _height = (int)holder.height; - _cacheTexture = true; - - this._image = new Image(); - holder.SetNativeObject(this._image); - - Object prefab = Resources.Load("RenderTexture/RenderImageCamera"); - GameObject go = (GameObject)Object.Instantiate(prefab); - _camera = go.GetComponent(); - _camera.transform.position = new Vector3(0, 1000, 0); - _camera.cullingMask = 1 << RENDER_LAYER; - _camera.enabled = false; - Object.DontDestroyOnLoad(_camera.gameObject); - - this._root = new GameObject("RenderImage").transform; - this._root.SetParent(_camera.transform, false); - SetLayer(this._root.gameObject, HIDDEN_LAYER); - - this.modelRoot = new GameObject("model_root").transform; - this.modelRoot.SetParent(this._root, false); - - this._background = new GameObject("background").transform; - this._background.SetParent(this._root, false); - - this._image.onAddedToStage.Add(OnAddedToStage); - this._image.onRemovedFromStage.Add(OnRemoveFromStage); - - if (this._image.stage != null) - OnAddedToStage(); - else - _camera.gameObject.SetActive(false); - } - - public void Dispose() - { - Object.Destroy(_camera.gameObject); - DestroyTexture(); - - this._image.Dispose(); - this._image = null; - } - - /// - /// The rendertexture is not transparent. So if you want to the UI elements can be seen in the back of the models/particles in rendertexture, - /// you can set a maximunm two images for background. - /// Be careful if your image is 9 grid scaling, you must make sure the place holder is inside the middle box(dont cover from border to middle). - /// - /// - public void SetBackground(GObject image) - { - SetBackground(image, null); - } - - /// - /// The rendertexture is not transparent. So if you want to the UI elements can be seen in the back of the models/particles in rendertexture, - /// you can set a maximunm two images for background. - /// - /// - /// - public void SetBackground(GObject image1, GObject image2) - { - Image source1 = (Image)image1.displayObject; - Image source2 = image2 != null ? (Image)image2.displayObject : null; - - Vector3 pos = _background.position; - pos.z = _camera.farClipPlane; - _background.position = pos; - - Vector2[] uv = new Vector2[4]; - Vector2[] uv2 = null; - - Rect rect = _image.TransformRect(new Rect(0, 0, this._width, this._height), source1); - Rect uvRect = GetImageUVRect(source1, rect, uv); - - if (source2 != null) - { - rect = _image.TransformRect(new Rect(0, 0, this._width, this._height), source2); - uv2 = new Vector2[4]; - GetImageUVRect(source2, rect, uv2); - } - - Vector3[] vertices = new Vector3[4]; - for (int i = 0; i < 4; i++) - { - Vector2 v = uv[i]; - vertices[i] = new Vector3((v.x - uvRect.x) / uvRect.width * 2 - 1, - (v.y - uvRect.y) / uvRect.height * 2 - 1, 0); - } - - Mesh mesh = new Mesh(); - mesh.vertices = vertices; - mesh.uv = uv; - if (uv2 != null) - mesh.uv2 = uv2; - mesh.colors32 = new Color32[] { Color.white, Color.white, Color.white, Color.white }; - mesh.triangles = new int[] { 0, 1, 2, 2, 3, 0 }; - - MeshFilter meshFilter = this._background.gameObject.GetComponent(); - if (meshFilter == null) - meshFilter = this._background.gameObject.AddComponent(); - meshFilter.mesh = mesh; - MeshRenderer meshRenderer = this._background.gameObject.GetComponent(); - if (meshRenderer == null) - meshRenderer = this._background.gameObject.AddComponent(); -#if (UNITY_5 || UNITY_5_3_OR_NEWER) - meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; -#else - meshRenderer.castShadows = false; -#endif - meshRenderer.receiveShadows = false; - Shader shader = Shader.Find("Game/FullScreen"); - Material mat = new Material(shader); - mat.mainTexture = source1.texture.nativeTexture; - if (source2 != null) - mat.SetTexture("_Tex2", source2.texture.nativeTexture); - meshRenderer.material = mat; - } - - Rect GetImageUVRect(Image image, Rect localRect, Vector2[] uv) - { - Rect imageRect = new Rect(0, 0, image.size.x, image.size.y); - Rect bound = ToolSet.Intersection(ref imageRect, ref localRect); - Rect uvRect = image.texture.uvRect; - - if (image.scale9Grid != null) - { - Rect gridRect = (Rect)image.scale9Grid; - float sourceW = image.texture.width; - float sourceH = image.texture.height; - uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, gridRect.xMin / sourceW), - Mathf.Lerp(uvRect.yMin, uvRect.yMax, (sourceH - gridRect.yMax) / sourceH), - Mathf.Lerp(uvRect.xMin, uvRect.xMax, gridRect.xMax / sourceW), - Mathf.Lerp(uvRect.yMin, uvRect.yMax, (sourceH - gridRect.yMin) / sourceH)); - - float vw = imageRect.width - (sourceW - gridRect.width); - float vh = imageRect.height - (sourceH - gridRect.height); - uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, (bound.x - gridRect.x) / vw), - Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMax - (sourceH - gridRect.yMax)) / vh), - Mathf.Lerp(uvRect.xMin, uvRect.xMax, (bound.xMax - gridRect.x) / vw), - Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMin - gridRect.y) / vh)); - } - else - { - uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, bound.xMin / imageRect.width), - Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMax) / imageRect.height), - Mathf.Lerp(uvRect.xMin, uvRect.xMax, bound.xMax / imageRect.width), - Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMin) / imageRect.height)); - } - - uv[0] = uvRect.position; - uv[1] = new Vector2(uvRect.xMin, uvRect.yMax); - uv[2] = new Vector2(uvRect.xMax, uvRect.yMax); - uv[3] = new Vector2(uvRect.xMax, uvRect.yMin); - - if (image.texture.rotated) - ToolSet.RotateUV(uv, ref image.texture.uvRect); - - return uvRect; - } - - public void LoadModel(string model) - { - this.UnloadModel(); - - Object prefab = Resources.Load(model); - GameObject go = ((GameObject)Object.Instantiate(prefab)); - _model = go.transform; - _model.SetParent(this.modelRoot, false); - } - - public void UnloadModel() - { - if (_model != null) - { - Object.Destroy(_model.gameObject); - _model = null; - } - _rotating = 0; - } - - public void StartRotate(float delta) - { - _rotating = delta; - } - - public void StopRotate() - { - _rotating = 0; - } - - void CreateTexture() - { - if (_renderTexture != null) - return; - - _renderTexture = new RenderTexture(_width, _height, 24, RenderTextureFormat.ARGB32) - { - antiAliasing = 1, - filterMode = FilterMode.Bilinear, - anisoLevel = 0, - useMipMap = false - }; - this._image.texture = new NTexture(_renderTexture); - this._image.blendMode = BlendMode.Off; - } - - void DestroyTexture() - { - if (_renderTexture != null) - { - Object.Destroy(_renderTexture); - _renderTexture = null; - this._image.texture = null; - } - } - - void OnAddedToStage() - { - if (_renderTexture == null) - CreateTexture(); - - Timers.inst.AddUpdate(this.Render); - _camera.gameObject.SetActive(true); - - Render(); - } - - void OnRemoveFromStage() - { - if (!_cacheTexture) - DestroyTexture(); - - Timers.inst.Remove(this.Render); - _camera.gameObject.SetActive(false); - } - - void Render(object param = null) - { - if (_rotating != 0 && this.modelRoot != null) - { - Vector3 localRotation = this.modelRoot.localRotation.eulerAngles; - localRotation.y += _rotating; - this.modelRoot.localRotation = Quaternion.Euler(localRotation); - } - - SetLayer(this._root.gameObject, RENDER_LAYER); - - _camera.targetTexture = this._renderTexture; - RenderTexture old = RenderTexture.active; - RenderTexture.active = this._renderTexture; - GL.Clear(true, true, Color.clear); - _camera.Render(); - RenderTexture.active = old; - - SetLayer(this._root.gameObject, HIDDEN_LAYER); - } - - void SetLayer(GameObject go, int layer) - { - Transform[] transforms = go.GetComponentsInChildren(true); - foreach (Transform t in transforms) - { - t.gameObject.layer = layer; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs.meta deleted file mode 100644 index 093c1aa..0000000 --- a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: aeda19930ca9fac4a84f365bf998d0cf -timeCreated: 1446193148 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs deleted file mode 100644 index fbfc24f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs +++ /dev/null @@ -1,28 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class RenderTextureMain : MonoBehaviour -{ - GComponent _mainView; - Window3 _testWin; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _testWin = new Window3(); - - _mainView.GetChild("n2").onClick.Add(() => { _testWin.Show(); }); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs.meta deleted file mode 100644 index 7dc675f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d029d4d78090c764a97f4497beff32e3 -timeCreated: 1446194671 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs b/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs deleted file mode 100644 index 9180c2a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using FairyGUI; -using UnityEngine; - -public class Window3 : Window -{ - RenderImage _renderImage; - - public Window3() - { - } - - protected override void OnInit() - { - this.contentPane = UIPackage.CreateObject("RenderTexture", "TestWin").asCom; - this.SetXY(200, 50); - - _renderImage = new RenderImage(contentPane.GetChild("holder").asGraph); - //RenderImage是不透明的,可以设置最多两张图片作为背景图 - _renderImage.SetBackground(contentPane.GetChild("frame").asCom.GetChild("n0"), contentPane.GetChild("n20")); - - contentPane.GetChild("btnLeft").onTouchBegin.Add(__clickLeft); - contentPane.GetChild("btnRight").onTouchBegin.Add(__clickRight); - } - - override protected void OnShown() - { - _renderImage.LoadModel("Role/npc"); - _renderImage.modelRoot.localPosition = new Vector3(0, -1.0f, 5f); - _renderImage.modelRoot.localScale = new Vector3(1, 1, 1); - _renderImage.modelRoot.localRotation = Quaternion.Euler(0, 120, 0); - } - - void __clickLeft() - { - _renderImage.StartRotate(-2); - Stage.inst.onTouchEnd.Add(__touchEnd); - } - - void __clickRight() - { - _renderImage.StartRotate(2); - Stage.inst.onTouchEnd.Add(__touchEnd); - } - - void __touchEnd() - { - _renderImage.StopRotate(); - Stage.inst.onTouchEnd.Remove(__touchEnd); - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs.meta deleted file mode 100644 index 2737db7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e19eee4cdc2f5764c8991f5aaad3754b -timeCreated: 1447054712 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources.meta b/Assets/Plugins/FairyGUI/Examples/Resources.meta deleted file mode 100644 index 1c4366c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 3c89aebc44f76dc47855d7b455026700 -folderAsset: yes -timeCreated: 1449041031 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown.meta deleted file mode 100644 index 43db5a8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f2a07f54f3dd8e948a37ff08b62569f9 -folderAsset: yes -timeCreated: 1447172581 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png deleted file mode 100644 index f40e06b..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png.meta deleted file mode 100644 index fe88679..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 6b193ab9468c3b74590657e2d92b0eea -timeCreated: 1446006669 -licenseType: Pro -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png deleted file mode 100644 index 49299f8..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png.meta deleted file mode 100644 index 73cc69e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: f396206c6676c384cb91c6498b66a216 -timeCreated: 1446012070 -licenseType: Pro -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Curve.meta deleted file mode 100644 index 67c2b2e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Curve.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 09da2afb7a34e0e4ca71b6e7f413252c -folderAsset: yes -timeCreated: 1462114991 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat deleted file mode 100644 index c3713ef..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat +++ /dev/null @@ -1,108 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: New Material - m_Shader: {fileID: 4800000, guid: 263c97191482b3649ac7bf0810cc4f77, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] - m_InvalidKeywords: - - _EMISSION - m_LightmapFlags: 1 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailBump: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainBump: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _BlendDstFactor: 10 - - _BlendSrcFactor: 5 - - _BumpScale: 1 - - _ColorMask: 15 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _Shininess: 0.2 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _Stencil: 0 - - _StencilComp: 8 - - _StencilOp: 0 - - _StencilReadMask: 255 - - _StencilWriteMask: 255 - - _Strength: 0.2 - - _UVSec: 0 - - _UseUIAlphaClip: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _Specular: {r: 0, g: 0, b: 0, a: 0} - m_BuildTextureStacks: [] diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat.meta deleted file mode 100644 index 6cbc7da..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ec52002c32d42344f96be9a0561d52f8 -timeCreated: 1461431446 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX deleted file mode 100644 index 18ff2b7..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX.meta deleted file mode 100644 index 9de8cd1..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX.meta +++ /dev/null @@ -1,95 +0,0 @@ -fileFormatVersion: 2 -guid: 442eade8c078c3e4ca12a9990b30a6b3 -timeCreated: 1461740092 -licenseType: Pro -ModelImporter: - serializedVersion: 22 - fileIDToRecycleName: - 100000: //RootNode - 400000: //RootNode - 2300000: //RootNode - 3300000: //RootNode - 4300000: Plane02 - externalObjects: - - first: - type: UnityEngine:Material - assembly: UnityEngine.CoreModule - name: "\u6807\u51C6_7" - second: {fileID: 2100000, guid: efd0b1293e5bf5e48b0934a7db8c9790, type: 2} - materials: - importMaterials: 0 - materialName: 0 - materialSearch: 1 - materialLocation: 0 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 1 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - importVisibility: 0 - importBlendShapes: 1 - importCameras: 0 - importLights: 0 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMeshForGPU: 1 - keepQuads: 0 - weldVertices: 1 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 4 - normalCalculationMode: 0 - importAnimation: 1 - copyAvatar: 0 - humanDescription: - serializedVersion: 2 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - rootMotionBoneName: - rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 0 - lastHumanDescriptionAvatarSource: {instanceID: 0} - animationType: 0 - humanoidOversampling: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples.meta deleted file mode 100644 index d065be9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e596969c20c3a5b479a4fccc3846a158 -folderAsset: yes -timeCreated: 1540889270 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects.meta deleted file mode 100644 index e0a622a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d171af73706b94848aae8155091f8359 -folderAsset: yes -timeCreated: 1540889270 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials.meta deleted file mode 100644 index f9eaba2..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: adf33bc6bcb1c4a48919363779800f0e -folderAsset: yes -timeCreated: 1540889270 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat deleted file mode 100644 index 207e107..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat +++ /dev/null @@ -1,139 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: EmbersParticle - m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _EMISSION - m_LightmapFlags: 1 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _DetailAlbedoMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _DetailMask - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _DetailNormalMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _EmissionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _MainTex - second: - m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _MetallicGlossMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _Normal - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _OcclusionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _ParallaxMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - first: - name: _BumpScale - second: 1 - - first: - name: _Cutoff - second: 0.5 - - first: - name: _DetailNormalMapScale - second: 1 - - first: - name: _DstBlend - second: 0 - - first: - name: _GlossMapScale - second: 1 - - first: - name: _Glossiness - second: 0.5 - - first: - name: _GlossyReflections - second: 1 - - first: - name: _InvFade - second: 3 - - first: - name: _Metallic - second: 0 - - first: - name: _Mode - second: 0 - - first: - name: _OcclusionStrength - second: 1 - - first: - name: _Parallax - second: 0.02 - - first: - name: _SmoothnessTextureChannel - second: 0 - - first: - name: _SpecularHighlights - second: 1 - - first: - name: _SrcBlend - second: 1 - - first: - name: _UVSec - second: 0 - - first: - name: _ZWrite - second: 1 - m_Colors: - - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: 1} - - first: - name: _EmissionColor - second: {r: 0, g: 0, b: 0, a: 1} - - first: - name: _TintColor - second: {r: 1, g: 1, b: 1, a: 0.5} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat.meta deleted file mode 100644 index 253751e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 776677ab3818fb249adaca05f4e04545 -timeCreated: 1471532950 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat deleted file mode 100644 index c78ef12..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat +++ /dev/null @@ -1,142 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: FlameRoundYellowParticle - m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _ALPHABLEND_ON _EMISSION - m_LightmapFlags: 1 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _DetailAlbedoMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _DetailMask - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _DetailNormalMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _EmissionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _MainTex - second: - m_Texture: {fileID: 2800000, guid: 408718fd5f763de42b12f849570ddf58, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _MetallicGlossMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _OcclusionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _ParallaxMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - first: - name: _SpecGlossMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - first: - name: _BumpScale - second: 1 - - first: - name: _Cutoff - second: 0.5 - - first: - name: _DetailNormalMapScale - second: 1 - - first: - name: _DstBlend - second: 10 - - first: - name: _GlossMapScale - second: 1 - - first: - name: _Glossiness - second: 0 - - first: - name: _GlossyReflections - second: 1 - - first: - name: _InvFade - second: 1.08 - - first: - name: _Metallic - second: 0 - - first: - name: _Mode - second: 2 - - first: - name: _OcclusionStrength - second: 1 - - first: - name: _Parallax - second: 0.02 - - first: - name: _SmoothnessTextureChannel - second: 0 - - first: - name: _SpecularHighlights - second: 1 - - first: - name: _SrcBlend - second: 5 - - first: - name: _UVSec - second: 0 - - first: - name: _ZWrite - second: 0 - m_Colors: - - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: 1} - - first: - name: _EmissionColor - second: {r: 2.691177, g: 1.7967563, b: 0.45512548, a: 1} - - first: - name: _SpecColor - second: {r: 0, g: 0, b: 0, a: 1} - - first: - name: _TintColor - second: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat.meta deleted file mode 100644 index b13f4a8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d7f098ed9997e714193be5e86df013f4 -timeCreated: 1472825013 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures.meta deleted file mode 100644 index f00cba7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ce0e4ec1bd0849344987f11ae258efc8 -folderAsset: yes -timeCreated: 1540889270 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif deleted file mode 100644 index ac36e19..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif.meta deleted file mode 100644 index cb1c49d..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif.meta +++ /dev/null @@ -1,68 +0,0 @@ -fileFormatVersion: 2 -guid: 408718fd5f763de42b12f849570ddf58 -timeCreated: 1474988750 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared.meta deleted file mode 100644 index bcd4bd5..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a08394102f0a3df47b722e7ea7dd4919 -folderAsset: yes -timeCreated: 1540889270 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs.meta deleted file mode 100644 index e8c1cd7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7ec6e3a0e2444d64c8df41cd39e51077 -folderAsset: yes -timeCreated: 1540889270 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab deleted file mode 100644 index 7becdd5..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab +++ /dev/null @@ -1,76 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 1000011210275196} - m_IsPrefabParent: 1 ---- !u!1 &1000011210275196 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4000010154436032} - - component: {fileID: 108000013609061350} - m_Layer: 0 - m_Name: ParticlesLight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4000010154436032 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000011210275196} - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} - m_LocalPosition: {x: -11.65, y: 1.29, z: 4.89} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} ---- !u!108 &108000013609061350 -Light: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000011210275196} - m_Enabled: 1 - serializedVersion: 7 - m_Type: 2 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 4 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 4 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab.meta deleted file mode 100644 index 2a0c9ce..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fa35d75604d172d48b7a6b62a07c7dbf -timeCreated: 1472572134 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab deleted file mode 100644 index f19c302..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab +++ /dev/null @@ -1,10071 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 1000010823978654} - m_IsPrefabParent: 1 ---- !u!1 &1000010646992276 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4000011600473472} - - component: {fileID: 198000012351162682} - - component: {fileID: 199000013425100488} - m_Layer: 0 - m_Name: Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1000010823978654 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4000010409153280} - - component: {fileID: 198000013227194214} - - component: {fileID: 199000010346745340} - m_Layer: 0 - m_Name: Flame - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1000013439165456 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4000012936073094} - - component: {fileID: 198000013621194436} - - component: {fileID: 199000010792666018} - m_Layer: 0 - m_Name: FireEmbers - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4000010409153280 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000010823978654} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -10.45, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4000012936073094} - - {fileID: 4000011600473472} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4000011600473472 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000010646992276} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 1.07} - m_LocalScale: {x: 2, y: 2, z: 2} - m_Children: [] - m_Father: {fileID: 4000010409153280} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4000012936073094 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000013439165456} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.028, y: 0.112, z: 0.15} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4000010409153280} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!198 &198000012351162682 -ParticleSystem: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000010646992276} - serializedVersion: 5 - lengthInSec: 3 - simulationSpeed: 2 - stopAction: 0 - looping: 1 - prewarm: 0 - playOnAwake: 1 - useUnscaledTime: 0 - autoRandomSeed: 1 - useRigidbodyForVelocity: 1 - startDelay: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - moveWithTransform: 0 - moveWithCustomTransform: {fileID: 0} - scalingMode: 1 - randomSeed: 2002730548 - InitialModule: - serializedVersion: 3 - enabled: 1 - startLifetime: - serializedVersion: 2 - minMaxState: 0 - scalar: 3 - minScalar: 5 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startSpeed: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 5 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startColor: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - startSize: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startSizeY: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startSizeZ: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startRotationX: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startRotationY: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startRotation: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - randomizeRotationDirection: 0 - maxNumParticles: 1000 - size3D: 0 - rotation3D: 0 - gravityModifier: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - ShapeModule: - serializedVersion: 5 - enabled: 0 - type: 4 - angle: 25 - length: 5 - boxThickness: {x: 0, y: 0, z: 0} - radiusThickness: 1 - donutRadius: 0.2 - m_Position: {x: 0, y: 0, z: 0} - m_Rotation: {x: 0, y: 0, z: 0} - m_Scale: {x: 1, y: 1, z: 1} - placementMode: 0 - m_Mesh: {fileID: 0} - m_MeshRenderer: {fileID: 0} - m_SkinnedMeshRenderer: {fileID: 0} - m_MeshMaterialIndex: 0 - m_MeshNormalOffset: 0 - m_UseMeshMaterialIndex: 0 - m_UseMeshColors: 1 - alignToDirection: 0 - randomDirectionAmount: 0 - sphericalDirectionAmount: 0 - randomPositionAmount: 0 - radius: - value: 1 - mode: 0 - spread: 0 - speed: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - arc: - value: 360 - mode: 0 - spread: 0 - speed: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - EmissionModule: - enabled: 1 - serializedVersion: 4 - rateOverTime: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 10 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - rateOverDistance: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_BurstCount: 1 - m_Bursts: - - serializedVersion: 2 - time: 0 - countCurve: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - cycleCount: 1 - repeatInterval: 0.01 - SizeModule: - enabled: 0 - curve: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - RotationModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.7853982 - minScalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - ColorModule: - enabled: 1 - gradient: - serializedVersion: 2 - minMaxState: 1 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 0.7254902, b: 0, a: 1} - key1: {r: 1, g: 0.7254902, b: 0, a: 0.7411765} - key2: {r: 0, g: 0, b: 0, a: 1} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 31418 - atime2: 65535 - atime3: 65535 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 3 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - UVModule: - enabled: 0 - mode: 0 - frameOverTime: - serializedVersion: 2 - minMaxState: 1 - scalar: 0.9999 - minScalar: 0.9999 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startFrame: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - tilesX: 1 - tilesY: 1 - animationType: 0 - rowIndex: 0 - cycles: 1 - uvChannelMask: -1 - flipU: 0 - flipV: 0 - randomRow: 1 - sprites: - - sprite: {fileID: 0} - VelocityModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - inWorldSpace: 0 - InheritVelocityModule: - enabled: 0 - m_Mode: 0 - m_Curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - ForceModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - inWorldSpace: 0 - randomizePerFrame: 0 - ExternalForcesModule: - enabled: 0 - multiplier: 1 - ClampVelocityModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - magnitude: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxis: 0 - inWorldSpace: 0 - multiplyDragByParticleSize: 1 - multiplyDragByParticleVelocity: 1 - dampen: 1 - drag: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - NoiseModule: - enabled: 0 - strength: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.2 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - strengthY: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - strengthZ: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - frequency: 0.5 - damping: 1 - octaves: 1 - octaveMultiplier: 0.5 - octaveScale: 2 - quality: 2 - scrollSpeed: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.2 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remap: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapY: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapZ: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapEnabled: 0 - positionAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - rotationAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - sizeAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - SizeBySpeedModule: - enabled: 0 - curve: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - range: {x: 0, y: 1} - separateAxes: 0 - RotationBySpeedModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.7853982 - minScalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - range: {x: 0, y: 1} - ColorBySpeedModule: - enabled: 0 - gradient: - serializedVersion: 2 - minMaxState: 1 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - range: {x: 0, y: 1} - CollisionModule: - enabled: 0 - serializedVersion: 3 - type: 0 - collisionMode: 0 - colliderForce: 0 - multiplyColliderForceByParticleSize: 0 - multiplyColliderForceByParticleSpeed: 0 - multiplyColliderForceByCollisionAngle: 1 - plane0: {fileID: 0} - plane1: {fileID: 0} - plane2: {fileID: 0} - plane3: {fileID: 0} - plane4: {fileID: 0} - plane5: {fileID: 0} - m_Dampen: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Bounce: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_EnergyLossOnCollision: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minKillSpeed: 0 - maxKillSpeed: 10000 - radiusScale: 1 - collidesWith: - serializedVersion: 2 - m_Bits: 4294967295 - maxCollisionShapes: 256 - quality: 0 - voxelSize: 0.5 - collisionMessages: 0 - collidesWithDynamic: 1 - interiorCollisions: 1 - TriggerModule: - enabled: 0 - collisionShape0: {fileID: 0} - collisionShape1: {fileID: 0} - collisionShape2: {fileID: 0} - collisionShape3: {fileID: 0} - collisionShape4: {fileID: 0} - collisionShape5: {fileID: 0} - inside: 1 - outside: 0 - enter: 0 - exit: 0 - radiusScale: 1 - SubModule: - serializedVersion: 2 - enabled: 0 - subEmitters: - - serializedVersion: 2 - emitter: {fileID: 0} - type: 0 - properties: 0 - LightsModule: - enabled: 1 - ratio: 1 - light: {fileID: 108000013609061350, guid: fa35d75604d172d48b7a6b62a07c7dbf, type: 2} - randomDistribution: 1 - color: 1 - range: 1 - intensity: 1 - rangeCurve: - serializedVersion: 2 - minMaxState: 0 - scalar: 10 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - intensityCurve: - serializedVersion: 2 - minMaxState: 0 - scalar: 3 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - maxLights: 1 - TrailModule: - enabled: 0 - ratio: 1 - lifetime: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minVertexDistance: 0.2 - textureMode: 0 - worldSpace: 0 - dieWithParticles: 1 - sizeAffectsWidth: 1 - sizeAffectsLifetime: 0 - inheritParticleColor: 1 - generateLightingData: 0 - colorOverLifetime: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - widthOverTrail: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - colorOverTrail: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - CustomDataModule: - enabled: 0 - mode0: 0 - vectorComponentCount0: 4 - color0: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - colorLabel0: Color - vector0_0: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_0: X - vector0_1: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_1: Y - vector0_2: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_2: Z - vector0_3: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_3: W - mode1: 0 - vectorComponentCount1: 4 - color1: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - colorLabel1: Color - vector1_0: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_0: X - vector1_1: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_1: Y - vector1_2: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_2: Z - vector1_3: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_3: W ---- !u!198 &198000013227194214 -ParticleSystem: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000010823978654} - serializedVersion: 5 - lengthInSec: 5 - simulationSpeed: 2 - stopAction: 0 - looping: 1 - prewarm: 0 - playOnAwake: 1 - useUnscaledTime: 0 - autoRandomSeed: 1 - useRigidbodyForVelocity: 1 - startDelay: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - moveWithTransform: 0 - moveWithCustomTransform: {fileID: 0} - scalingMode: 1 - randomSeed: -474648680 - InitialModule: - serializedVersion: 3 - enabled: 1 - startLifetime: - serializedVersion: 2 - minMaxState: 3 - scalar: 4 - minScalar: 4 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startSpeed: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 5 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startColor: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - startSize: - serializedVersion: 2 - minMaxState: 3 - scalar: 2 - minScalar: 2 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startSizeY: - serializedVersion: 2 - minMaxState: 3 - scalar: 1 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startSizeZ: - serializedVersion: 2 - minMaxState: 3 - scalar: 1 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startRotationX: - serializedVersion: 2 - minMaxState: 3 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startRotationY: - serializedVersion: 2 - minMaxState: 3 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startRotation: - serializedVersion: 2 - minMaxState: 3 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - randomizeRotationDirection: 0 - maxNumParticles: 1000 - size3D: 0 - rotation3D: 0 - gravityModifier: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - ShapeModule: - serializedVersion: 5 - enabled: 1 - type: 10 - angle: 25 - length: 5 - boxThickness: {x: 0, y: 0, z: 0} - radiusThickness: 1 - donutRadius: 0.2 - m_Position: {x: 0, y: 0, z: 0} - m_Rotation: {x: 0, y: 0, z: 0} - m_Scale: {x: 1, y: 1, z: 1} - placementMode: 0 - m_Mesh: {fileID: 0} - m_MeshRenderer: {fileID: 0} - m_SkinnedMeshRenderer: {fileID: 0} - m_MeshMaterialIndex: 0 - m_MeshNormalOffset: 0 - m_UseMeshMaterialIndex: 0 - m_UseMeshColors: 1 - alignToDirection: 0 - randomDirectionAmount: 0 - sphericalDirectionAmount: 0 - randomPositionAmount: 0 - radius: - value: 0.6556562 - mode: 0 - spread: 0 - speed: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - arc: - value: 360 - mode: 0 - spread: 0 - speed: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - EmissionModule: - enabled: 1 - serializedVersion: 4 - rateOverTime: - serializedVersion: 2 - minMaxState: 0 - scalar: 5 - minScalar: 10 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - rateOverDistance: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_BurstCount: 0 - m_Bursts: [] - SizeModule: - enabled: 1 - curve: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0.5 - inSlope: -1.1944004 - outSlope: -1.1944004 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - RotationModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.7853981 - minScalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - ColorModule: - enabled: 1 - gradient: - serializedVersion: 2 - minMaxState: 1 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 0.7882353, g: 0.5803922, b: 0.31764707, a: 1} - key1: {r: 1, g: 0.27058825, b: 0, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 52814 - atime2: 65535 - atime3: 65535 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 3 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - UVModule: - enabled: 1 - mode: 0 - frameOverTime: - serializedVersion: 2 - minMaxState: 1 - scalar: 0.9999 - minScalar: 0.9999 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startFrame: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - tilesX: 10 - tilesY: 5 - animationType: 0 - rowIndex: 0 - cycles: 1 - uvChannelMask: -1 - flipU: 0 - flipV: 0 - randomRow: 1 - sprites: - - sprite: {fileID: 0} - VelocityModule: - enabled: 1 - x: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0.01098901 - outSlope: 0.01098901 - tangentMode: 34 - - serializedVersion: 2 - time: 1 - value: 0.01098901 - inSlope: 0.01098901 - outSlope: 0.01098901 - tangentMode: 34 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - y: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0.109890155 - inSlope: 0.2850273 - outSlope: 0.2850273 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 1.754015 - outSlope: 1.754015 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0.5 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - z: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - inWorldSpace: 1 - InheritVelocityModule: - enabled: 0 - m_Mode: 0 - m_Curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - ForceModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - inWorldSpace: 0 - randomizePerFrame: 0 - ExternalForcesModule: - enabled: 0 - multiplier: 1 - ClampVelocityModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - magnitude: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxis: 0 - inWorldSpace: 0 - multiplyDragByParticleSize: 1 - multiplyDragByParticleVelocity: 1 - dampen: 1 - drag: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - NoiseModule: - enabled: 1 - strength: - serializedVersion: 2 - minMaxState: 1 - scalar: 0.5 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0.0000000018626451 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2.0065925 - outSlope: 2.0065925 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - strengthY: - serializedVersion: 2 - minMaxState: 1 - scalar: 0.5 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 2 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - strengthZ: - serializedVersion: 2 - minMaxState: 1 - scalar: 0 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 1 - frequency: 0.5 - damping: 1 - octaves: 1 - octaveMultiplier: 0.5 - octaveScale: 2 - quality: 2 - scrollSpeed: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.2 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remap: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 2 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapY: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapZ: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapEnabled: 0 - positionAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - rotationAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - sizeAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - SizeBySpeedModule: - enabled: 0 - curve: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0.23076923 - inSlope: -1.4293909 - outSlope: -1.4293909 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - range: {x: 0, y: 1} - separateAxes: 0 - RotationBySpeedModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.7853981 - minScalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - range: {x: 0, y: 1} - ColorBySpeedModule: - enabled: 0 - gradient: - serializedVersion: 2 - minMaxState: 1 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - range: {x: 0, y: 1} - CollisionModule: - enabled: 0 - serializedVersion: 3 - type: 0 - collisionMode: 0 - colliderForce: 0 - multiplyColliderForceByParticleSize: 0 - multiplyColliderForceByParticleSpeed: 0 - multiplyColliderForceByCollisionAngle: 1 - plane0: {fileID: 0} - plane1: {fileID: 0} - plane2: {fileID: 0} - plane3: {fileID: 0} - plane4: {fileID: 0} - plane5: {fileID: 0} - m_Dampen: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Bounce: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_EnergyLossOnCollision: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minKillSpeed: 0 - maxKillSpeed: 10000 - radiusScale: 1 - collidesWith: - serializedVersion: 2 - m_Bits: 4294967295 - maxCollisionShapes: 256 - quality: 0 - voxelSize: 0.5 - collisionMessages: 0 - collidesWithDynamic: 1 - interiorCollisions: 1 - TriggerModule: - enabled: 0 - collisionShape0: {fileID: 0} - collisionShape1: {fileID: 0} - collisionShape2: {fileID: 0} - collisionShape3: {fileID: 0} - collisionShape4: {fileID: 0} - collisionShape5: {fileID: 0} - inside: 1 - outside: 0 - enter: 0 - exit: 0 - radiusScale: 1 - SubModule: - serializedVersion: 2 - enabled: 0 - subEmitters: - - serializedVersion: 2 - emitter: {fileID: 0} - type: 0 - properties: 0 - LightsModule: - enabled: 0 - ratio: 0 - light: {fileID: 0} - randomDistribution: 1 - color: 1 - range: 1 - intensity: 1 - rangeCurve: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - intensityCurve: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - maxLights: 20 - TrailModule: - enabled: 0 - ratio: 1 - lifetime: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minVertexDistance: 0.2 - textureMode: 0 - worldSpace: 0 - dieWithParticles: 1 - sizeAffectsWidth: 1 - sizeAffectsLifetime: 0 - inheritParticleColor: 1 - generateLightingData: 0 - colorOverLifetime: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - widthOverTrail: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - colorOverTrail: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - CustomDataModule: - enabled: 0 - mode0: 0 - vectorComponentCount0: 4 - color0: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - colorLabel0: Color - vector0_0: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_0: X - vector0_1: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_1: Y - vector0_2: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_2: Z - vector0_3: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_3: W - mode1: 0 - vectorComponentCount1: 4 - color1: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - colorLabel1: Color - vector1_0: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_0: X - vector1_1: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_1: Y - vector1_2: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_2: Z - vector1_3: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_3: W ---- !u!198 &198000013621194436 -ParticleSystem: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000013439165456} - serializedVersion: 5 - lengthInSec: 5 - simulationSpeed: 1 - stopAction: 0 - looping: 1 - prewarm: 0 - playOnAwake: 1 - useUnscaledTime: 0 - autoRandomSeed: 0 - useRigidbodyForVelocity: 1 - startDelay: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - moveWithTransform: 0 - moveWithCustomTransform: {fileID: 0} - scalingMode: 1 - randomSeed: 1112701312 - InitialModule: - serializedVersion: 3 - enabled: 1 - startLifetime: - serializedVersion: 2 - minMaxState: 3 - scalar: 3 - minScalar: 0.5 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0.16666667 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startSpeed: - serializedVersion: 2 - minMaxState: 3 - scalar: 2 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0.5 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startColor: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 0.6901961, b: 0.3529412, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - startSize: - serializedVersion: 2 - minMaxState: 3 - scalar: 0.1 - minScalar: 0.05 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0.5 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startSizeY: - serializedVersion: 2 - minMaxState: 3 - scalar: 1 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startSizeZ: - serializedVersion: 2 - minMaxState: 3 - scalar: 1 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 0 - startRotationX: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startRotationY: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startRotation: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - randomizeRotationDirection: 0 - maxNumParticles: 1000 - size3D: 0 - rotation3D: 0 - gravityModifier: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - ShapeModule: - serializedVersion: 5 - enabled: 1 - type: 8 - angle: 32.22 - length: 0.12 - boxThickness: {x: 0, y: 0, z: 0} - radiusThickness: 1 - donutRadius: 0.2 - m_Position: {x: 0, y: 0, z: 0} - m_Rotation: {x: 0, y: 0, z: 0} - m_Scale: {x: 1, y: 1, z: 1} - placementMode: 0 - m_Mesh: {fileID: 0} - m_MeshRenderer: {fileID: 0} - m_SkinnedMeshRenderer: {fileID: 0} - m_MeshMaterialIndex: 0 - m_MeshNormalOffset: 0 - m_UseMeshMaterialIndex: 0 - m_UseMeshColors: 1 - alignToDirection: 0 - randomDirectionAmount: 0 - sphericalDirectionAmount: 0 - randomPositionAmount: 0 - radius: - value: 0.76 - mode: 0 - spread: 0 - speed: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - arc: - value: 360 - mode: 0 - spread: 0 - speed: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - EmissionModule: - enabled: 1 - serializedVersion: 4 - rateOverTime: - serializedVersion: 2 - minMaxState: 0 - scalar: 20 - minScalar: 10 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - rateOverDistance: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_BurstCount: 0 - m_Bursts: [] - SizeModule: - enabled: 0 - curve: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - RotationModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.7853982 - minScalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - ColorModule: - enabled: 1 - gradient: - serializedVersion: 2 - minMaxState: 1 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 0} - key1: {r: 0.91764706, g: 0.39607844, b: 0, a: 1} - key2: {r: 0, g: 0, b: 0, a: 1} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 6168 - atime2: 53199 - atime3: 65535 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 4 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - UVModule: - enabled: 0 - mode: 0 - frameOverTime: - serializedVersion: 2 - minMaxState: 1 - scalar: 0.9999 - minScalar: 0.9999 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - startFrame: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - tilesX: 1 - tilesY: 1 - animationType: 0 - rowIndex: 0 - cycles: 1 - uvChannelMask: -1 - flipU: 0 - flipV: 0 - randomRow: 1 - sprites: - - sprite: {fileID: 0} - VelocityModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.2 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - inWorldSpace: 1 - InheritVelocityModule: - enabled: 0 - m_Mode: 0 - m_Curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - ForceModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - inWorldSpace: 0 - randomizePerFrame: 0 - ExternalForcesModule: - enabled: 0 - multiplier: 1 - ClampVelocityModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - magnitude: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxis: 0 - inWorldSpace: 0 - multiplyDragByParticleSize: 1 - multiplyDragByParticleVelocity: 1 - dampen: 1 - drag: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - NoiseModule: - enabled: 1 - strength: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.5 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - strengthY: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - strengthZ: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - frequency: 0.5 - damping: 1 - octaves: 1 - octaveMultiplier: 0.5 - octaveScale: 2 - quality: 2 - scrollSpeed: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.5 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remap: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapY: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapZ: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: -1 - inSlope: 0 - outSlope: 2 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 2 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - remapEnabled: 0 - positionAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - rotationAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - sizeAmount: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - SizeBySpeedModule: - enabled: 0 - curve: - serializedVersion: 2 - minMaxState: 1 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - z: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - range: {x: 0, y: 1} - separateAxes: 0 - RotationBySpeedModule: - enabled: 0 - x: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - y: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - curve: - serializedVersion: 2 - minMaxState: 0 - scalar: 0.7853982 - minScalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - separateAxes: 0 - range: {x: 0, y: 1} - ColorBySpeedModule: - enabled: 0 - gradient: - serializedVersion: 2 - minMaxState: 1 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - range: {x: 0, y: 1} - CollisionModule: - enabled: 0 - serializedVersion: 3 - type: 0 - collisionMode: 0 - colliderForce: 0 - multiplyColliderForceByParticleSize: 0 - multiplyColliderForceByParticleSpeed: 0 - multiplyColliderForceByCollisionAngle: 1 - plane0: {fileID: 0} - plane1: {fileID: 0} - plane2: {fileID: 0} - plane3: {fileID: 0} - plane4: {fileID: 0} - plane5: {fileID: 0} - m_Dampen: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Bounce: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_EnergyLossOnCollision: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minKillSpeed: 0 - maxKillSpeed: 10000 - radiusScale: 1 - collidesWith: - serializedVersion: 2 - m_Bits: 4294967295 - maxCollisionShapes: 256 - quality: 0 - voxelSize: 0.5 - collisionMessages: 0 - collidesWithDynamic: 1 - interiorCollisions: 1 - TriggerModule: - enabled: 0 - collisionShape0: {fileID: 0} - collisionShape1: {fileID: 0} - collisionShape2: {fileID: 0} - collisionShape3: {fileID: 0} - collisionShape4: {fileID: 0} - collisionShape5: {fileID: 0} - inside: 1 - outside: 0 - enter: 0 - exit: 0 - radiusScale: 1 - SubModule: - serializedVersion: 2 - enabled: 0 - subEmitters: - - serializedVersion: 2 - emitter: {fileID: 0} - type: 0 - properties: 0 - LightsModule: - enabled: 0 - ratio: 0 - light: {fileID: 0} - randomDistribution: 1 - color: 1 - range: 1 - intensity: 1 - rangeCurve: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - intensityCurve: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - maxLights: 20 - TrailModule: - enabled: 0 - ratio: 1 - lifetime: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minVertexDistance: 0.2 - textureMode: 0 - worldSpace: 0 - dieWithParticles: 1 - sizeAffectsWidth: 1 - sizeAffectsLifetime: 0 - inheritParticleColor: 1 - generateLightingData: 0 - colorOverLifetime: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - widthOverTrail: - serializedVersion: 2 - minMaxState: 0 - scalar: 1 - minScalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - colorOverTrail: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - CustomDataModule: - enabled: 0 - mode0: 0 - vectorComponentCount0: 4 - color0: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - colorLabel0: Color - vector0_0: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_0: X - vector0_1: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_1: Y - vector0_2: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_2: Z - vector0_3: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel0_3: W - mode1: 0 - vectorComponentCount1: 4 - color1: - serializedVersion: 2 - minMaxState: 0 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - maxGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - colorLabel1: Color - vector1_0: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_0: X - vector1_1: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_1: Y - vector1_2: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_2: Z - vector1_3: - serializedVersion: 2 - minMaxState: 0 - scalar: 0 - minScalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 2 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - serializedVersion: 2 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - vectorLabel1_3: W ---- !u!199 &199000010346745340 -ParticleSystemRenderer: - serializedVersion: 4 - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000010823978654} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 2100000, guid: d7f098ed9997e714193be5e86df013f4, type: 2} - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_RenderMode: 0 - m_SortMode: 0 - m_MinParticleSize: 0 - m_MaxParticleSize: 0.5 - m_CameraVelocityScale: 0 - m_VelocityScale: 0 - m_LengthScale: 1 - m_SortingFudge: 0 - m_NormalDirection: 1 - m_RenderAlignment: 0 - m_Pivot: {x: 0, y: -0.15, z: 0} - m_UseCustomVertexStreams: 0 - m_VertexStreams: 0001030405 - m_Mesh: {fileID: 0} - m_Mesh1: {fileID: 0} - m_Mesh2: {fileID: 0} - m_Mesh3: {fileID: 0} - m_MaskInteraction: 0 ---- !u!199 &199000010792666018 -ParticleSystemRenderer: - serializedVersion: 4 - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000013439165456} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 2100000, guid: 776677ab3818fb249adaca05f4e04545, type: 2} - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_RenderMode: 1 - m_SortMode: 0 - m_MinParticleSize: 0 - m_MaxParticleSize: 0.5 - m_CameraVelocityScale: 0 - m_VelocityScale: 0.1 - m_LengthScale: 0 - m_SortingFudge: 0 - m_NormalDirection: 1 - m_RenderAlignment: 0 - m_Pivot: {x: 0, y: 0, z: 0} - m_UseCustomVertexStreams: 0 - m_VertexStreams: 0001030405 - m_Mesh: {fileID: 0} - m_Mesh1: {fileID: 0} - m_Mesh2: {fileID: 0} - m_Mesh3: {fileID: 0} - m_MaskInteraction: 0 ---- !u!199 &199000013425100488 -ParticleSystemRenderer: - serializedVersion: 4 - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1000010646992276} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 10301, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_RenderMode: 5 - m_SortMode: 0 - m_MinParticleSize: 0 - m_MaxParticleSize: 0.5 - m_CameraVelocityScale: 0 - m_VelocityScale: 0 - m_LengthScale: 2 - m_SortingFudge: 0 - m_NormalDirection: 1 - m_RenderAlignment: 0 - m_Pivot: {x: 0, y: 0, z: 0} - m_UseCustomVertexStreams: 0 - m_VertexStreams: 0001030405 - m_Mesh: {fileID: 0} - m_Mesh1: {fileID: 0} - m_Mesh2: {fileID: 0} - m_Mesh3: {fileID: 0} - m_MaskInteraction: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab.meta deleted file mode 100644 index b4cf001..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3228a22491941734bb83ad691d17fcb9 -timeCreated: 1473159169 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts.meta deleted file mode 100644 index c1b925b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1261df48d5c0dae4da319464f8d5933b -folderAsset: yes -timeCreated: 1446196284 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset deleted file mode 100644 index b59e03d..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset +++ /dev/null @@ -1,1602 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} - m_Name: LiberationSans SDF - m_EditorClassIdentifier: - hashCode: 231247347 - material: {fileID: 783799688297434243} - materialHashCode: 198912371 - m_Version: 1.1.0 - m_SourceFontFileGUID: d773920d064f540f18ab094416a6864d - m_SourceFontFile_EditorRef: {fileID: 12800000, guid: d773920d064f540f18ab094416a6864d, - type: 3} - m_SourceFontFile: {fileID: 12800000, guid: d773920d064f540f18ab094416a6864d, type: 3} - m_AtlasPopulationMode: 1 - m_FaceInfo: - m_FaceIndex: 0 - m_FamilyName: Liberation Sans - m_StyleName: Regular - m_PointSize: 60 - m_Scale: 1 - m_UnitsPerEM: 2048 - m_LineHeight: 68.99414 - m_AscentLine: 54.316402 - m_CapLine: 41 - m_MeanLine: 32 - m_Baseline: 0 - m_DescentLine: -12.714843 - m_SuperscriptOffset: 54.316402 - m_SuperscriptSize: 0.5 - m_SubscriptOffset: -12.714843 - m_SubscriptSize: 0.5 - m_UnderlineOffset: -8.5546875 - m_UnderlineThickness: 4.3945312 - m_StrikethroughOffset: 12.8 - m_StrikethroughThickness: 4.3945312 - m_TabWidth: 17 - m_GlyphTable: - - m_Index: 3 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 16.671875 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 10 - m_Metrics: - m_Width: 5.390625 - m_Height: 12.984375 - m_HorizontalBearingX: 3.046875 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 11.453125 - m_GlyphRect: - m_X: 10 - m_Y: 96 - m_Width: 6 - m_Height: 14 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 40 - m_Metrics: - m_Width: 32.515625 - m_Height: 41.28125 - m_HorizontalBearingX: 4.921875 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 40.015625 - m_GlyphRect: - m_X: 204 - m_Y: 191 - m_Width: 34 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 41 - m_Metrics: - m_Width: 29.328125 - m_Height: 41.28125 - m_HorizontalBearingX: 4.921875 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 36.65625 - m_GlyphRect: - m_X: 347 - m_Y: 113 - m_Width: 31 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 42 - m_Metrics: - m_Width: 39.171875 - m_Height: 42.484375 - m_HorizontalBearingX: 3.015625 - m_HorizontalBearingY: 41.890625 - m_HorizontalAdvance: 46.671875 - m_GlyphRect: - m_X: 257 - m_Y: 138 - m_Width: 40 - m_Height: 43 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 43 - m_Metrics: - m_Width: 33.515625 - m_Height: 41.28125 - m_HorizontalBearingX: 4.921875 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 43.328125 - m_GlyphRect: - m_X: 445 - m_Y: 74 - m_Width: 35 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 44 - m_Metrics: - m_Width: 5.609375 - m_Height: 41.28125 - m_HorizontalBearingX: 5.53125 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 16.671875 - m_GlyphRect: - m_X: 151 - m_Y: 166 - m_Width: 7 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 48 - m_Metrics: - m_Width: 40.140625 - m_Height: 41.28125 - m_HorizontalBearingX: 4.921875 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 49.984375 - m_GlyphRect: - m_X: 514 - m_Y: 10 - m_Width: 42 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 49 - m_Metrics: - m_Width: 33.515625 - m_Height: 41.28125 - m_HorizontalBearingX: 4.921875 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 43.328125 - m_GlyphRect: - m_X: 569 - m_Y: 71 - m_Width: 35 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 51 - m_Metrics: - m_Width: 31.9375 - m_Height: 41.28125 - m_HorizontalBearingX: 4.921875 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 40.015625 - m_GlyphRect: - m_X: 575 - m_Y: 10 - m_Width: 33 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 54 - m_Metrics: - m_Width: 34.546875 - m_Height: 42.484375 - m_HorizontalBearingX: 2.71875 - m_HorizontalBearingY: 41.890625 - m_HorizontalAdvance: 40.015625 - m_GlyphRect: - m_X: 514 - m_Y: 71 - m_Width: 36 - m_Height: 43 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 55 - m_Metrics: - m_Width: 33.9375 - m_Height: 41.28125 - m_HorizontalBearingX: 1.34375 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 36.65625 - m_GlyphRect: - m_X: 65 - m_Y: 10 - m_Width: 35 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 56 - m_Metrics: - m_Width: 34.078125 - m_Height: 41.875 - m_HorizontalBearingX: 4.625 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 43.328125 - m_GlyphRect: - m_X: 627 - m_Y: 10 - m_Width: 35 - m_Height: 43 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 58 - m_Metrics: - m_Width: 56.15625 - m_Height: 41.28125 - m_HorizontalBearingX: 0.265625 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 56.625 - m_GlyphRect: - m_X: 105 - m_Y: 227 - m_Width: 57 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 60 - m_Metrics: - m_Width: 37.390625 - m_Height: 41.28125 - m_HorizontalBearingX: 1.3125 - m_HorizontalBearingY: 41.28125 - m_HorizontalAdvance: 40.015625 - m_GlyphRect: - m_X: 46 - m_Y: 236 - m_Width: 38 - m_Height: 42 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 66 - m_Metrics: - m_Width: 34.953125 - m_Height: 3.8125 - m_HorizontalBearingX: -0.90625 - m_HorizontalBearingY: -8.109375 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 10 - m_Y: 10 - m_Width: 36 - m_Height: 4 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 68 - m_Metrics: - m_Width: 30.828125 - m_Height: 32.875 - m_HorizontalBearingX: 2.546875 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 416 - m_Y: 10 - m_Width: 32 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 69 - m_Metrics: - m_Width: 26.96875 - m_Height: 44.078125 - m_HorizontalBearingX: 3.875 - m_HorizontalBearingY: 43.484375 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 306 - m_Y: 10 - m_Width: 28 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 70 - m_Metrics: - m_Width: 25.875 - m_Height: 32.875 - m_HorizontalBearingX: 2.546875 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 214 - m_Y: 10 - m_Width: 27 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 71 - m_Metrics: - m_Width: 26.984375 - m_Height: 44.078125 - m_HorizontalBearingX: 2.515625 - m_HorizontalBearingY: 43.484375 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 467 - m_Y: 10 - m_Width: 28 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 72 - m_Metrics: - m_Width: 28.15625 - m_Height: 32.875 - m_HorizontalBearingX: 2.546875 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 119 - m_Y: 10 - m_Width: 29 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 73 - m_Metrics: - m_Width: 15.921875 - m_Height: 43.421875 - m_HorizontalBearingX: 0.84375 - m_HorizontalBearingY: 43.421875 - m_HorizontalAdvance: 16.671875 - m_GlyphRect: - m_X: 262 - m_Y: 73 - m_Width: 17 - m_Height: 44 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 74 - m_Metrics: - m_Width: 26.984375 - m_Height: 44.65625 - m_HorizontalBearingX: 2.515625 - m_HorizontalBearingY: 32.203125 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 398 - m_Y: 63 - m_Width: 28 - m_Height: 46 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 75 - m_Metrics: - m_Width: 25.3125 - m_Height: 43.484375 - m_HorizontalBearingX: 4.15625 - m_HorizontalBearingY: 43.484375 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 10 - m_Y: 33 - m_Width: 26 - m_Height: 44 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 76 - m_Metrics: - m_Width: 5.265625 - m_Height: 43.484375 - m_HorizontalBearingX: 4.015625 - m_HorizontalBearingY: 43.484375 - m_HorizontalAdvance: 13.328125 - m_GlyphRect: - m_X: 55 - m_Y: 71 - m_Width: 6 - m_Height: 44 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 77 - m_Metrics: - m_Width: 10.75 - m_Height: 55.9375 - m_HorizontalBearingX: -1.46875 - m_HorizontalBearingY: 43.484375 - m_HorizontalAdvance: 13.328125 - m_GlyphRect: - m_X: 179 - m_Y: 75 - m_Width: 12 - m_Height: 57 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 78 - m_Metrics: - m_Width: 26.046875 - m_Height: 43.484375 - m_HorizontalBearingX: 4.046875 - m_HorizontalBearingY: 43.484375 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 260 - m_Y: 10 - m_Width: 27 - m_Height: 44 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 79 - m_Metrics: - m_Width: 5.265625 - m_Height: 43.484375 - m_HorizontalBearingX: 4.046875 - m_HorizontalBearingY: 43.484375 - m_HorizontalAdvance: 13.328125 - m_GlyphRect: - m_X: 179 - m_Y: 151 - m_Width: 6 - m_Height: 44 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 80 - m_Metrics: - m_Width: 42.046875 - m_Height: 32.28125 - m_HorizontalBearingX: 3.984375 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 49.984375 - m_GlyphRect: - m_X: 353 - m_Y: 10 - m_Width: 44 - m_Height: 33 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 81 - m_Metrics: - m_Width: 25.484375 - m_Height: 32.28125 - m_HorizontalBearingX: 3.984375 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 10 - m_Y: 134 - m_Width: 27 - m_Height: 33 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 82 - m_Metrics: - m_Width: 28.328125 - m_Height: 32.875 - m_HorizontalBearingX: 2.515625 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 214 - m_Y: 73 - m_Width: 29 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 83 - m_Metrics: - m_Width: 26.96875 - m_Height: 44.703125 - m_HorizontalBearingX: 3.875 - m_HorizontalBearingY: 32.25 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 210 - m_Y: 126 - m_Width: 28 - m_Height: 46 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 84 - m_Metrics: - m_Width: 27.015625 - m_Height: 44.734375 - m_HorizontalBearingX: 2.515625 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 167 - m_Y: 10 - m_Width: 28 - m_Height: 46 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 85 - m_Metrics: - m_Width: 15 - m_Height: 32.28125 - m_HorizontalBearingX: 3.984375 - m_HorizontalBearingY: 32.28125 - m_HorizontalAdvance: 19.984375 - m_GlyphRect: - m_X: 80 - m_Y: 71 - m_Width: 16 - m_Height: 33 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 86 - m_Metrics: - m_Width: 26.15625 - m_Height: 32.796875 - m_HorizontalBearingX: 1.671875 - m_HorizontalBearingY: 32.203125 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 105 - m_Y: 166 - m_Width: 27 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 87 - m_Metrics: - m_Width: 15.328125 - m_Height: 39.265625 - m_HorizontalBearingX: 0.90625 - m_HorizontalBearingY: 38.796875 - m_HorizontalAdvance: 16.671875 - m_GlyphRect: - m_X: 10 - m_Y: 186 - m_Width: 17 - m_Height: 40 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 88 - m_Metrics: - m_Width: 25.5 - m_Height: 32.296875 - m_HorizontalBearingX: 3.890625 - m_HorizontalBearingY: 31.703125 - m_HorizontalAdvance: 33.375 - m_GlyphRect: - m_X: 119 - m_Y: 63 - m_Width: 27 - m_Height: 33 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 89 - m_Metrics: - m_Width: 29.59375 - m_Height: 31.703125 - m_HorizontalBearingX: 0.203125 - m_HorizontalBearingY: 31.703125 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 56 - m_Y: 185 - m_Width: 30 - m_Height: 32 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 90 - m_Metrics: - m_Width: 43.578125 - m_Height: 31.703125 - m_HorizontalBearingX: -0.09375 - m_HorizontalBearingY: 31.703125 - m_HorizontalAdvance: 43.328125 - m_GlyphRect: - m_X: 115 - m_Y: 115 - m_Width: 45 - m_Height: 32 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 91 - m_Metrics: - m_Width: 28.6875 - m_Height: 31.703125 - m_HorizontalBearingX: 0.671875 - m_HorizontalBearingY: 31.703125 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 56 - m_Y: 134 - m_Width: 30 - m_Height: 32 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 92 - m_Metrics: - m_Width: 29.75 - m_Height: 44.15625 - m_HorizontalBearingX: 0.140625 - m_HorizontalBearingY: 31.703125 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 298 - m_Y: 74 - m_Width: 30 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 93 - m_Metrics: - m_Width: 24.578125 - m_Height: 31.703125 - m_HorizontalBearingX: 2.4375 - m_HorizontalBearingY: 31.703125 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 353 - m_Y: 62 - m_Width: 26 - m_Height: 32 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - m_CharacterTable: - - m_ElementType: 1 - m_Unicode: 32 - m_GlyphIndex: 3 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 39 - m_GlyphIndex: 10 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 69 - m_GlyphIndex: 40 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 70 - m_GlyphIndex: 41 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 71 - m_GlyphIndex: 42 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 72 - m_GlyphIndex: 43 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 73 - m_GlyphIndex: 44 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 77 - m_GlyphIndex: 48 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 78 - m_GlyphIndex: 49 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 80 - m_GlyphIndex: 51 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 83 - m_GlyphIndex: 54 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 84 - m_GlyphIndex: 55 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 85 - m_GlyphIndex: 56 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 87 - m_GlyphIndex: 58 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 89 - m_GlyphIndex: 60 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 95 - m_GlyphIndex: 66 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 97 - m_GlyphIndex: 68 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 98 - m_GlyphIndex: 69 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 99 - m_GlyphIndex: 70 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 100 - m_GlyphIndex: 71 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 101 - m_GlyphIndex: 72 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 102 - m_GlyphIndex: 73 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 103 - m_GlyphIndex: 74 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 104 - m_GlyphIndex: 75 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 105 - m_GlyphIndex: 76 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 106 - m_GlyphIndex: 77 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 107 - m_GlyphIndex: 78 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 108 - m_GlyphIndex: 79 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 109 - m_GlyphIndex: 80 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 110 - m_GlyphIndex: 81 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 111 - m_GlyphIndex: 82 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 112 - m_GlyphIndex: 83 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 113 - m_GlyphIndex: 84 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 114 - m_GlyphIndex: 85 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 115 - m_GlyphIndex: 86 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 116 - m_GlyphIndex: 87 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 117 - m_GlyphIndex: 88 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 118 - m_GlyphIndex: 89 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 119 - m_GlyphIndex: 90 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 120 - m_GlyphIndex: 91 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 121 - m_GlyphIndex: 92 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 122 - m_GlyphIndex: 93 - m_Scale: 1 - m_AtlasTextures: - - {fileID: 704257233308556572} - m_AtlasTextureIndex: 0 - m_IsMultiAtlasTexturesEnabled: 0 - m_ClearDynamicDataOnBuild: 0 - m_UsedGlyphRects: - - m_X: 0 - m_Y: 0 - m_Width: 55 - m_Height: 23 - - m_X: 55 - m_Y: 0 - m_Width: 54 - m_Height: 61 - - m_X: 0 - m_Y: 23 - m_Width: 45 - m_Height: 63 - - m_X: 109 - m_Y: 0 - m_Width: 48 - m_Height: 53 - - m_X: 157 - m_Y: 0 - m_Width: 47 - m_Height: 65 - - m_X: 109 - m_Y: 53 - m_Width: 46 - m_Height: 52 - - m_X: 45 - m_Y: 61 - m_Width: 25 - m_Height: 63 - - m_X: 204 - m_Y: 0 - m_Width: 46 - m_Height: 53 - - m_X: 250 - m_Y: 0 - m_Width: 46 - m_Height: 63 - - m_X: 296 - m_Y: 0 - m_Width: 47 - m_Height: 64 - - m_X: 70 - m_Y: 61 - m_Width: 35 - m_Height: 52 - - m_X: 204 - m_Y: 63 - m_Width: 48 - m_Height: 53 - - m_X: 105 - m_Y: 105 - m_Width: 64 - m_Height: 51 - - m_X: 0 - m_Y: 124 - m_Width: 46 - m_Height: 52 - - m_X: 252 - m_Y: 63 - m_Width: 36 - m_Height: 63 - - m_X: 46 - m_Y: 124 - m_Width: 49 - m_Height: 51 - - m_X: 169 - m_Y: 65 - m_Width: 31 - m_Height: 76 - - m_X: 343 - m_Y: 0 - m_Width: 63 - m_Height: 52 - - m_X: 200 - m_Y: 116 - m_Width: 47 - m_Height: 65 - - m_X: 95 - m_Y: 156 - m_Width: 46 - m_Height: 53 - - m_X: 46 - m_Y: 175 - m_Width: 49 - m_Height: 51 - - m_X: 0 - m_Y: 176 - m_Width: 36 - m_Height: 59 - - m_X: 169 - m_Y: 141 - m_Width: 25 - m_Height: 63 - - m_X: 406 - m_Y: 0 - m_Width: 51 - m_Height: 53 - - m_X: 343 - m_Y: 52 - m_Width: 45 - m_Height: 51 - - m_X: 288 - m_Y: 64 - m_Width: 49 - m_Height: 64 - - m_X: 457 - m_Y: 0 - m_Width: 47 - m_Height: 64 - - m_X: 388 - m_Y: 53 - m_Width: 47 - m_Height: 65 - - m_X: 504 - m_Y: 0 - m_Width: 61 - m_Height: 61 - - m_X: 565 - m_Y: 0 - m_Width: 52 - m_Height: 61 - - m_X: 141 - m_Y: 156 - m_Width: 26 - m_Height: 61 - - m_X: 337 - m_Y: 103 - m_Width: 50 - m_Height: 61 - - m_X: 247 - m_Y: 128 - m_Width: 59 - m_Height: 62 - - m_X: 617 - m_Y: 0 - m_Width: 54 - m_Height: 62 - - m_X: 194 - m_Y: 181 - m_Width: 53 - m_Height: 61 - - m_X: 95 - m_Y: 217 - m_Width: 76 - m_Height: 61 - - m_X: 36 - m_Y: 226 - m_Width: 57 - m_Height: 61 - - m_X: 504 - m_Y: 61 - m_Width: 55 - m_Height: 62 - - m_X: 559 - m_Y: 61 - m_Width: 54 - m_Height: 61 - - m_X: 435 - m_Y: 64 - m_Width: 54 - m_Height: 61 - - m_X: 0 - m_Y: 86 - m_Width: 25 - m_Height: 33 - m_FreeGlyphRects: - - m_X: 45 - m_Y: 23 - m_Width: 10 - m_Height: 38 - - m_X: 204 - m_Y: 53 - m_Width: 46 - m_Height: 10 - - m_X: 155 - m_Y: 53 - m_Width: 2 - m_Height: 52 - - m_X: 105 - m_Y: 61 - m_Width: 4 - m_Height: 44 - - m_X: 70 - m_Y: 113 - m_Width: 35 - m_Height: 11 - - m_X: 155 - m_Y: 65 - m_Width: 14 - m_Height: 40 - - m_X: 200 - m_Y: 65 - m_Width: 4 - m_Height: 51 - - m_X: 95 - m_Y: 113 - m_Width: 10 - m_Height: 43 - - m_X: 288 - m_Y: 63 - m_Width: 8 - m_Height: 1 - - m_X: 388 - m_Y: 52 - m_Width: 18 - m_Height: 1 - - m_X: 337 - m_Y: 64 - m_Width: 6 - m_Height: 39 - - m_X: 387 - m_Y: 103 - m_Width: 1 - m_Height: 920 - - m_X: 247 - m_Y: 116 - m_Width: 5 - m_Height: 12 - - m_X: 247 - m_Y: 126 - m_Width: 41 - m_Height: 2 - - m_X: 306 - m_Y: 164 - m_Width: 717 - m_Height: 859 - - m_X: 306 - m_Y: 128 - m_Width: 31 - m_Height: 895 - - m_X: 671 - m_Y: 0 - m_Width: 352 - m_Height: 1023 - - m_X: 194 - m_Y: 141 - m_Width: 6 - m_Height: 40 - - m_X: 247 - m_Y: 190 - m_Width: 776 - m_Height: 833 - - m_X: 95 - m_Y: 209 - m_Width: 46 - m_Height: 8 - - m_X: 167 - m_Y: 156 - m_Width: 2 - m_Height: 61 - - m_X: 171 - m_Y: 242 - m_Width: 852 - m_Height: 781 - - m_X: 167 - m_Y: 204 - m_Width: 27 - m_Height: 13 - - m_X: 171 - m_Y: 204 - m_Width: 23 - m_Height: 819 - - m_X: 36 - m_Y: 176 - m_Width: 10 - m_Height: 50 - - m_X: 0 - m_Y: 287 - m_Width: 1023 - m_Height: 736 - - m_X: 93 - m_Y: 278 - m_Width: 930 - m_Height: 745 - - m_X: 0 - m_Y: 235 - m_Width: 36 - m_Height: 788 - - m_X: 93 - m_Y: 226 - m_Width: 2 - m_Height: 797 - - m_X: 559 - m_Y: 122 - m_Width: 464 - m_Height: 901 - - m_X: 613 - m_Y: 62 - m_Width: 410 - m_Height: 961 - - m_X: 613 - m_Y: 61 - m_Width: 4 - m_Height: 962 - - m_X: 435 - m_Y: 53 - m_Width: 22 - m_Height: 11 - - m_X: 489 - m_Y: 64 - m_Width: 15 - m_Height: 959 - - m_X: 387 - m_Y: 125 - m_Width: 636 - m_Height: 898 - - m_X: 489 - m_Y: 123 - m_Width: 534 - m_Height: 900 - - m_X: 387 - m_Y: 118 - m_Width: 48 - m_Height: 905 - - m_X: 0 - m_Y: 119 - m_Width: 45 - m_Height: 5 - - m_X: 25 - m_Y: 86 - m_Width: 20 - m_Height: 38 - m_fontInfo: - Name: - PointSize: 0 - Scale: 0 - CharacterCount: 0 - LineHeight: 0 - Baseline: 0 - Ascender: 0 - CapHeight: 0 - Descender: 0 - CenterLine: 0 - SuperscriptOffset: 0 - SubscriptOffset: 0 - SubSize: 0 - Underline: 0 - UnderlineThickness: 0 - strikethrough: 0 - strikethroughThickness: 0 - TabWidth: 0 - Padding: 0 - AtlasWidth: 0 - AtlasHeight: 0 - atlas: {fileID: 0} - m_AtlasWidth: 1024 - m_AtlasHeight: 1024 - m_AtlasPadding: 9 - m_AtlasRenderMode: 4165 - m_glyphInfoList: [] - m_KerningTable: - kerningPairs: [] - m_FontFeatureTable: - m_GlyphPairAdjustmentRecords: - - m_FirstAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.078125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.078125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.65625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 68 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.65625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 70 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.65625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 72 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -2.234375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 76 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.65625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 82 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -2.234375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 85 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.65625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 86 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -2.234375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 88 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.3125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 90 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.3125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 73 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.078125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 73 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - fallbackFontAssets: [] - m_FallbackFontAssetTable: [] - m_CreationSettings: - sourceFontFileName: - sourceFontFileGUID: d773920d064f540f18ab094416a6864d - pointSizeSamplingMode: 0 - pointSize: 60 - padding: 9 - packingMode: 0 - atlasWidth: 1024 - atlasHeight: 1024 - characterSetSelectionMode: 7 - characterSequence: - referencedFontAssetGUID: - referencedTextAssetGUID: - fontStyle: 0 - fontStyleModifier: 0 - renderMode: 4165 - includeFontFeatures: 0 - m_FontWeightTable: - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - fontWeights: [] - normalStyle: 0 - normalSpacingOffset: 0 - boldStyle: 0.75 - boldSpacing: 7 - italicStyle: 35 - tabSize: 10 ---- !u!28 &704257233308556572 -Texture2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: LiberationSans Atlas - m_ImageContentsHash: - serializedVersion: 2 - Hash: 00000000000000000000000000000000 - m_ForcedFallbackFormat: 4 - m_DownscaleFallback: 0 - m_IsAlphaChannelOptional: 0 - serializedVersion: 2 - m_Width: 1024 - m_Height: 1024 - m_CompleteImageSize: 1048576 - m_MipsStripped: 0 - m_TextureFormat: 1 - m_MipCount: 1 - m_IsReadable: 1 - m_IsPreProcessed: 0 - m_IgnoreMipmapLimit: 0 - m_MipmapLimitGroupName: - m_StreamingMipmaps: 0 - m_StreamingMipmapsPriority: 0 - m_VTOnly: 0 - m_AlphaIsTransparency: 0 - m_ImageCount: 1 - m_TextureDimension: 2 - m_TextureSettings: - serializedVersion: 2 - m_FilterMode: 1 - m_Aniso: 1 - m_MipBias: 0 - m_WrapU: 0 - m_WrapV: 0 - m_WrapW: 0 - m_LightmapFormat: 0 - m_ColorSpace: 0 - m_PlatformBlob: - image data: 1048576 - _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e10111212121212121212121212121212121212121212121212121212121212121212121207060401000000000000000000000000000000000000000000000000000002060a0c0c13131313130807050200000000000000000000000000000000000000000000000000000000000000000000000000010507080a0c0d0e0e0d0c0a08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c080806020000000000000000000000000000000000000000000000030607090b0d0e0e0d0c09070604000000000000000000000000000000000000000002080d101213131313130a0a080400000000000002060a0c0c13131313130f0605030000000000000000000000000000000000000606060606060000020608080b0d0e0e0d0b09060503000000000000000000000000000000000000000000060b0e1011131313130c0b0905010000000002070a0c0d13131313100f0d090500000000000306080913131313131306040000000000000000000000000000000000000000020507080b0d0d0e0d0c09070604000000000002050708090a09080706030000000000000000000000000000000000000000000000010507070b0c0d0e0d0c0907060400000101060606060000000000000000000000000000000000010507071313131312110f0c0701000000000205070813131313090907030000000004090e1112131313131307070401000000000000000000000000000105070713131313130d0c0a07020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0c0d0d0e0d0d0b0907070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b11171b1d1e1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1413100d07010000000000000000000000000000000000000000000000070d1216181920202020201414110e080200000000000000000000000000000000000000000000000000000000000000000104080d11141417191a1b1a1a19171514120e090501000000000000000000000000000000000000000000000000000000000000000000000000000000060d12161819191919191514120e090300000000000000000000000000000000000000060c10121316181a1a1a1a18161312100c070000000000000000000000000000000000060d14191c1f1f20202020171614100b05000000070d1216181920202020201c13120f0b060000000000000000000000000105070813131313131306090e121415181a1a1b1a181513120f0b060000000000000000000000000000000000040b12171b1d1e20202020181815110c060000070d1316191a202020201c1c1915100a0200040a0f13151620202020202013100c070100000000000000000000000000000002080e11141417191a1a1a18161312100c070002080e111414161716151312100b060000000000000000000000000000000000000002080d11131417191a1a1a18161312100c070d0e131313130c0c0906010000000000000000000002080d111314202020201f1e1b18130c050002080e111414202020201615130f0a0400080f151a1d1f20202020201413110d080100000000000000000002080d11131420202020201a1917130e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205080d11131416181a1a1b1a1918161413110d0805020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161d22272a2b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c20201d18120c040000000000000000000000000000000000000000010a12181e2225262d2d2d2d2d21201e19140d05000000000000000000000000000000000000000000000000000000000001070d1114191e2021242627272727262421201e1a14110d08020000000000000000000000000000000000000000000000000000000000000000000000010911181e2224252626262622211e1a150e0600000000000000000000000000000003090e11171c1f202225262727262523201f1c18120f0a04000000000000000000000000000810181f25292b2c2d2d2d2d2423201c171008010a11181e2225262d2d2d2d2d29201f1b17110a02000000000000000002080d11141420202020202013151a1e212225262727272522201f1b17110c070000000000000000000000000000050e161d23272a2b2d2d2d2d2524221d1811090a12191e2325262d2d2d2d292825211b140c060e151b1f21222d2d2d2d2d2d1f1c18120b03000000000000000000000000050b1014191e202124262727272523201f1c18120e0f14191e202123232322201f1c17110a02000000000000000000000000000000050b1013191d202124262727272523201f1c18121a1b20202020191816120d070000000000000000050c13191d20212d2d2d2d2b2b28241e170f050d14191e20212c2d2d2d23221f1b160f07121920262a2c2c2d2d2d2d2d201d19130c0400000000000000050c13191d20212d2d2d2d2d2626231f19120a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214191d202123252627272726252321201d1914120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720272e333637383838383838383838383838383838383838383838383838383838383838383838382d2c29241d160d04000000000000000000000000000000000000000a131c232a2f323339393939392e2d2a251e170e05000000000000000000000000000000000000000000000000000000040c13181d20252a2d2e30323434343332302e2d2a25201e19130c060000000000000000000000000000000000000000000000000000000000000000000009131b23292e3132323232322f2e2b261f180f0600000000000000000000000001070c151a1c23282c2d2f3233343433322f2d2c28231c1b150c07010000000000000000000006101a222a303538393939393931302d28221a110a131c232a2e32333939393939362d2b27221b140b02000000000000050d14191e20212d2d2d2d2d2d1f1f262b2e2f3133343433322f2d2b27221b18120b030000000000000000000000040e1720282e3336373939393932312e29231b12131c242a2f3233393939393635322c261e16101820262b2e2f3939393939392c29231d150d0300000000000000000000060b161c1f252a2d2e313334343332302d2c28231c1a1b1e252a2d2e3030302f2d2b28231c140c0800000000000000000000000001080d161c1e252a2d2e313233343332302d2c28231c27282d2d2d2d2625221e18110a010000000000050e161e252a2d2e393939393837342f2921180e171f252a2d2e39393939302f2c272119101b242b3136383939393939392c29241e160d040000000000050e161e252a2d2e393939393933322f2a241c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000003090e141a1e21252a2d2e3032333434343332302e2d2924211e1a140e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393f4344454545454545454545454545454545454545454545454545454545454545454545453a39352f281f160c01000000000000000000000000000000000007121c252e353a3e3f46464646463b3936302920170d0200000000000000000000000000000000000000000000000000060d161d24292c3036393b3d3f404141403f3d3b3a36302d2a251e17110a030000000000000000000000000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3b3a37312a21180e0300000000000000000000030b12181f262b2e34383a3c3e404141403f3c3a38342e2b262018120b030000000000000000020d18222c343b414446464646463d3c39332c231a101c252e353a3e3f4646464646423937332d261d140a0000000000050e171e252a2d2e3939393939392c2c31373a3b3e404141403e3c3937332d28231d150c06000000000000000000000b16202932393f4344464646463f3d3a342d241b1c252e353b3f404646464643413d3830281e18222a32373b3c46464646464638342f271f150b0100000000000000020a111721272c3036393b3e404041403f3c3a38342e2b26272b3036393b3c3d3c3b3a38342e261e1a120800000000000000000000040c131921282c3036393a3e3f4041403f3c3a38342e3033343939393932312e2a231c130a00000000020c16202830363946464646464544403a332b211720293036393b464646463c3b38322b2319242d353d424546464646464639352f2820160c01000000020c162028303639464646464646403f3b352e261c12070000000000000000000000000000000000000000000000000000000000000000000000000000060b151a1f262b2d3036393a3d3f40404140403e3c3a3935302d2a251f1a150b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d27323b444a4f51525252525252525252525252525252525252525252525252525252525252525252524745403931281d120700000000000000000000000000000000020d18232e373f464b4c53535353535346413b32291e14080000000000000000000000000000000000000000000000030a11171f282f35393b4146474a4c4d4e4d4d4c4a4846423b39363028231c150c040000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a1f1509000000000000000000050d151d23293137383f4446494b4d4d4d4d4b4946444039373129241d150d040000000000000008141f2a343e464d5152535353534a49443e362c2219222e373f464b4c53535353534f46443f382f261b1106000000020d1720293036393b46464646464638383c4247484b4d4d4e4d4b4846443f38342e271e180f06000000000000000006121d28323b444b4f51535353534b4a453f372d23242e3740474b4d535353534f4e49423a3026202a343c43474953535353535345403931271d1207000000000000020b141b222733383b4146474a4c4d4d4d4b4946444039373132373b414647494a494846443f38302c241a10050000000000000000040d161e242933383a4146474a4c4d4d4d4b49464440393c4041464646463f3e3a352d251c110700000008131e28323a4146535353535352504c453d33291f29323b414647535353534948433d352b212b353f474e5253535353535345413a32281e130800000008131e28323a41465353535353534d4b4740382e24190e020000000000000000000000000000000000000000000000000000000000000000000000020a111720262b31373a3b414647494b4d4d4e4d4c4b494746413b3a36312b261f17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222e39444d555b5e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f53514b43392f24180d0100000000000000000000000000000006121e2a353f4951575960606060605f524c443b3025190e02000000000000000000000000000000000000000000030c151c2328313a4045474c525457595a5a5a5a595754524d4746413a342e261e160d040000000000000000000000000000000000000000000000000000000006121e29343f495156585959595955534d453c31261a0e0200000000000000050e161f272f343c42474a50535558595a5a59585653514a47433c352f271f160e040000000000000d1925303b4650585d5f60606060575550483e3328202b343f4951575960606060605c53504941382d22170b00000008141e29323b4146535353535353534544464e535558595a5a5a5855535049454039302a21180f06000000000000000b17232e39444d565b5e60606060585651493f34292a354049525759606060605c5a544c42382c26323c464e535560606060605f514b43392f23180c0000000000000a141d262d333d44484d525457595a5a5a585653514a47423c3d43474c52545656565553504a423e362c22170b00000000000000030d161f282f353e44484c525457595a5a5a585653514a46484c4e535353534c4a463f372d23180d0100010d1925303a444c525f606060605e5c574f453a2f25303b444d52545f60606056544f473d3227313d4751595e5f606060605f524c443a2f24190d0100010d1925303a444c525f60606060605957524a40352a1f130700000000000000000000000000000000000000000000000000000000000000000000030b141b222731373c4246484c52545658595a5a5a59585654524c4846423b373128221c140b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b27333f4a555f676a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b605d554b4035291d10040000000000000000000000000000000a16222f3a46515b63666c6c6c6c6c6c5e564c41362a1e11050000000000000000000000000000000000000000020b151e262e343e434b5153565e616365676767666563615e5754524c443f38302820160d030000000000000000000000000000000000000000000000000000000916222e3a46515b626565656565625f574d42372b1e1206000000000000030d162028313940454d53545c606265666767666562605c54534e454039312820160d040000000000101c2935414d5862696c6c6c6c6c64615a5044392d28323d46515b63666c6c6c6c6c69605b53493f33271b0f0300010d1925303b444c525f60606060605f515153575f6264666767666562605b53514b423c332a21180d030000000000020e1b27333f4b565f676a6c6c6c6c65625b51453a2e2f3b47525b63666c6c6c6c69665e54493d322b37434e585f626c6c6c6c6c6c5c554b4034291c10040000000006111b262f383f444f54565e6164666767666563605c54534d44464e54565e6163636362605c5450483e33281c10040000000000010b151f28313a41454f55565e6164656667666563605c545253585b60606060595751493f352a1e12060005111d2a36414c565e6c6c6c6c6c6b6861574c40342a36414d565e616c6c6c6c6360594f43382c36424e59636a6c6c6c6c6c6c5d564c4135291d11040005111d2a36414c565e6c6c6c6c6c6c66635c52473b2f23170a000000000000000000000000000000000000000000000000000000000000000000030c151d262d333c42474d5355565e61636566676767666563615d5654534d47423c332d261d160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a36434f5b677177787878787878787878787878787878787878787878787878787878787878787878786d675d5145392c2013060000000000000000000000000000000c1825323e4b57636d72797979797976685e5246392d20140700000000000000000000000000000000000000000a141d2630383f4450555d6065686e70727374747372706e6966615e56504a423a32281f150b0100000000000000000000000000000000000000000000000000000b1824313e4a56626d72727272726e695f53473a2e2114080000000000010b151f28323a434b51575f62666d6f7173747473726f6d66625f58514b433a32281f160c0100000000121f2b3844515d69747979797979706c6155493c30303a444e58636d727979797979756c655b5044372b1f12050005111e2a36414c565e6c6c6c6c6c6c6c5c5c60656a6e7173747473716f6c65605c544d453c332a1f150b010000000004101d2a36434f5b67717779797979726d62564a3d31323f4b57636d73797979797670665a4e41352e3b47535f6a76797979797976675c5145382c1f1306000000000b17222d38414950596063686e7173737473726f6d66625f57504e586062686e6f706f6e6d66615a5044392d201408000000000007121d27313a434c52596163686d7172737473726f6d66615e5c64676c6c6c6c65635b51463a2e221609000713202d3946525e6876797979797873685c5044372d3946525e6875797979796f6b605448392f3845525e6a75797979797976685d5245392c201307000713202d3946525e68767979797979736e63574b3f3226190c0000000000000000000000000000000000000000000000000000000000000000030c151e272f383f444e53575f6166686d70727373747373716f6d6866615e57534d443f382f281f160d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a778385858585858585858585858585858585858585858585858585858585858585858585796d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f86868686867a6e6154473b2e2114080000000000000000000000000000000000000006111b262f38424a505a62676d72777a7d7f808180807f7d7b77736d68605c544c443a31271d120700000000000000000000000000000000000000000000000000000c1925323f4c5865727f7f7f7f7f7b6e6255483b2f221508000000000007121d27313a444c555c60696e74797c7e808080807e7c79746f6a605d554c443a31281d130700000000131f2c3946525f6c7986868686867d7064574a3d3135414c56606a727f868686868682796c605346392d201306000714202d3946525e687679797979797666666d72777b7e808081807e7c78726d665f574d453c31271d12070000000004111e2b3744515e6a7784868686867f7265584b3f3233404d59667380868686868276695c4f43362f3c4955626f7c8686868686796d6053473a2d201407000000030f1b27333f49535b606b70767a7e7f8080807e7c79746e69605b58606a6f767a7c7d7c7b79706c6155493c3023160a00000000000c18232f39434c565d606b70767a7d7f8080807e7c79746e69646e7479797979726d63574a3e3125180c000714212e3a4754616d7a8686868685786b5e5245382e3b4754616e7a878686867d6f63554b40353946535f6c7987868686867a6d6054473a2d211407000714212e3a4754616d7a8686868686807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000a151e273039414950575f62696e73777a7c7e808081807f7e7c7a77736e69625f57504a423a31281f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b788591929292929292929292929292929292929292929292929292929292929292929286796d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f8c939393877a6e6154473b2e211408000000000000000000000000000000000000000b17222d38414a545c606c71797f83878a8c8d8d8d8d8c8a8784807a736d665d564c43392f24180c0400000000000000000000000000000000000000000000000006131f2c3946525f6c79868c8c8c8a7d7164574a3e3124170b00000000000c18232f39434c565e676d747b8185888b8c8d8d8c8b8985817c746d675e564c433a2f24180d04000000131f2c3946525f6c79859293938a7d7064574a3d343c45525d686f7c8792939991847a6d655b5044372b1f1205000814212e3b4754616e7a8686868686796d6e787f84888b8c8d8d8d8b88847f796e695f574d43392f23180c0200000004111e2b3744515e6a77849193938b7e7265584b3f3233404d596673808c93938f8276695c4f43362f3c4955626f7c88939393867a6d6053473a2d20140700000005121f2b3744505b656c737d83878a8c8d8d8d8b8985817b736c665f6a6f7c838789898988867e7064574a3d3124170a0000000004101c2934404b555d686d757d83868a8c8d8d8d8b8985817b716c7480868686867f7265594c3f3226190c000714212e3a4754616d7a8793939185786b5e52453838434f5966727f8c99938e8174675d5145393946535f6c7986929393877a6d6054473a2d211407000714212e3a4754616d7a879393938c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000006111c263039434b535b606a6e757b808487898b8c8d8d8d8c8b898683807b756e69605b544b433a31271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b7885919191919191919191919191919191919191919191919191919191919191919191867a6d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f8c999f94877a6e6154473b2e211408000000000000000000000000000000000000030f1b27333f49535c666d747e858b9095969899989899989695918c8680786d685d554b40352920150a00000000000000000000000000000000000000000000000106131f2c3946525f6c79859298978a7d7164574a3e3124170b0000000004101c2934404b555e686d7980878d929798999a9a999898928e8780796d685e554b40352920150a000000131f2c3946525f6c7985929f978a7d7064574a3d3c46515b606d7a8491999f92877d6f685e53493f33271b0f03000714202d3a4753606d7a869a9393877a6e7b838b919697979799999896918b837b6e695f554b4034291e130800000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c88959f93867a6d6053473a2d201407000006131f2b37434e58606c7780898f9497999a98989898928e867f786d666f7c869095969696988b7e7164584b3e3125180b000000040e18222c3845515c676d7a818a8f929998999a999898928d857e7175828f93938b7e7265584b3f3225180c000714212e3a4754616d7a87949e9185786b5e5245383b4854606b7784919d9f92857a6d6053473b3146535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a87949f998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000c17232e38424b555c656c737b82878d90959698999a9a9a99989993908c87827b736c665d554b43392f23180c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a778385858585858585858585858585858585858585858585858585858585858585858584796d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000000020d17202b3744505b656d78818b92979d98928f8c8b8b8c8e91969d98928c837a6d675d51453c32261b0f0300000000000000000000000000000000020507080b0d0e0e131f2c3946525f6c7985929f978a7d7164574a3e3124170b000000020d17202c3845515c676d7a838d93999e98928f8e8e8f92979e9a938d837a6d675d51453c32261b0f000000131f2c3946525f6c7985929f978a7d7064574a3d434e58626d75818f969e948c7f726b60564c41382d22170b000006131f2c3845515c677986939f95887b7b849095918d8b8a8b8c90959e9e9590857b6e675c51453a3024190d01000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d20140700000815212e3b47535f6a737f8c929c9e97928e8b8b8c8d9196928c81786d76828f989f97928c898a7e7164584b3e3125180b0000000a15202c38444f59606d79828e939c9f99928f8d8c8d8f929792877e76838f9c978b7e7164584b3e3125180b000714212e3a4754616d7a87949e9185786b5e524535404b55636f7c8996a0a2988b7e7164574d423646535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000003101c28343f4a545c676d777f878f939a9d9c9995949892989496999d9d99938f8780786d675d554b4034291e150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2936424f5b677177787878787878787878787878787878787878787878787878787878787878787878786d675d5145392c1f13060000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000008141e2b37424d57606c77818e939e98928c8682807e7e7f81848990959f959083796d60584e43372b1f1306000000000000000000000000000003090e12141518191a1b1a1f2c3946525f6c7985929f978a7d7164574a3e3124170b00000008141f2b37434e58606d798390959f98928b8682818182858a91969f959083796d60584e43372b1d12070000131f2c3946525f6c7985929f978a7d7064574a414b555f6a727f8b939e968f82776c60594f443a2f261b1106000004101c2934404b5f6c7986929f96897d8390918a84807f7d7e7f83899196a0979183796d60564c4135291d1104000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d2014070004101c2834404b55626f7c87939f9e938e85817f7e7f8184898f938d80747a87939f9f92857f7d7e7c6e6255483b2f2215080000030f1b26313c4855616b75818e949e9c938e878381808082858a9292867b83909d978a7e7164574b3e3124180b000714212e3a4754616d7a87949e9185786b5e52453945515d6774818e9b9f9d9c8f8376695f53463846535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000040e19222c3844505c666d79818c92999f9c948f8c898786868687898c90959d9f99928c82796d675c51453e30261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26333e4a555f676a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b605d554b4035291d10040000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e21140800000000000000000000000000000000020e1925303a47535f69727f8c939e9792867f79757372727274787d838e939d958d80746a5f53473b2e211508000000000000000000000000050c11141a1e21212426272727252c3946525f6c7985929f978a7d7164574a3e3124170b0000020e1925303b4754606a73808d959f9691857e7a76747475797d8490959f958d80746a5f5447392e23180c0000131f2c3946525f6c7985929f978a7d7064574a45515d676f7c86929f9991847a6d655b50473d32281d140a000000000c18232f46525f6c7985929f9b8f828f91847d777472717173777d849197a0958c8073685d5245392c201308000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d2014070006131f2c3845515c6775818e99a0958e817a7472717274777c828c928a7e7d8a9aa2978a7d7270716e6a5f53473a2e211408000006121f2b37434e5863707d8a939e9c928c817a7674737475797e85918f8283909d978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e52453a4753606d7a85929992919593877b6e6153493f46535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000a15202b37434e58606d78818f939f9d948f89837f7c7a79797a7a7c80838990959d9f948f82796d605a5042382e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222e39434d555b5d5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e53514b43392f24180c000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000005111e2a36414c56616e7b86929f9f92857c736d6766656566686b7079818e949e93877c6f6255493c2f2216090000000000000000000002080d171c1f252a2d2e313334343332303946525f6c7985929f978a7d7164574a3e3124170b000005111e2a36414d56626f7c87929f9991847b726d676867666d717a8390989f93877c6f62544b4034281c100400131f2c3946525f6c7985929f978a7d7064574a505a606d798491999f92877d6f685e53493f352b20160b0200000000071f2c3946525f6c7985929f9e938f91847b706c67656464666b707b85929f9f92857a6d6054473a2f24190d010004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000713202d3a4653606d7986929f9d9083786d67656565676a6f777f8792857f8c999f9285786c6364625f584e43372b1f120600000815212e3a47535f6a7683909d9f948c80756e68676667666d717a83918f87929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5245424e5765717e8b98928784919a8c8073655b504446535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d05050505040300000000000000000000000000000000000000000000030f1b27323b4754606a73808d939e9d928d827c76726f6d6d676d6e7073777d838d929c9f948e81746c61544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27313b434a4f50525252525252525252525252525252525252525252525252525252525252525252524745403931271d1207000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000714202d3946525e6875818e999e93897d706a605d555858595960666d78828f918d8a8175685b4e4235281b0f020000000000000000040c131922282d31363a3b3e404141403f3d3a46525f6c7985929f978a7d7164574a3e3124170b00000714202d3946525e6875828f999f92877c6f69605d55545c60686e7b86929f9a8e8174665c5145382c1f130600131f2c3946525f6c7985929f978a7d7064574e58626c75818e969e948c7f726b60564c41382d23190e050000000006131f2c3946525f6c7985929fa69f93877c6f69615a585758596069717e8b96a1988b7f7265564c4135291d11040004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d20140700091623303c4956636f7c8998a3978a7e71665d5558595860656c727e8a9286929f9c908376655b5755534e463c31261a0f0200000915222f3c4855626f7c88959f9c9082776c615e5659545c60686e7b86929299a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e524547535f6a7683909c9083808d9a9184786c60534646535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a121212121111100d0a070704010000000000000000000000000000000006131f2b37434e58626f7c87929f9d938d80786f6a666261605c606163666b7078808d929c9d938a7d70665c5044382c1f130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151f2931393e4244454545454545454545454545454545454545454545454545454545454545454545453a39352f271f150b01000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000814212e3b4754616e7a86929f9b8e81756b6058514b4b4b4c4f545c666e7b8784817d796d6053473a2d2014070000000000000000040e161e242933393b4246484b4c4d4e4d4c494645525f6c7985929f978a7d7164574a3e3124170b00000814212e3b4754616e7b86929f9a8e81746a5f57514b4a50565e6973808d999b9286796d6053463a2d20130700131f2c3946525f6c7985929f978a7d706457555f6a717e8b939e968f82776c60594f443a2f261b1007000000000006131f2c3946525f6c7985929faa9b8e82756a6056504c4a4b4f57606d7984919e9c908376685d5245392c2013060004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000b1824313e4b5764717e8a97a399877a6d61544c4b4c4e535b606c73808d9299a39c8f82756953494847433c332a2015090000030f1c28333f4a5466737f8c99a1978a7d70655b524c4d4b51565f6973808d99a3ab978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e523f4a54626e7b8894998c807d899796897d7063564c41535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261f1f1f1f1f1e1d1c1a171413110d080200000000000000000000000000000815222e3b4754606a76828f99a0968e81746d666058565453515354565960666d73808d949f9e9184786d6053463a3024190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d171f272e333637383838383838383838383838383838383838383838383838383838383838383838382d2c29241d150d0300000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000c1925323f4c5865727f8b99a095887b6e62594f45403f3f3f424b545e696e7b7874706d675d5145392c20130600000000000000040d16202830353e45494d535457595a5a5a585653514b5f6c7985929f978a7d7164574a3e3124170b00000c1926333f4c5966727f8c99a096887b6e61584e45403f444d57626f7c888f8e8d897c6f6256493c2f23160900131f2c3946525f6c7985929f978a7d7064545d676f7c86929f9991847a6d655b50473d32281d140a00000000000006131f2c3946525f6c7985929fa298897d7063584e443f3e3e44505c6673808d9a9f92867a6d6054473a2d2114070004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000c1925323f4c5865727f8b989f928679685e52443e3f4149505a606d7884919dab9b8f8275685c4f423a37312a21180e03000006121f2b3844505b667683909c9e9285786c605349414040454d57616d7a86929fa4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5244505c6673808d9a97897c7885929b8e8175685d5245535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d40332c2c2c2c2c2c2b2a29272421201d19130f0a040000000000000000000000000916222f3c4955626f7c88949f9d9184796d605c544e494746454747494f545c606d78828f9ca0968b7e7164564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151c2226292a2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b201f1d18120b030000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e21140800000000000000000000000000000005121e2a36424d576975828f9c9d9083776a5f53473d3d3d3d3d3d424d575e696e696764605d554b4035291d1104000000000000010c161f28323a41455055575e6164666767666563605c555f6c7985929f978a7d7164574a3e3124170b0005121e2a36424d576976828f9c9d918477695f53463c35343b4653606d78828281807f7c6f6255483c2f22150900131f2c3946525f6c7985929f978a7d70665d606d798391989f92877d6f685e53493f352b20160b0200000000000006131f2c3946525f6c7985929f9f9285796d6053463c3231343f4a5463707d8a96a399897d706356493d3023160a0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000b1825323e4b5865717e8b98a39986796d6053463a36383f44515c66717e8b99a39b8f8275685c4f42352b2620180f060000000613202d394653606c7985929f9b8e8275655b50413830343b46525e687683909ca4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e524653606d7985919e91857875818e9b92867a6d605447535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d403838383838383838373633302d2c29241e1b150c070100000000000000000004111d2935404b556773808d9aa2978b7e71675c514a423d3a3a383a3b3d424a505c666f7c89949f9c8f8276685d5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b11161a1d1d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1413100c0701000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000714202d3a46525e697885929f9a8d807367584e4a4a4a4a4a4a4a4a4a4d575e615e575753514b433c342a20150a00000000000008131e28313a444c525a6164696e717374747372706d67615e6c7985929f978a7d7164574a3e3124170b000714212d3a46535e697885929e9a8d807467574d4234292b3844505c666d76757474736f6a5f53473a2e21150800131f2c3946525f6c7985929f9a8e81786d686c74818e959f948c7f726b60564c41382d23190e050000000000000006131f2c3946525f6c7985929f9c8f8376665c5145382b232e3a4754616d7a8798a2988c7f7265594c3f3226190c0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000a1724313d4a5764707d8a97a894887b6e61564c46414140404a54606d7a86929f9b8f8275685c4f4235291a150e06000000000815222e3b4855616e7b8898a2988c7f726553493f2f262a36414c5666737f8c99a4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e524c5664707d8a979a8e8174707d8a97988b7e7165584e535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4545454545454545444443403d3a3935302b262018120b0300000000000000000613202c3945515d677784919d9f9285796d60554b4038302e2d2c2d2e30383f4a54606a76828f9c9f92867a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a0e101112121212121212121212121212121212121212121212121212121212121212121212070604000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000815212e3b4854616e7b8797a2978a7e71645756565656565656565656565656565656565655534e463c32261b0f0300000000010d19242f3a434c565d606c71767b7e7f8081807f7c79746e696c7985929f978a7d7164574a3e3124170b000815212e3b4854616e7b8797a1988b7e7265584b3f312528343f4a545c606968686766625f584e43372b1f120600131f2c3946525f6c7985929f9d938e827a6e717e8a939d968f82776c60594f443a2f261b1007000000000000000006131f2c3946525f6c7985929f9a8d817467544b403428202d3946525e687985929f9a8d8174675a4e4134271b0e0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000815222f3b4855626e7b8896a0988b7f72685e56524c4d4d4c4c525d687783909d9b8f8275685c4f4235291c090300000000000a1623303d495663707d8996aa978a7d7164574a3e2d2425303e4a5764717d8a97a4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e52525e6875828f9b978a7d706d7985929d9083766a5f53535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665952525252525252525251504f4d4a4745413a373129231d150d05000000000000000714202d3a4753606d7986939f9c8f8275675c5143392f2621201f2021262e38424e5865727f8c98a399897d7063564a3d3023170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000a1623303d495663707c8996a995897c6f6363636363636363636363636363636363636363625f584e43372b1f12060000000004111d2935414c555d686d757e83878a8c8d8d8d8b8985817b706c7985929f978a7d7164574a3e3124170b000a1623303d495663707c8996a996897c706356493d3023232e38424a50535c5c5b5a5955534e463c31261a0f0300131f2c3946525f6c7985929fa59d948f847b7b86929f9991847a6d655b50473d32281d140a00000000000000000006131f2c3946525f6c7985929f988c7f7265594c3f2e231e2a36414c566a7784919d9b8f8275685c4f4235291c0f0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000814212e3a47535f697784919e9e91847a6d68615e565a59595958566875828f9b9b8f8275685c4f4235291c0f0200000000000b1824313e4b5764717e8a97a295897c6f6256493c2f23222f3c4855626f7b8895a2978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5254616e7a86929e9285796d6774818d9a95887b6e62544a5f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665f5f5f5f5f5f5f5f5f5f5e5d5c5a5754524c47433c342f271f170f050000000000000916232f3c4956626f7c899aa4998c7f7266554b4031271d14131314151c26303d4955626f7c8895aa998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e1011131313130c0b090601000000000000060b0e1011131313130c0c0a06020000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000b1824313e4b5764717e8a97a195887b7070707070707070707070707070707070707070706f6a5f53473b2e211508000000030e18222c3945515d676d7a828a909597999a9a999898928e857e707885929e978a7d7164574a3e3124170b000a1724313d4a5764707d8a97a195887b6e6255483b2f221c2630383f44464f4f4e4d4c4847433c342a20150a0000131f2c3946525f6c7985929fa79f9d9691858491989f92877d6f685e53493f352b20160b0200000000000000000006131f2c3946525f6c7985929f988b7e7165584b3e322519253043505d6a7683909d9c908376695d5043362a1d100004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d2014070006121e2b37424d5766727f8c96a09690837a726d68686766666565656875828e9b9b8f8275685c4f4235291c0f0200000000000c1925323f4c5865727f8b98a194887b6e6155483b2e22212e3a4754616d7a8794a0978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e4f5965727f8c999a8d807366626f7c8995998d8073665c505f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c80736b6b6b6b6b6b6b6b6b6b6b6b6a696663605d56534e454039312921170d0400000000000a1724303d4a5763707d8a96ac978a7e7164574b3e2e24150b0706070a14202d3a4653606d798698a29a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b12171b1d1e20202020191816120d07000000040b11171a1d1e20202020191816120d0700000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000c1825323f4b5865727e8b98a4978a7e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b6f6255483c2f2215090000000a15202c38444f59606d79838f949d9e99928f8d8c8d8f929892877e7885919e978a7d7164574a3e3124170b000b1825313e4b5864717e8b97a194877b6e6154483b2e21141e262e34383a43424141403c3a37312a22180e030000131f2c3946525f6c7985929f9f959095979291969f948c7f726b60564c41382d23190e050000000000000000000006131f2c3946525f6c7985929f978a7e7164574b3e31241d293643505c6976838f9c9d9083776a5d5044372a1d110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d20140700020e1a26313c4653606d79849197a09590857f7a77757473727272727175818e9b9b8f8275685c4f4235291c0f0200000000000c1926333f4c5966727f8c99a194877b6e6154483b2e21202d3a4653606d798699a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e54606b7784919d95887c6f62606a7784919d9185796d60535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8078787878787878787878787877777673706d68625f58514b433b332920160c01000000000b1824313e4b5764717e8a97a396897d7063564a3d3023170a00000006131f2c3845515c677985929f9b8e8175685b4e4235281b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161d23272a2b2d2d2d2d2525221e18110901050e161d22272a2a2d2d2d2d2625221e18120a010000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000c1925323f4c5865727f8b98a59a908a8989898989898989898989898989898989898989898275695c4f4236291c0f0000020f1a26313c4855606b75818e959e9c938e878381808082858b9292857b84919e978a7d7164574a3e3124170b000c1925323f4c5865727f8b98a094877a6d6154473a2e2114141c23282b2d36353534332f2e2b2620181006000000131f2c3946525f6c7985929f9d90838e939f9da0968f82776c60594f443a2f261b1107000000000000000000000006131f2c3946525f6c7985929f978a7d7064574a3d31241c2936424f5c6975828f9c9d9084776a5d5144372a1e110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000009151f2c3845515c676f7c8590959e97928c86848280807f7f7f7e7e7e83909d9b8f8275685c4f4235291c0f0200000000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2c3845515c677986929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e55636f7c89959d9083766a5f5866727f8c99978a7d7063565f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09f9286858585858585858585858585848382807d7a746f6a605c554d453b32281e1308000000000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000004101c2834404b556b7884919e9b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720282e3336373939393932312e29231b13090e1720272e3336373939393933322f2a231c130a0000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000c1925323f4c5865727f8b98a5a29a9796969696969696969696969696969696969696968e8275685b4f4235281c0f000006121f2b37434e5863707d89939e9c928d817a7674737475797e85918f8284919d978a7d7164574a3e3124170b000c1825323f4b5865727e8b98a094877a6d6154473a2e2114181f262b2d2e34333231302d2c29241d150d03000000131f2c3946525f6c7985929f978a7e818e939e9e91847a6d655b50473d32291e150b02000000000000000000000006131f2c3946525f6c7985929f978a7e7164574b3e31241c2936434f5c6976828f9c9d9084776a5d5144372a1e110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000004101c2834404b555f6a6f7c838c9196999993918f8d8c8c8c8b8b8b8b90959f9b8f8275685c4f4235291c0f0200000000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2b3844505b667985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5d6774818e9a988b7e72655854616e7b86929b8e8275685e5f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0a2989292929292929292929292929291908f8d8a86817c746d675e574d443a2f24190d050000000b1825313e4b5864717e8b97a295897c6f6256493c2f231609000000000c18232e44515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393f4344464646463f3e3a342d251b1116202932393f4344464646463f3e3a352e251c120700000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000b1825313e4b5864717e8b97a4a09590909090909090909090909090909090909298a29b8e8175685b4e4235281b0f00000814212e3a47535f6a7683909c9f958d80756e68676667676d717b84918f86929f978a7d7164574a3e3124170b000b1824313e4b5764717e8a97a194877b6e6154483b2e2118212a31373a3b403f3e3d3c3a39352f271f150b010000131f2c3946525f6c7985929f978a7d78818f949e91847a6e685d554b433930271d140b020000000000000000000006131f2c3946525f6c7985929f988b7e7165584b3e32251d293643505c6976838f9c9d9083776a5d5044372a1d110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f432e2f3c4955626f7c8895a093867a6d6053473a2d2014070000000c18232e39434e585f6a6f787f84898d8f91979495959696969697979c9fa69b8f8275685c4f4235291c0f0200000000000c1926323f4c5965727f8c98a194877b6e6154483b2e21202d394653606c798698a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e606d7a85929f92867a6d6054525e6875828f9c92867a6d615f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0a69f9c99999999999999999999999a9a9c9c9999928e8880796e695e564c41352921160b0000000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000000071e2b3844515e6b7784919e9c8f8275695c4f4236291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d28323b444b4f51535353534c4a463f372d23181d27323b444a4f51535353534c4b463f372e23180d02000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000a1724313d4a5764707d8a97a39d90838383838383838383838383838383838386929f9a8d8074675a4d4134271a0e00000815222f3b4855626e7b88949f9d9083786c615e5659555c60696f7c86929299a3978a7d7164574a3e3124170b000a1724303d4a5763707d8a96a195887b6e6255483b2f221f2a333c4246484d4c4b4a494745403931271d12070000131f2c3946525f6c7985929f978a7d70798290959690837a6d675d554b42392f261d140a0000000000000000000006131f2c3946525f6c7985929f988c7f7265594c3f32261c28343f4a546a7683909d9c908376695d5043362a1d100004111e2b3744515e6a7784919d998c7f7266594c3f2d33404d596673808c999d9083766a544a40342f3c4955626f7c8895a093867a6d6053473a2d20140700000007121d27303c464e585f666d72787c808285868788898989898a8a8a90949f9b8f8275685c4f4235291c0f0200000000000b1825323e4b5865717e8b98a195887b6e6255483b2f22212d3a4754606d7a8793aa978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5764717e8b989b8e8175685d524d5664717d8a97998b7f7265586c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09f94908c8c8c8c8c8c8c8c8c8c8c8d8e8f92979b9f9b928d837b6e685d52453e33281c100300000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39444d565b5e60606060585651493f34291e222e39444d555b5d60606060595751493f352a1e1206000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000091623303c4956636f7c8996a895897c7676767676767676767676767676767784919e988c7f7265594c3f3226190c00030f1c28333f4a5466737f8c99a2978a7d70665b524c4d4b51565f6a74808d9aa3ab978a7d7164574a3e3124170b00091623303c4956636f7c8996a896897c6f6356493c302326313c454d53555a5958575653514b43392f24180c0000131f2c3946525f6c7985929f978a7d706d7a839096959083796d675c544a42382f261b110600000000000000000006131f2c3946525f6c7985929f9a8d8074675a4d4132261f2c3844505c667884919e9b8f8275685c4f4235291c0f0004111e2b3744515e6a7784919d998d80736653493f3333404d596673808c999d918477665c5144382f3c4955626f7c8895aa93867a6d6053473a2d20140700000006111b262f383f444e545c60656c6f737578797a7b7c7c7c7d7d7d7d82909c9b8f8275685c4f4235291c0f0200000000000a1724313d4a5764707d8a97ac96897c6f6356493c3023222e3b4855616e7b8894a1978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5f697683909c96897d7063564c4653606d7985929d9083776a5f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09c9082808080808080808080808080818285898f939f9d9590837a6d60594f44382c20150900000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b27333f4b565f676a6c6c6c6c65625b51463a2e2227333f4a555f676a6c6c6c6c66635b51463a2f22160a000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000714212e3a4754616d7a8796a0978a7d706a6a6a6a6a6a6a6a6a6a6a6a6a6d7986929f978a7d7064574a3d3124170a0006121f2b3844505b667683909c9e9285786c60544a414040454e58616e7b87939fa4978a7d7164574a3e3124170b000714212d3a4754606d7a8796a0978b7e7164584b3e30242b37424d575f616766656463605d554b4035291d100400131f2c3946525f6c7985929f978a7d70686e7b849197958f82796d665c544a41382d22171309000000000000000006131f2c3946525f6c7985929f9c8f827569584e43372b202d3a4653606d7986929f9a8d8174675a4e4134271b0e0004111e2b3744515e6a7784919d9c8f8275655b50443734404d5a6773808d9a9f9286796d6053463a2f3c4956636f7c8996a29886796d6053463a2d2013070000000b17222d38414950535758535b60636669666d6e6e6f6f7070707075828e9b9b8f8275685c4f4235291c0f0200000000000916222f3c4955626f7c889aa4978b7e7164584b3e2f2423303d4a5663707d8996a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b626e7b88949e9184786c60534645515c6674808d9a95887c6f626c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807373737373737373737373737476787c828a9298a0958f82766b6155483c31261a0f02000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a36434f5b67717779797979726d62564a3e31252a36434f5b67717779797979726d63574b3e3225180c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000713202d3946525d687784919e998c807366585d5d5d5d5d5d5d5d5d5d626f7b8899a196887b6e6155483b2e221508000613202d394653606c7985929f9b8f8275655b50423830343c46525e697783909da4978a7d7164574a3e3124170b000713202c3945525d687784919e998d807366564c41352b2d3a46535f696e737271706f6d675d5145392c1f130600131f2c3946525f6c7985929f978a7d7064696e7c859298948f82786d665b53493f3327251b12090000000000000006131f2c3946525f6c7985929f9e9185786a5f53473a2f292e3b4855616e7b8899a3988c7f7265594c3f3226190c0004111e2b3744515e6a7784919d9e9185786c6053463e373f4a546874818e9ba399887c6f62554b40373d4a5764707d8a979f928579665c5044382b1f12060000030f1b27333f49535b60646566676865625b5c60616262636363636875828f9b9b8f8275685c4f4235291c0f0200000000000714202d3a4753606d7a86939f998c807366554b4035292935404b5565727f8b98a4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b6673808d99998c7f73655b5044404b54626f7c88959a8d8074666c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073666666666666666666666767656c70757e86929f9f948a7d7063584e43372b1f1206000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784868686867f7265584c3f32252a3744515d6a7783868686867f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e21140800000000000000000000000000000005111d2935414c566875818e9b9c9083766a5f53505050505050504f5965727f8c989e918478695f53463a2d211407000815222e3b4855616e7b8898a2998c7f726653493f2f262a36424d576673808c99a4978a7d7164574a3e3124170b0004111d2935414c566875818e9b9c908376685d52463b37383d4855616e7b807f7e7d7c796d6053473a2d20140700131f2c3946525f6c7985929f978a7d70645f6a6f7d869299948e81786c655b504440372d241b120800000000000006131f2c3946525f6c7985929fa197887c6f62564c41393537414c5665717e8b98a399897d706356493d3023160a0004111e2b3744515e6a7784919da197897c6f63594f474244505c6676838f9cab998d8073675d514644424b5565727f8b989e9285786b5f4a3f34281c1003000005121f2b3744505b656c7072737475726d625653545556565656576976838f9c9b8e8174685b4e4135281b0e0200000000000613202c3945515d677784919d9c8f8276675d51453a33353b45515d6775828f9ca4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b6d7984919e93877b6e6153493f394754606a7783909d9285796d6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665959595959595959595a535b60636c707e8a949e9d9083776a5f53473a2e211408000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a77849193938b7f7265584c3f32252a3744515d6a77849093938c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000010d1924303e4a5764717d8a969f93877b6e625a5047434340454b55606b7683909d9a8e817467574d42362a1e1205000a1623303d495663707c8996aa978a7d7164574a3e2d2425303e4a5764717d8a97a4978a7d7164574a3e3124170b00010d19242f3e4b5764717e8a979f92867a6d61574d47434446505a65727f8b8c8b8a877a6d6154473a2e21140700131f2c3946525f6c7985929f978a7d706458606a707d87929f938e81776c605b52493f362d241a1108000000000006131f2c3946525f6c7985929fa9998c8073685d524b46414446525e6875818e9b9f92867a6d6054473a2d2114070004111e2b3744515e6a7784919da79b8f82756b6159534d5055606d7985929fa49e9184796d605b53504d535d6775818e9b9d9083766a5d50432e23170b0000000613202d394653606c777e7e7f81827f7265574d4748494949535f697884919e9a8d8073675a4d4034271a0d01000000000004101d2935404b556774818e9a9f9286796d60554b443f41464d57606d7a86929fa4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b707d8a979c8f8276695e52413837434e5865727f8c99978a7d716c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4d4d4d4d4d4d4d4d4950535a616c75828f9ca095887b6e6255483b2f221508000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000813202d3a4653606d7984919e9a8e81756c615a534e4e4b51555d676f7c89959f95897c706356493d31261a0e02000b1824313e4b5764717e8a97a295897c6f6256493c2f23222f3c4955626f7c8895a2978a7d7164574a3e3124170b00000813202d3a4653606d7985929e998c7f73695f57544e505359616c7783909998908377685e5246392d20130700131f2c3946525f6c7985929f978a7d70645758616b717e8b919c938d80746e635b51483f362c231a0e050000000006131f2c3946525f6c7985929fa99f92857a6d605c54524c50535b616e7a86929f9c908376675d5145392c2013060004111e2b3744515e6a7784919d9f95908a7d706b625f575c6067707d8a98a299938f8d80736d63605b575f626d7985929f9a8e8174675b4e4134281b0600000005121f2b3744505b6577848b8c8d8f8276695f55524c504d5359616e7b8896a1978b7e7164584b3e3125180b000000000000010d18242f3d4a5764707d8a97a2988b7e71675d5450494c52565e69727f8c98a3ab978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786875828f9b978a7e7164574d422f323c4754616d7a86929c8f8275687986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d40404040404040403f4446505a63707d8999a3988c7f7265594c3f3226190c000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000006121f2c3844505c66737f8c969e938a7e716c625f585b555d60676d7983919d9d9083776b6054483b2f1f140900000c1925323f4c5865727f8b98a194887b6e6155483b2e22212e3a4754616d7a8794a0978a7d7164574a3e3124170b000006131f2c3845515c6774808d979f92857b6e69625f585b60626b717e8b95a0978b7e7265564c4135291d110500131f2c3946525f6c7985929f978a7d7064574f59626c727f8c929d928c80736d625a50483e352c20170d0200000006131f2c3946525f6c7985929fa197928e81746d66615e565b60636d74818e98a2978b7e7265554c4135291d11040004111e2b3744515e6a7784919d9d908390867d746e696a666d707983909d9f9387828f8b7f756f6c656a696e74808d97a2988b7e7165584b3e3225180b000000030f1b27333f49536774818e999a93877b6e67605d565c575f626b73808d9a9f94877b6e6154483b2e211508000000000000000713202d3a4653606d7985929e9e9184796d66605b53565d61686e7b85929299a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786d7a86929e9285796d6053463b302d3946525e6875828f9b92867b6e7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d403333333333332d33373e4753606d7a86929f9b8e8175685b4e4235281b0f000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000000000000030608090a0a0a0a0c1926333f4c5966727f8c99a194877a6e6154473b2e21140a0a0a0a0a07070501000000000000000003101c28343f4a54606d798491999f92867e756e6a696868676d7179828f959d93897d7063594f44382c200d0300000c1926333f4c5966727f8c99a194877b6e6154483b2e21202d3a4653606d798699a3978a7d7164574a3e3124170b000004101c2834404b55606d7a85919e9791847b736f6a6b666c6f747d86929f9e9185796d6053473a3025190d0100131f2c3946525f6c7985929f978a7d7064574a505a636d74808d939c928c7f726d625a50473e32291e140800000006131f2c3946525f6c7985929f9e9285928d8079716d686a656c70757f8b929d9f92857a6d6054473a2f24190d010005111e2b3844515e6b7784919e96897d859287807b787777797d839095a09c8f827a85928b827c797777787b818d929d9f92867a6d6054473a2d211407000000000b17222d3c4955626f7c88949e99908279716d686a696a696e747d87929f9c908376695e52463a2d2014070000000000000006131f2c3845515c6773808c97a0968f81786f6c656868686d727a83918687929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e918578727f8c999a8d8074665c514538292a36414c5664707d8a97998c7f727986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033262626262622272c3845515d677784919e9c8f8376695c504336291d10000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000000000040a0f13151617171717171926333f4c5966727f8c99a194877a6e6154473b2e211717171717171413110d0802000000000000000c17232e3845515d676f7c87929a989288817b77757475767a7e848f949e948e81746b6155473d32271b100000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2c3845515c677986929f978a7d7164574a3e3124170b0000000c18232e3945525d68707e8a929f969186807c797878797c818792989f928a7d70675c514538281e13080000131f2c3946525f6c7985929f978a7d7064574a48515b606c77818e949b918b7f716c61594f443b3025190e02000006131f2c3946525f6c7985929f988b7f88938d837e7a787777797c828b919b9f948c7f72675d5145392c1e1308000005121e2b3845515e6b7884919e94887b7e8a928d8885838485899095a09d93897d717e8a918f8985848485888e939da0968d8074685d5245392c201307000000000615222e3b4754606a75828f969f9590847e7a78767677787b808792999d92897d7063574d42362a1e12050000000000000004101c2834404b55606d7a8591999e938f837c78767475777a7f85918e8185919e978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9184787783909d95887c6f62544b40342825303a4653606d7985929d9184777986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a1a1a1a171d2935404b556a7683909d9d9084776a5d5144372a1e11000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000000070e151b1f212224242424242426333f4c5966727f8c99a194877a6e6154473b2e2424242424242421201d19130c0500000000000006111c2935404b55606a717e8892989a938e888482818283868b91969e938f82796d60594f44352b21160b0000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2b3844505c667985929f978a7d7164574a3e3124170b00000007121d2935414c56616c73808c939a98928d8886858485888d929999938c80736b61554b403429160c020000131f2c3946525f6c7985929f978a7d7064574a3f44505b656d78828f959c93877e716b61564c41362a1e1105000006131f2c3946525f6c7985929f96897d808d93918b8685848485898f939b9f958f82786d60554b4135291d0c01000005121f2b3845525e6b7885919c94877a73808c929791909192989d9f9b938e81746c727f8a929792919092979b9f9c9590847a6d60564c4135291d11040000000006131f2b37434e58616d7a8491959f96918b868483838385888d92999e938d80746b6054453b30251a0e0200000000000000000c18232e3945525d68707d8793999e9590898482818283868b9291847a85929e978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9184777b88959d9083776a5f5342392e231f2c3844515c6674808d9a95887c7985929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033262222222323232b37424d576a7784909d9d9083776a5d5044372a1d11000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000007101820262b2e2f30303030303030333f4c5966727f8c99a194877a6e6154473b30303030303030302e2d2a251e170e050000000000000c18242f39434e58626c717e868e93999b96918f8e8f9092999b96918b81796d675d51473d3323190f040000000c1926323f4c5965727f8c98a194877b6e6154483b2e21202d3a4653606d798698a3978a7d7164574a3e3124170b000000000d1924303a44505a636e737f8890959b999992919192989a9b9590877f736e63594f43392f231804000000131f2c3946525f6c7985929f978a7d7064574a3d3f49535c666d79838e8f8f8f877d70685e5246392d201407000006131f2c3946525f6c7985929f968a7d78818c92999391909192989b9e99938d83796d665c51433a2f24180d00000005121f2c3845525f6b78858f8f8f867a6d737f878d919795969698928f8981786d606d727e858c90959596969992908b837b6e675d51443a2f24190d0100000000030f1b27323c46525e686e7b838c92989c9a9391908f9092979a9b97918a81786c60594f4433291f140900000000000000000007121d2935414c56616b717e8791969c9d96918f8e8f90929490857c7885929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d9184777f8c99988b7e7265584e4330271d1c2834404a54626f7c8895998d807885929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d40332f2f2f2f2f302e343a47535f697885929e9c8f8276695c4f4336291c10000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000040e18222a32373b3c3d3d3d3d3d3d3d3d3f4c5966727f8c99a194877a6e6154473d3d3d3d3d3d3d3d3d3a3936302920170c02000000000007121d27313d46505a626c717b81878c9092999696969597918e8a847e756d675d554b40352c211107000000000b1825323e4b5865717e8b98a195887b6e6255483b2f22212d3a4754606d7a8793aa978a7d7164574a3e3124170b0000000008131e28323e48525c636d737d83898e91969596969596918e89837c726d635c52473e31271d1207000000131f2c3946525f6c7985929f978a7d7064574a3d38414b545d676d7a8282828282817a6e6154473b2e211408000006131f2c3946525f6c7985929f968a7d707880878d91959596969596918d8780796d675d544a4031281d1307000000020f1c2935424f5c6875818282828275676d727b8185878989898885827d746d665c636c717a7f84878889898886837e786e695e554c4132281e13080000000000000a15202a36414c565f696e7980868b8f9196959596969596918f8a857e746c665b50473d3221170d03000000000000000000000d19242f3a434f59626c717d848b90929996969597928e89827b6f7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d90847783909d92867a6d6054473c32211518232e3947535f6a7783909d91847885929e93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d403c3c3c3c3c3c3d3d40454d56626e7b8897a19b8e8174685b4e4135281b0e000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000a15202a343c4347494a4a4a4a4a4a4a4a4a4c5966727f8c99a194877a6e61544a4a4a4a4a4a4a4a4a4a4746413a32291e13080000000000010b151f2b343f48505a61696e757b80838688898989888785827e79716c605d554b43392f231a1000000000000a1724313d4a5764707d8a97ac96897c6f6356493c3023222e3b4855616e7b8894a1978a7d7164574a3e3124170b00000000020c16202c36404a525b636b6f787d818487888989888784817d786f6a635b524a40352c1f150b01000000131f2c3946525f6c7985929f978a7d7064574a3d2f39424b555e686d7575757575756e685e5246392d201407000006131f2c3946525f6c7985929f978a7d706d737b808486888989888784807c746d675d554c42392e1f160c01000000020e1b2834414d59656f75757575756f6563696e74787b7c7d7c7b7975706b605c545a61686d73777a7c7c7c7b7a76716d665e564d433a2f20160c01000000000000040d1925303a444d575f676d737a7e82848788898989888784827e79716c605b544a3f352b210f05000000000000000000000008131e28313d47505a626b70797e8386888989898785817d766e697985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d90837b88959b8e8175685d5245392c2013121c2b37434e5865727f8b9996887b85919e93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d49494949494949494a4b51565e69737f8c99a49a8b7e7164584b3e3125180b000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000030f1b26323c464e5355575757575757575757575966727f8c99a194877a6e61575757575757575757575754524c443a3025190d010000000000030d19222d363f4850575e61696e7376797b7c7d7c7c7a7875716d66625a514b433a31271d110800000000000916222f3c4955626f7c889aa4978b7e7164584b3e2f2424303d4a5763707d8a96a3978a7d7164574a3e3124170b0000000000040e1a242e384049515960656c7074787a7c7c7c7b7a7875706c656058514940372e231a0d0300000000131f2c3946525f6c7985929f978a7d7064574a3d31303a434c565e61686969696968615e564c41362a1e1105000006131f2c3946525f6c7985929f978a7d7064696e73777a7c7c7c7b7a77736f6a605d554c433a30271c0d0400000000000c1925313d49545d656869696969655d575f6167696e6f706f6e6c66636059514b50565d6166686d6f706f6e6d6764605c544d443b31281e0d04000000000000000008131e28323b454d555d60686d7175787a7b7c7c7c7b7a7875716d66615a504a42382d23190f000000000000000000000000010c161f2c353f48505960676d7276797b7c7c7c7b7875706b616c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949c90837f8c9896897d7063564c4135291d110f1b26323c4754616d7a8692998c7f84919e93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665955555555555555565657555c60686e7b85929f9f93877a6d6154473a2e211407000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000006131f2b37434e585f62636363636363636363636366727f8c99a194877a6e636363636363636363636363615e564c41362a1d110500000000000007101b242d363e454d53575f6166666d6e6f70706f6d686864605c545045403a31281f150b0000000000000714202d3a4753606d7a86939f998c807366554b4035292a35414c5665727f8c98a4978a7d7164574a3e3124170b00000000000008111c262e3740474f535b606368686d6f70706f6e686863605b534e4640372e251c11080000000000131f2c3946525f6c7985929f978a7d7064574a3d3128313a444c52545b5c5c5c5c5b54524c443b3025190e02000006131f2c3946525f6c7985929f978a7d70645e6166676d6f70706e6d6867625f58514b433a31281e150b0000000000000915212c37424b54595c5c5c5c5c5a544d5355575e6162636361605b54544f4540444c5254565d6062636362605d5553504a423b32291f160c000000000000000000020c162029333b434b51565d616569686d6f6f706f6f6d686864605c5450443f382f261c110700000000000000000000000000040d1a232d363f474f555c6065676d6f70706f6e69686360596c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949c8f82828f9c9184786c6053463a2f24190d0a15202d3946525e6875828f9b908283909d93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366626262626262626262636465676d717a839098a2998f8275685e5246392d201307000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000815212e3b47535f6a6f707070707070707070707070727f8c99a194877a707070707070707070707070706d685e5246392d2013070000000000000009121b242c333b42464d5355545c606163636362615e565753514b423e352f281f160d030000000000000613202c3945515d677784919d9c8f8376675d51453a33363b45525d6876828f9ca4978a7d7164574a3e3124170b000000000000000a141c252e353d4149505356565e6162636362615e5656535049413d342e251c130a000000000000131f2c3946525f6c7985929f978a7d7064574a3d312429323a4146474f4f4f4f4f4f4746413b32291e140800000006131f2c3946525f6c7985929f978a7d70645754555d6062636362605d5655534e45413a31281f160c0300000000000004101b26303942494d4f4f4f4f4f4d494246484d52545656565553504a48443d343a4146474c52545556565553514b46443f38302920170d0400000000000000000000050e172129313a41454c525458565d606262636362615e565753514b423e332d261d140a00000000000000000000000000000008111b242d353d434b5153555c6062636362615e5756545f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d908387929a8c7f73655b504437281e130805111d2a36414c5664707d8a97928783909d93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c80736f6f6f6f6f6f6f6f6f6f70707275797e859095a09f92877b6e61564c41362a1e1105000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000916222f3c4955626f7c7d7d7d7d7d7d7d7d7d7d7d7d7d818e9ba4978a7e7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e211407000000000000000009121a212931363c4247484b5153555656565554524c4a464540393029241d160d040000000000000004101d2935404b556774818e9a9f92867a6d60554b443f41464d57606d7a86929fa4978a7d7164574a3e3124170b00000000000000020a131c232b2f383f44464a4c52545556565554524c4a46443f382f2b221c130a01000000000000131f2c3946525f6c7985929f978a7d7064574a3d312420293036393a4242424242423b3936302920170d0200000006131f2c3946525f6c7985929f978a7d7064574a4b51535556565554524c4947433c352f281f160d04000000000000000009141e2730373d414242424242413d373a3b424647494a494846443f383832283035393a414547494949484745403a38342e261e170e05000000000000000000000000060f171f282f353a4146474b4c5254555656565554524c4b464540393028221c140b020000000000000000000000000000000009121b232b31394045474b51535556565654524d4a525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949f9286929993877b6e6153493f3327160c01010d1925303a4653606d798591999286929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09a8e817c7c7c7c7c7c7c7c7c7c7c7c7d7f81858b9297a09f928c7f72695f53443a3025190d01000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875818a8a8a8a8a8a8a8a8a8a8a8a8a8e939da69a908a8a8a8a8a8a8a8a8a8a8a8a8a897d7063564a3d3023170a000000000000000000080f171f252a31373a3b40454648494a49494746413e3a38342e271e18130c040000000000000000010d18242f3d4a5764707d8a97a2988b7e72675d5450494c52575f6973808c99a3ab978a7d7164574a3e3124170b0000000000000000010a11191d262d3337393d414647494949484746413d3937332d261d19100a0100000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124171e252a2d2e3536363636352e2d2a251e170e050000000006131f2c3946525f6c7985929f978a7d7064574a404547494949484745413c3b373229241d160d04000000000000000000020c151e262c3134353636363634312b2d30363a3b3c3d3c3b3938332d2c272124292d2f35393a3c3d3c3b3a38352f2b28231c140c050000000000000000000000000000060d161d24293035393a3e41454748494949484746413e3a38342e271e17110a0200000000000000000000000000000000000009111a1f272f34383a4045474849494947464246525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a39992999c8f8276695e5341382d221704000008131f2c3844505c6673808d9a999299a393877a6d6054473a2d211407000714212e3a4754616d7a8794a09d938e8888888888888888888889898a8c8e92979e9f98928b80736d63574d4232291e130800000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875828e9696969696969696969696969b9da5a3a29a97969696969696969696969696897d7063564a3d3023170a00000000000000000000050d141a1f262b2d2e34383a3b3c3d3d3c3a3936302d2c28231d150c0701000000000000000000000713202d3a4653606d7985929e9e9184796d66605b53565e61696e7b86929299a3978a7d7164574a3e3124170b00000000000000000000070b141b22272b2d3035393a3c3d3d3c3b3936302d2b27221b140b07000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d31241713191e202128292929292821201e19140d05000000000006131f2c3946525f6c7985929f978a7d7064574a3d393a3c3d3d3b3a3935302e2b262018130c040000000000000000000000030c141b212528292929292928251e21252a2d2e2f30302e2d2b28221c1c16191d2024292c2d2f30302f2d2c29241f1c17110a0200000000000000000000000000000000040c13181e24292d2e2f35393a3c3c3d3c3c3a3936302d2c28231d150c06000000000000000000000000000000000000000000080d151d23292c2f34383a3c3d3d3c3b3a3646525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a39fa2978a7e7164574d422f261b1106000003101c28343f4a54626f7c88959f9fa3a093877a6d6054473a2d211407000714212e3a4754616d7a8794a0a59d9a95959595959595959595959697989b9e9b98928e867e736e635b51453c3120170d0200000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875828e96969696969696969696969696969696969696969696969696969696969696897d7063564a3d3023170a000000000000000000000003090e151a1e2123282c2d2e3030302f2e2d2a25201f1c18120b0300000000000000000000000006131f2c3845515c6773808c97a0968f81786f6c656868686d727b84918687929f978a7d7164574a3e3124170b0000000000000000000000020a11171b1f2025292d2e2f30302f2e2d2a25201f1b17110a0200000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d312417080d1113141c1c1c1c1c1c1414110e080200000000000006131f2c3946525f6c7985929f978a7d7064574a3d312d2f30302f2d2c2924211f1b150d07010000000000000000000000000002091015191b1c1c1c1c1c1b1912141a1e202123232322201f1c1711100b0d1113191d202122232322201f1d1812100b060000000000000000000000000000000000000001070d13191d202124292c2d2f2f30302f2e2d2a25201f1c18120b030000000000000000000000000000000000000000000000030b12181c1f23292c2d2f30302f2e2d3946525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794969696969285796d6053473b3120140a000000000c17232e3847535f6a7783909696969693877a6d6054473a2d211407000714212e3a4754616d7a879496969696969696969696969696969696959496918e8b86817b716d635c52493f332a1f0e050000000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875818989898989898989898989898989898989898989898989898989898989898989897d7063564a3d3023170a0000000000000000000000000003090e1214181c1f20222323232221201d191313100c07000000000000000000000000000004101c2834404b55606d7a8591999e938f837c78767475777a7f86918e8184919e978a7e7164574b3e3124180b00000000000000000000000000060b0f1213191d20212223232221201e1913120f0b06000000000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a010507070f0f0f0f0f0f08070502000000000000000006131f2c3946525f6c7985929f978a7d7064574a3d31242223232221201d1915130f0a04000000000000000000000000000000000004090c0e0f0f0f0f0f0f0c05090e1114141617161513120f0b0600000105080d111314161616151413100c0703000000000000000000000000000000000000000000000002080d111314191d2021222323232221201e191313100c07000000000000000000000000000000000000000000000000000001070c1013181c1f2022232323212c3946525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a878989898989898074675c5145382c1f13020000000006111c2b37434e5865727f898989898989877a6d6054473a2d211407000714212e3a4754616d7a87898989898989898989898989898989898988888784827f7a746e69625a524a40372d21180e000000000b1825313e4b5864717e8b969695897c6f6256493c2f23160900000005111e2b3844515e6b77849196968f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000915222f3c4855626f7c7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e2114070000000000000000000000000000000206070c10131315161716161413110d08060400000000000000000000000000000000000c18232e3945525d68707d8793999e9590898482818283868c9291847a84919d978b7e7164584b3e3125180b0000000000000000000000000000000305080d111314161616151414110e0805030000000000000000000000000000131f2c3946525f6c79859299978a7d7064574a3d3124170a0000000002030303030200000000000000000000000006131f2c3946525f6c7985929f978a7d7064574a3d3124171616151413110d080603000000000000000000000000000000000000000000000202030303030200000002050708090a09080606030000000000000001040607090a090807060400000000000000000000000000000000000000000000000000000000010507080d11131415161616151413110d0806040000000000000000000000000000000000000000000000000000000000000004070c101314151616161f2c3946525f6c7985929f978a7d7164574a3e3124170b000713202d3a4653606d787d7d7d7d7d7d7d7a6e61554b4034291c100400000000000f1b26313c4753606d797d7d7d7d7d7d7d786d6053463a2d201307000713202d3a4653606d787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7b7a7875726d68615e57504840382e251c0f06000000000b1825313e4b5864717e89898989897c6f6256493c2f23160900000005111e2b3844515e6b7784898989898275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d998c7f7366594c402e232a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000815212e3b47535f6a6f7070707070707070707070707070707070707070707070707070707070707070706d685e5246392d2013070000000000000000000000000000000000000004060708090a0a0907070501000000000000000000000000000000000000000007121d2935414c56616b717e8791969c9d96918f8e8f9092948f847c7783909d988b7e7165584b3e3225180b00000000000000000000000000000000000001050707090a0a09080705020000000000000000000000000000000000131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a0000000000000000000000000000000000000000000006131f2c3946525f6c79859299978a7d7064574a3d3124170a0a08070704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070709090a09090707050100000000000000000000000000000000000000000000000000000000000000000000000000040607090a0a131f2c3946525f6c79859299978a7d7164574a3e3124170b0006121f2c3844515c666d707070707070706e685e5243392f23180c0000000000000a15202c3945515d676d707070707070706d665c5044382c1f12060006121f2c3844515c666d7070707070707070707070707070707070706f6e6d686865615d56534d453f362e261c130a00000000000814212e3b4754616e7b7d7d7d7d7d7a6d6054473a2d21140700000000091623303c4956636f7d7d7d7d7d7c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9a8d807467554b4034282b3744515e6a7784919d998c7f7266594c3f3326190c000000000000000000000006121f2b37434e585f62636363636363636363636363636363636363636363636363636363636363636363615e564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19242f3a434f59626c717d848b90929996969597928e89827b6e76838f94948b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6255483b2f2215080000000000000000000000000000000000000000000006131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000003070b0d0e131313131313131313131313131313131313131313131313130603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c79868c8c8c8a7d7164574a3e3124170b0004101c2834404a545c6063636363636363615e564c4131271d120700000000000004111d2935404b555d6063636363636363605c544a3f34281c10030004101c2834404a545c606363636363636363636363636363636363636261605d565854524c46423b332d241c140a0100000000000714202d3a46525e696e70707070706d685d5245392c201306000000000915222f3b4854606b6f707070706f6a5f54473b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9c8f8376675c5145392f2935414c566b7784919e988c7f7265594c3f3226190c0000000000000000000000030f1b26323c464e535556565656565656565656565656565656565656565656565656565656565656565654524c443a3025190d010000000000000000000000000000030607090c0d0e0e0d0b0808060200000102060606060000000000000000000000000000000008131e28313d47505a626b70797e8386888989898785827d766e697581878787877f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825313e4a57636d72737373736e695f53473a2e21140800000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6255483b2f2215080000000000000000000000000000000000000000000000000001080e13171a1a2020202020202020202020202020202020202020202020202012100c0600000000000000000000000000000000000000000000030506080a0b0c0c0b0a08060503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7c6e6255483b2f22150800000c18232e39424a51535656565656565654524c443b301f150b01000000000000010d18242f3a434b51535656565656565653504a42382e23170c0000000c18232e39424a5153565656565656565656565656565656565656555554524c4c4746413a363129211b120a0200000000000005111e2a36424d575e616363636363605d564c4135291d11040000000007131f2c38444f59606363636363625f584e43372b1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9f9285796d60554b4039353946525d687885929f988b7e7165584b3e3225180b0000000000000000000000000a15202a343c4347484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4746413a32281e130800000000000000000000000000060b10121316181a1a1a1a181514120f090c0e0f131313130b0a0805000000000000000000000000010c161f2c353f48505960676d7276797b7c7c7c7b7875706b61606d7a7b7b7b7b7a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b636666666666625f574d42372b1e120600000000000000000000000000000000000000000000000c1825313e4a57636d72737373736e695f53473a2e211408000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d1f1c17110a03000000000000000000000000000000000003060b0f1213151718191918171513120f0b0603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825313e4a57636d72737373736e6a5f53473a2e211408000007121c2730394044464a4a4a4a4a4a4a4746413b32291e0d03000000000000000007131d28313a4045474a4a4a4a4a4a4a46443f3830261c110600000007121c2730394044464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4949484745413f3a3935302a251f170f090000000000000000020e1a25303b454d5254565656565654524c433a2f24190d0100000000030f1b27323d474f54565656565655544e463c32261b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da2988b7e71675d514b4641424754616d7a8798a2978a7e7164574a3e3124170b000000000000000000000000040e18222a32373b3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3936302820160c020000000000000000000002080d11171c1f202225262727262522211f1a15181a1b20202020171714110c050000000000000000000000040d1a232d363f474f555c6065676d6f70706f6e69686360595d686d6e6e6e6e6d675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f495157595959595955534d453c31261a0e0200000000000000000000000000000000000000000000000916222e3a46515b636666666666625f574d42372b1e12060000000000000000000000000000000000000000000000010b141d242b303334393939393939393939393939393939393939393939393939392c28231c150c030000000000000000000000000000060b0f12171b1f202224252525242422201f1b17120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b636666666666625f574e42372b1e12060000000b151e272e34383a3d3d3d3d3d3d3d3b3936302920170d000000000000000000010c161f282f35393a3d3d3d3d3d3d3d3a38342e261e150a00000000000b151e272e34383a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b3a3935302e2d29241e1a140d050000000000000000000009141f29333b4246474a4a4a4a4a4745413a31281e13080000000000000a16212b353d4448494a4a4a4a4947433c342a20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da79d9184796d605c54524c4d535a63707d8a96a399887c6f6255493c2f2216090000000000000000000000000006101820262b2e2f3030303030303030303030303030303030303030303030303030303030303030302e2d2a251e160e0500000000000000000000040c13191c23282b2d2f3233343433312f2e2b261f2427282d2d2d2d2423211c171008000000000000000000000008111b242d353d434b5153555c6062636362615e5756554f565d6061616161605d554c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a1f150900000000000000000000000000000000000000000000000006121e2a353f495157595959595955534d453c31261a0e02000000000000000000000000000000000000000000000008121d262f363c3f414646464646464646464646464646464646464646464646464638342e261e150a000000000000000000000000020a11171b1f22272b2d2e3031323231302f2d2b27221f1c17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f495157595959595955534e453c31261a0e02000000030c151c23282c2d303030303030302e2d2a251e170e0500000000000000000000040d161d24292c2d303030303030302d2c28231c150c030000000000030c151c23282c2d3030303030303030303030303030303030302f2e2d2c292421201d19130e09030000000000000000000000020d17202930363a3b3d3d3d3d3d3a39352f281f160c01000000000000040f19232b32383b3c3d3d3d3d3c3b37322a22190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da095908d80746d66615d56575f626c75828f9c9f9286796d6053463a2d2013070000000000000000000000000000060e151b1f212223232323232323232323232323232323232323232323232323232323232323232321201d19130c0500000000000000000000070e161e25292e34383a3c3f404141403e3b3a37312c3134353939393931302d28221a1208000000000000000000000009121b232b31394045474b51535556565654524d4a48434c52545454545454514c433a2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c252d353a3e3f404040403b3a37312a21180e03000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a1f15090000000000000000000000000000000000000000000000030e19242f3840474c4d53535353535353535353535353535353535353535353535353443f3830261c110600000000000000000000070b141b22272b2d3337393b3d3e3f3f3e3d3b3937332d2b28221c140b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a2015090000000000030b12181c1f202323232323232321201e19140d05000000000000000000000000040c13181d202023232323232323201f1c17110a0300000000000000030b12181c1f20232323232323232323232323232323232323222221201d191413110d08020000000000000000000000000000050e171f252a2d2e30303030302d2c29241e160d04000000000000000007111921272c2f30303030302f2e2b26201910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9d9083908d8079716d686a6a696e747e8b949e9c908376675c5145382c1f1306000000000000000000000000000000040a0f1215151717171717171717171717171717171717171717171717171717171717171717171413110d08020000000000000000000007101920283035383f4446494b4d4d4d4d4b4847433c383c4042464646463e3c39332c241a1005000000000000000000000009111a1f272f34383a404547484949494746423d3c3a414547484848484745413a31281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2e3133333333332f2e2b261f180f06000000000000000000000000000000000000000000000000000007111c252d353a3e3f404040403b3a37312a21180e03000000000000000000000000000000000000000000000007131f2b36404a52585a6060606060606060606060606060606060606060606060605f504a42382e23170c0000000000000000000910191d262d3337393f4446484a4b4c4c4b4a4846443f3938332d261d17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c252d353a3e3f404040403b3a37312a21180e0300000000000000070c101213171717171717171414110e0802000000000000000000000000000001070d111314171717171717171312100c060000000000000000000000070c10121317171717171717171717171717171717171616151413110d080705010000000000000000000000000000000000050d141a1e2021232323232321201d19130c0400000000000000000000070f161b1f22232323232322221f1b150e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d978a7e85918d847e7a787777787b808b909ba0958b7e7164554b4034281c10040000000000000000000000000000000000030608090a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a070705010000000000000000000000050f19222a323a41464a50535558595a5a595855534e4644484d4e535353534a49453e362c22170c000000000000000000000000080d151d23292c2f34383a3c3d3d3c3b3a36302f2f35393a3b3b3b3b3a39352f281f160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a11181e2225262626262622211e1a150e06000000000000000000000000000000000000000000000000000000000a131c232a2e3133333333332f2e2b261f180f060000000000000000000000000000000000000000000000000b1723303c47525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5c544a3f34281c10030000000000000009121b222b2f383f4446495053555758585857575553504946443f382f27221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2e3133333333332f2e2b2620180f06000000000000000000000406070a0a0a0a0a0a0a08070502000000000000000000000000000000000000010406070a0a0a0a0a0a0a0706030000000000000000000000000000000406070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0908070704010000000000000000000000000000000000000000000002090e11141417171717171413110d0801000000000000000000000000040a0f131516171717171615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d978a7d7d8792918b8684838485888d929ba0989184796d6053473a2e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17212a343c444c52545c6062656667676664625f58535053595b60606060575550483e33281c1105000000000000000000000000030b12181c1f23292c2d2f30302f2e2d2a252324292c2d2e2e2e2e2d2c29241e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e09030000000000000000000000000000000000000000000000000000000000010a11181e2225262626262622211e1a150e06000000000000000000000000000000000000000000000000000d1a26333f4c58646e7479797979797979797979797979797979797979797979797976665c5044382c1f120600000000000008111b242c343d41495053535b606163646565646362605b5353504a423e332d261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a11181e2225262626262622211e1a150e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0a0a0a0a0706040100000000000000000000000000000000030709090a0a0a0a09080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d978a7e717e8791969291909092979a9f9c9691867c6f675c5145382c1d120700000000000004090e111213131313130a09070400000000000000000000000000060b0e1011131313130c0b0906010000000000000000000000000000000000000000000009141f29333c464e565e61666d6f7273747473716e6a65605c5d65686c6c6c6c64615a5045392d2114080000000000000000000000000001070c1013181c1f202223232321201e1a16191d20212121212121201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c0d0d0d0d08080602000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e090300000000000000000000000000000000000000000000000000000e1a2734414d5a677480868686868686868686868686868686868686868686868686786d6053463a2d2013070000000000040d1a232c363e464e535b6063656c6e7071727271706e6c6564605b544f443f382f261b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e09030000000000000000000000000000000000000000000000020507080a0b0c0d0e0e0d0c0c0a0806060300000000000000000000000000000000000000000000000000010507071313131312110f0c070100000000000000000000000003080b0d0e1313131313130c0b090601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7e71707c848b8f929896969598928f8a847c6f6a5f554b4034291c0b000000000000080f151a1d1f2020202020171614100b05000000000000000000040b12171b1d1e20202020191816120d070000000000000000000000000000000000000000020e1a25303b454e585f686d73797c7e808080807e7b77726d66656f7579797979716c6155493c3023170a0000000000000000000000000000000004070c101314151616161414110e090d111314151515151413110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c0d0d0d0d08080602000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d9393939393939393939393939393939393939393939386796d6053463a2d20130700000000010c161f2c353e48505860656c7075797b7d7e7f7f7e7d7b7975716c666159504941382d22170b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c0d0d0d0d08080602000000000000000000000000000000000000000000010407080e1114141618191a1a1a1a1919171513120f0b0605020000000000000000000000000000000000000002080d111314202020201f1e1b18130c0500000000000000000001080f14181a1b202020202020191816120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7e726a6f787e8286888989898885827e786f6a5f584e43392f23180c000000000009121920262a2c2c2d2d2d2d2323201c16100800000000000000050e161d23272a2b2d2d2d2d2525221e1811090100000000000000000000000000000000000005121e2a36424d575f6a6f7a8085888b8c8d8d8c8b88847e786e697581868686867e7164574a3e3124170b00000000000000000000000000000000000000040607090a0a0908070502000104060708080808070604010000000000000000000000000000000000000000000000030506080b0d0d0e0e0d0b0907060300000000000000000000000000000000000000000000000000000004090d0f0f131313130e0d0b0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d9a9fa9a19e959494949494949494949494949494949386796d6053463a2d2013070000000008131e28313d47505a616a6f787d8185888a8b8b8b8a8a8885827d78706b605b53493f332721160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314191e20212325262627272726252422201f1c1714120e090300000000000000000000000000000000050c13191d20212d2d2d2d2b2b28241e170f0600000000000000020b131a202427282d2d2d2d2d2d2525221e18110901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265666d7176797b7c7c7c7b7976716d665f584e463c31271d12070000000008121b242b3136383939393939302f2c27211a11080000000000040e1720282e3336373939393932312e29231b13090000000000000000000000000000000000000714202d3a46525e696f7c848c929798999a9a999796918b837b6e75828f9393897d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131518191a1b1a1918161312100c06000000000000000000000000000000000000000000000002091015191b1c202020201b1a17140e0801000000000000000000000000000000000000030506090b0c0c0b0a07060401000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d99a3a19792888787878787878787878787878787878786786d6053463a2d201307000000010d19242f3a434f59616c717c838a8e929896979898979697928f8a847d736c655b50443d33271c10040000000000000000000105070713131313130d0c0a070200000000000000000000000000000206080813131313130c0b0906010000000000000000000000000000000000000000000000000000000000000002080e13191d2021252a2d2e303233333434333332312e2d2b2822201e1a140f0a0400000000000000000000000000050e161e252a2d2e393939393837342f2921180f050000000000000b141d252b30333439393939393932312e29231b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f72655c6064666d6e6f706f6e6d6664605c544e463c342a1f150b01000000040f19242d353d424546464646463d3c38332c231a1005000000000b16202932393f4344464646463f3e3a342d251b11070000000000000000000000000000000005121e2b37424d57616e7b8591969e9c97928f8d8c8d8e929590847b76838f9c96897c6f6356493c30231609000000000000000000000000000000000000000000020507080a0b0c0c0b0908060300000000000000000000000000000000000000000000000000000002090e11171b1f20222426272727262522201f1c17110f0a0400000000000000000000000000000000000000030c141b212528292d2d2d2d2726241f1a130b02000000000000000000000000000000060b0f12131618181918161413100d070100000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c86929f9e92857b7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a76665c5044382c1f120600000004111d2935414c55616b717e8690959b9c96918f8e8d8e90959a9c96918880776c60594f44382c21160b0000000000000002080d11131420202020201a1917130e07000000000000000000000003090e1214152020202020191816120d070000000000000000000000000000000000000000000000000000000000050d14191e24292c2d3036393b3d3e3f404141403f3f3d3b3938332d2d2a251f1b150d080100000000000000000000020c16202830363946464646464544403a332b21170c010000000007111d262f363c40414646464646463f3e3a342d251b11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f72655853545c606263636261605c5453504a423c342a22180d03000000000915202b353f474e5253535353534a48443d352c21160b00000006121d28323b444b4f51535353534c4a463f372d23180d010000000000000000000000000000000714212d3a46535f6975828f97a19c928c8582807f8082858a9190837983909d95897c6f6256493c2f2316090000000000000000000000000000000000000002090e11141417181919181515120f0a03000000000000000000000000000000000000000000000000070c141a1b22272b2d2f313334343433312f2d2c28231c1b160e090200000000000000000000000000000000020c151e262c313536393939393433302b241d140b01000000000000000000000000020a11171b1f2023242526252320201d18120e09030000000000000000000000000000000000000000000000000000000000000815222e3b4754606a727f8c939e978f82776d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d685c544a3f34281c10030000000613202c3945515d67707d8792989d948f89848281818284878d93999a938c7f736b6054483d32271b0f030000000000050c13191d20212d2d2d2d2d2626231f19120a010000000000000000060e151a1e21222d2d2d2d2d2525221e181109010000000000000000000000000000000000000000000000000000060e171f252a3035393a3e414647494b4c4d4d4d4d4c4c4a4846443f3b3a36302b262019130c0400000000000000000008131e28323a4146535353535352504c453d33291e1307000000030c19232f3841484c4e5353535353534c4a463f372d23180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c4a5053555656565553504a46443f38302a2218100700000000000e1a26313d4751595e5f6060606056554f473d33271c100400000b17232e39444d565b5e60606060585651493f34291e12060000000000000000000000000000000815222e3b4855616e7b87939f9c928c80797573737375797e84908c8083909d95897c6f6256493c2f231609000000000000000000000000000000000000050d14191e2021242525252422211f1a15100b050000000000000000000000000000000000000000030b12181f252a2d3337393b3e40404141403e3c3a38342e2b27201a140d0500000000000000000000000000000009141e2730373d414246464646413f3c362f261d13080000000000000000000000020b141b22272b2d2f31323232302d2c29241d1a140d05000000000000000000000000000000000000000000000000000000000006131f2b37434e58626d75828f969e948c7f726b61616161616161616161616161615e564a42382e23170c000000000714212d3a4754606d7a8592999d928d827c7875747475777b818792999f93877d7063594f44382c20130700000000050e161e252a2d2e393939393933322f2a241c130a00000000000000060f1820262b2e2f393939393932312e29231b1309000000000000000000000000000000000000000000000000020a1117202930363a4145474b4d5254565859595a5a5a5958575553504a4846423b373229241e160d0500000000000000010d1925303a444c525f606060605e5c574f453a2f24180c0000000b151e2b35414a53595b606060606060585651493f34291e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f4446484949494846443f3a38342e261e181007000000000000111d2a36424e59636a6c6c6c6c6c6361594f44382c20140700020e1b27333f4b565f676a6c6c6c6c65625b51463a2e2216090000000000000000000000000000000d192633404c5966737f8c9aa1978c80736d66676667666d717a83908685929f95887c6f6255493c2f2216090000000000000000000000000000000000050e171f252a2d2e31323232312f2e2b26201c161008000000000000000000000000000000000000040c151c23283036383f4446484b4c4d4e4d4c4b4946443f3837322a251f170f070000000000000000000000000004101b26303942494d4f535353534e4c4741382f241a0e03000000000000000000000a141d262d3337393c3e3f3f3e3d3a39352f2a251f170f0800000000000000000000000000000000000000000000000000000000030f1b27323d46515b606d7a8491999f92877d6f685e535454545454545454545454524c443830261c110600000004101d2935404b556673808c979e958d80786f6b68676768696e747e87929f999083766b6054483b2f221508000000020c162028303639464646464646403f3b352e261c12070000000000030e18212a31373a3b46464646463f3e3a342d251b110700000000000000000000000000000000000000000000020b141c2228323b41464c525457565e616365666667676666656461605b5454524d47433c352f281f170f0500000000000005111d2a36414c565e6c6c6c6c6c6b6861574c4034281b0f030007121d27303d47535d64676c6c6c6c6c6c65625b51463a2e22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f383a3b3c3d3c3b3a38342e2c28231c150c0600000000000000121f2c3845525e6a757979797979706b6155483c2f2316090004101d2a36434f5b67717779797979726d62564a3e3125180b0000000000000000000000000000030f1b27333f49536975828f9c9e9185796d605c5459545c60686d7a85929297a295887c6f6255493c2f22160900000000000000000000000000000000020d17202930363a3b3d3e3f3f3e3c3a37312c28211a110900000000000000000000000000000000040d161e272e343b42464950535557595a5a5a59585553504a47433d363029211910070000000000000000000000000915212c37424c545a5c606060605a58524a41362b1f140800000000000000000006111b262f383f4446494b4b4c4b4947454039363129211a1209010000000000000000000000000000000000000000000000000000000a16202b343f45525d686f7c87929f9991847a6d655b504747474747474747474746413a32261e150a0000000006131f2c3845515d6778848e8f919083786d6660595b5a575e616c727f8c969f95897c6f6356493c2f24190d01000008131e28323a41465353535353534d4b4740382e24190e02000000000915202a333c42474853535353534c4a463f372d23180d010000000000000000000000000000000000000000000a141d262d333f444d52565d606468686e707172737474737272706e6c6665615e57534e45413a312921170d0400000000000713202d3946525e6876797979797873685c5044372b1e1105000c18232e39424f59646f74797979797979726d62564a3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f322d2f30302f2e2d2b28231f1c17110a03000000000000000013202c3946535f6c7987868686867d7063564a3d3023170a0004111e2b3744515e6a7784868686867f7265584c3f3225190c000000000000000000000000000005121f2b3744505b657885919e9a8e8174675d514b4c4a50565e68717e8a96a1a995887c6f6255493c2f2216090000000000000000000000000000000009141f29323b4246474a4b4c4c4b4847433c38332c231b12090000000000000000000000000000030c161f28303940444d52535b60626466676767666462605c54544e46423b332b2319100700000000000000000000000d1925313d49545e65696c6c6c6c67645c52473c3024170b0000000000000000000b17222d384149505356575859585653514b46423b332c241b1309000000000000000000000000000000000000000000000000000000040f19222935414c56606a727f8c939e968f82776c60594f443a3a3a3a3a3a3a3a3936302820150c03000000000714202d3a4753606d797f818384877e71665c544f4e4e4d525a606d7984919e9a8d817467554c4135291d110400010d1925303a444c525f60606060605957524a40352a1f1307000000020e1a26313c454e53556060606060585651493f34291e1206000000000000000000000000000000000000000006111c262f383f4450565e61686d7175787a7c7e7f808080807f7f7d7b7976726e69625f58514c433b332920160c01000000000714212e3a4754616d7a8686868685786b5e5245382b1f120005101c2834404b54606b74818686868686867f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252223232322201f1c1712100c060000000000000000000013202c3946535f6c7986929393897d7063564a3d3023170a0004111e2b3744515e6a77849193938b7f7265584c3f3225190c00000000000000000000000000000613202d394653606c7986939f988b7e7265554b40403f444c56606d7984919ea295887c6f6255493c2f221609000000000000000000000000000000020e1925303b444d5254575858585755534e48443e352d241b0f06000000000000000000000000000b151e28313a424a51575e61656c6e717373747473716f6d66626058524d453d352b22190e04000000000000000000020f1b2835414d5a65707579797979746e64584c3f33261a0d0000000000000000030f1b27333f49535b60626465656563605d55534d453e362d251b110800000000000000000000000000000000000000000000000000000007101924303a444e58626d75828f969e948c7f726b60564c41382d2e2e2e2e2e2d2a251e160e03000000000006131f2c3845515d676d7274767879786d6054555554535049505c6673808d999d908477675d5145392c2013060005111d2a36414c565e6c6c6c6c6c6c66635c52473b2f23170a00000006121e2b37424e575f6c6c6c6c6c6c65625b51463a2e22160900000000000000000000000000000000000000040d17222d38424a505a62686e737a7e818587898b8c8c8d8d8d8c8b8a8885837f7b766f6a605d554d453b32281e1308000000000714212e3a4754616d7a8793939185786b5e5245382b1f12050e1b242c3845515c666f7d8893939393938b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f322519161616151312100b060300000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000714212d3a4754606d7a879aa4968a7d7063574a3d2f343a44505c6673808d9aa295887c6f6255493c2f22160900000000000000000000000000000005111e2a36424d565e616465656564625f58554f473f372d21180e03000000000000000000000007121c27303a434c545c60696e73787b7e7f8081807f7e7c79746f6a615e574f473d342b20160c020000000000000000030f1c2936424f5c697582868686868074675a4e4134271b0e010000000000000005121f2b3744505b656c6f71727271706d67615e5750483f372d231a0f0500000000000000000000000000000000000000000000000000000008131e28323d46515b606d7a8491999f92877d6f685e53493f332721212121201d19130c0500000000000004101d2935404b555d60666769676d6d666061626261605b53535463707d89969f93867a6d6054473a2d211407000713202d3946525e68767979797979736e63574b3f3226190c0000000814212e3a47535f6a767979797979726d62564a3e3125180b000000000000000000000000000000000000010c161f28333f4a545b606c717b80868a8e9297969899999a9a999998979892908c87827c746d675e574d443a2f24190d040000000714212e3a4754616d7a87949e9185786b5e5245382b1f120c17202b37424d57606d7984919aa49f9f988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a77849199988b7f7265584c3f3225190c0a090807060300000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000814212e3b4754616e7a8794a196897c6f6356493c3028343f4a5464717d8a97a295887c6f6255493c2f2216090000000000000000000000000000000714202d3a46525e696e70717272716f6a63615951493f332a1f150900000000000000000000000c18232e39424c565d666d737b8084888a8c8d8d8d8c8b8885817c756e6960594f463d32281e13080000000000000000030f1c2936424f5c6975828f93938d8174675a4e4134271b0e01000000000000000613202d394653606c777c7e7e7f7e7c7a746e69615a51493f352c21170d020000000000000000000000000000000000000000000000000000020c16202b343f45525d686f7c87929f9991847a6d655b50443d32291d141413110d080200000000000000000c18242f39434b5153595b575f6166676d6e6f6f6e6c6564605c616d7a8799a499887b6e6255483b2f221508000714212e3a4754616d7a8686868686807366594d4033261a0d0000000815222f3b4855626e7b86868686867f7265584c3f3225190c00000000000000000000000000000000000007131d28313a44505b666c747e868d92989b9e9a96989291909090919298979b9c9a938f8781796e695e564c41352920150a0000000714212e3a4754616d7a87949e9185786b5e5245382b1f08131e29323a47535f69737f8c95a0acaaa5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a77848c8c8c8b7f7265584c3f3225190c00000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f232e3c4855626f7b8895a295887c6f6255493c2f2216090000000000000000000000000000000814212e3b4754616e7b7d7e7f7f7e7b77706b625b51453c31261a0e0200000000000000000004101c2834404a545d686d7880868d91969799989798999797928e89827b6f6b60584e443a3025190d0300000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000714202d3a4753606d79868a8b8c8b8986817b716c625b51473e33291f1409000000000000000000000000000000000000000000000000000000040e19222935414c56606a727f8c939e968f82776c60594f443a2f261b110605010000000000000000000007121d27313940454b545c60696e73777a7b7c7c7b7976716d66606c7986939f96897c6f6356493c30231609000714212e3a4754616d7a879393938c807366594d4033261a0d0000000815222f3b4855626e7b889393938b7f7265584c3f3225190c0000000000000000000000000000000000010d18242f3a43505a606c78818b92989f9e96918d898785848483848485888a8e92979f99938e837b6e685d52453d32271b0f0300000714212e3a4754616d7a87949e9185786b5e5245382b1f0d1925303a44505a626e7b86929f9e9b9ea5988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727f7f7f7f7f7c6f6256493c2f23160900000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222e3b4854616e7b8794a195887c6f6255493c2f2216090000000000000000000000000000000c1926333f4c5966727f8a8b8b8b8a88847d726d62574d42372b1e12060000000000000000020d17202c3844515c666d7a828c92989e95908d8b8a8b8c8f92999b938f857d6f6a60564c4135291f140900000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000714202d3a4753606d7a869398989898928e867e726d625a50453b30251a0e0400000000000000000000000000000000000000000000000000000007101924303a444e58626d75828f969e948c7f726b60564c41382d22170e050000000000000000000000010b151f28343f4a545c666d737b7f83868788888785827e79706b657885929f968a7d7063574a3d3024170a000714212e3a4754616d7a87949f998c807366594d4033261a0d0000000815222f3b4855626e7b88959f988b7f7265584c3f3225190c000000000000000000000000000000000004111d2935404b55626c74808d939f9f96918a84807d7a787777767778797b7d81858c92999f9591847a6d60584e43372b1f130600000714212e3a4754616d7a87949e9185786b5e5245382b1f151f2a36414c56626c76828f989e938e939e988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313d4a56626d72737373736f6a6054473b2e22150800000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000c1926333f4c5966727f8c989898979591887f72695f53473a2e211408000000000000000008141f2b37434e58606d78828f949f96918984807e7d7e7f83868e939c9792867c6f685e52463b31261a0e02000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000714202d3a4753606d7a868f8f9092999f9892887f726c61574d42362a21160a0000000000000000000000000000000000000000000000000000000008131e28323d46515b606d7a8491999f92877d6f685e53493f332720170b0200000000000000000000040e18222c3844505c666d787f868c909594959598928f8b847d736d7885929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000613202c3945515d67717e8b929d9f948f847e7973706e686b6a6a6a666c6e71747a80879297a0968e81756a6054473b2e22150900000714212e3a4754616d7a87949e9185786b5e5245382b1f1d27313946525e68717e8b949f948e818e9b988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222e3a45515b6265666666666260584e43372b1f130600000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000c1926333f4c5966727f8c8f90939aa09a92867b6e6255483b3025190d01000000000000020e1925303b47535f6a73808c949f9591847d777372717173767b818c929c9891847a6d61574d42362a1e1205000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000713202d3a4653606d7983828283868c92999a93887e70695e52463d32271b0f04000000000000000000000000000000000000000000000000000000020c16202b343f45525d686f7c87929f9991847a6d655b50443d32291d140a000000000000000000000a15202c38444f59606d78818c92989d9c9691908f8f9196918a80737885929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000714202d3a4753606d7985919e9f958f827a716d6663615e565d5d545b606164686d737d85929f9e93897c6f6256493c30251a0e02000714212e3a4754616d7a87949e9185786b5e5245382b18242f39434f59616d7a85929e988f827e8a97988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d29343f495156585959595956544e463d32271b0f0300000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000c1825323f4b5865727f838284879297a1988d807467564c41362a1d110500000000000005111e2a36414d56626f7c87929f9891837a706b6665646566696e757f8c939e968e8174695f53463a2d211509000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000006131f2c3845515c666d767675767a808792989a92857b6e61594f43382c20160a00000000000000000000000000000000000000000000000000000000040e19222935414c56606a727f8c939e968f82776c60594f443a2f261c11060000000000000000030f1b26323c4855616b74818e939f9c948f8984838282858990928c7f7885929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000005121e2a36424d5766727f8c97a1999083796d68605c5454524d51504a505355565d606b717e8a959f9b8e817468574d42362a1e1205000714212e3a4754616d7a87949e9185786b5e5245382b1d2935404b55606b75818e979f92867b7e8b98988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232d373f454a4b4c4c4c4c4947433d342b20150a0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000b1724313d4a56626d727676777c85929e9e918478685e5246392d2013070000000000000714202d3946525e6875828f999f92867b6e686059585758565e616d75828f999f92877b6e6155483c31261a0e020000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000004101c2834404b545c606a6968686d737d869299978f82756b6054483d32271b0f020000000000000000000000000000000000000000000000000000000307101924303a444e58626d75828f969f948c7f736b60564c42382d22170e050000000000000006131f2b37434e5863707d8a939d9c928d827c78767576787d838d92877c85929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000714212d3a46535f69778490989b92877c6f675d56504a47464144433f4446484c5259616c7783909d9e928578695e52463a2d201407000714212e3a4754616d7a87949e9185786b5e5245382b262f3845515d67707d89939e958c7f727f8c98988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b242d343a3d3f404040403c3b37322b22190f040000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000915222e3a45515b62656a696a727f8c98a196877a6d6154473a2e2114070000000000000814212e3b4754616e7b86929f9a8d8074695f564f4b4a4b4d525b626e7b87929f998d807366574d42372b1e12060000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0100000000000000000c18232e39424b51535d5c565d606b707d87929f93897c6f63584e43382b1f140900000000000000000000000000000000000000000000000000040a0f1315161e28323d46515b606d7a8491999f92877d70685e544a3f332820170b020000000000000815212e3b47535f6a7683909d9f948d80766f6a6968696b7078808d908385929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000815222e3b4855616e7b87898c8e8e81756a5f554c443f3b3936302d3338393b4145505a66727f8c99a197877b6e6154483b2e211508000714212e3a4754616d7a87949e9185786b5e524538222d38414e58606d7984919e99908378737f8c99988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b23292e3132333333332f2e2b2720191007000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000005111d29343f485156585d58626f7b8895a895887c6f6255493c2f2216090000000000030f1b27333f495366727f8c99a095877b6e61574d433f3e3e4247535f6a76828f9c9e918478695f53473a2d2114080000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000007121d273039404546504f4c5259606b73808c969c8f82766a6054473b30251a0e000000000000000000000000000000000000000000000000070f161b1f222325252b343f45525d686f7c87929f9991857a6d665b50443d32291d140a0000000000000916222f3c4955626f7c88959f9c8f82776c6260585c5960666c74808d909297a2978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000714212d3a46535f69767a7c7f81847d7063584e433a342e2d2a2522282b2d2f353e4a5764717d8a97a995897c6f6256493c2f231609000714212e3a4754616d7a87949e9185786b5e52453827333f49535f6a73808d969f93877c6f73808d99988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181d2224252626262623221f1b150f0700000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f221609000000000000000000000000000000010c18232d363f454a4b5053606d7a869aa496897c706356493d3023160a000000000005121f2b3744505b6576838f9c9d908477695e53453b31313037424e5765727f8b98a196887b6e6155483b2e2215080000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000000000b151e272e34383a434341454f59606d7984919e94897c6f62574d42362a1c11060000000000000000000000000000000000000000000007101920272b2e2f3131313135414c56606a727f8c939e978f82786c60594f443b2f261c110600000000030f1c28333f4a546673808c99a096897c6f655b544e4f4f545b606d7984919ea2a9978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0505050815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000005121e2a36424d575f686d70727577706b6155463c31282320202123282c2d32383e4a5764707d8a97a396897c706356493d3023160a000714212e3a4754616d7a87949e9185786b5e5245382b3744505b656f7c87929f968d80746a74808d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c11151818191919191615130f0a040000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000006111b242d343a3d3f4653606c7986939f96897d7063564a3d3023170a00000000000613202d394653606c7885929f9a8d807467574d42332a2426313c4855626f7b8899a4978b7e7164584b3e3125180b0000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000030c151d23282c2d372f353d45515c67717e8b979b8e8275695e5246382d22170b000000000000000000000000000000000000000000040f19222b32373b3c3e3e3e3e3e3e444e58626d75828f969f948c7f736b60564c42382d22170b0400000006121f2b3844505b667683909c9d9184776b6053494342424a515c67717e8a97a1a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a121212121215222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000020e1a26313b454d565d606365686b6361594f44342a2124292c2d2e34383a3d4448505a65727f8c98a895887b6f6255483c2f221509000714212e3a4754616d7a87949e9185786b5e52453836414d56606c778390999e91847a6d6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0c0d0d0d0d0908060300000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f221609000000000000000000000000000000000009121b23292e313744505b657986929f96897d7063564a3d3023170a00000000000815222e3b4855616e7b8897a2988b7e7165584b3e312518202d3a4653606d7986939f998d8073665a4d4033271a0d0000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0100000000000000000000030b12181c1f202a242934404b55606d7985929e92867b6e61544a3f33281c0f0300000000000000000000000000000000000000000a16202b343d4347494b4b4b4b4b4b4b4b515b606d7a8491999f92877d70685e544a3f332821160a0000000613202d394653606c7985929f9a8d817467594f41382f38404b55606d7985929ea4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261e1e1e1e1e1e1e222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000009141f29333b444c525456595b5e57554f473e332d2e2f35393a3d404446494f545a616c7683909ca095877a6d6154473a2e211407000714212e3a4754616d7a87949e9185786b5e5245313946525e68727f8b959e938a7d70676774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000000000911181d2227333f495f6c7986929f96897d7063564a3d3023170a00000000000a1724303d4a5763707d8a96a996897c706356493d3023161f2c3845515c677784919e9b8e8175685b4f4235281c0f0000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000000000070c1013131d19232f3945515d6773808d9a998c7f73665b5044382b1f130800000000000000000000000000000000000000030f1b27323d464e5456585858585858585858585d686f7c87929f9991857a6e665b50443d32271b0f0300000815222e3b4855616e7b8898a2978b7e7164584b3e2f262f3944505c6674818e9aa4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d40332b2b2b2b2b2b2b2b2b2f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000030d172129323a414547494c4f514a48443e3535393a3e4145474a4a5153565960636c717e8a949f9d918477685e5246392d201307000714212e3a4754616d7a87949e9185786b5e524539434f59616e7b85929f988f82756c616774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a0f0f0f0e0d0b070300000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988c7f7265594c3f3226190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000060c1117222d46535f6c7986929f96897d7063564a3d3023170a00000000000b1824313e4b5764717e8a97a195887b6e6255483b2f22151c2834404b556a7683909d9c8f8376695c504336291d100000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000000000000004060708121d2c38434e5865727f8b989e9184786c6053463a3025190d0100000000000000000000000000000000000006131f2b37434e5860626464646464646464646464646a727f8c939e978f82786c60584e43382c1f130700000a1623303d495663707d8996aa96897c6f6356493c302328343f4a5464717e8b97a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4038383838383838383838383b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000000060f1720282f35393a3d3f42443d3c383a3b4146474a4c515456545c6063666b70767e87929fa3988d807366564c41362a1d1105000714212e3a4754616d7a87949e9185786b5e5245404b55616b75818e979f92867b6e615a6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101316161c1c1c1a1a17130e08010000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d998c7f7266594c3f3326190600010000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000113202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1825323f4b5865727e8b98a194877b6e6154483b2e211518232e43505c6976838f9c9d9083776a5d5044372a1d110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0100000000000000000000000000000000000915222e3b4854606a7783909da196897d7063564c4135291d11050000000000000000000000000000000000000815222e3b4754606a6f717171717171717171717171717175828f999f948c7f736a6054483b2e22150900000b1824313e4b5764717e8a97a194877b6e6154483b2e21232e3c4855626f7b8895aa978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d454545454545454545454545454855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000000060d161e24292c2d30323532383b4246484c525457555d606366666d6f73777d828b9299a39f92867a6e6154473b3025190d01000714212e3a4754616d7a87949e9185786b5e524545515d67707d8a939e958b7f72695e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161c2022232929292726241f1a130b0200000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d998c807366594d402e23170c0f0d0a05000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1926333f4c5966727f8c99a094877a6d6154473a2e21141c2936424f5c6975828f9c9d9084776a5d5144372a1e110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000000000000000000000004111d2935414c56626f7c8995a0a89b8e8175685e5246392d20150a0000000000000000000000000000000000000916232f3c4956626f7c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7f86929f9f93877c6f6256493c2f23160900000c1925323f4c5865727f8b98a093867a6d6053473a2d20202d3a4753606d7a8698a3978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665951515151515151515151515151515155626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000000040c13191d20212930363d44484d5354565d616467676d707376797c8084898f949fa39f928b7f72685e5246392d1e130800000714212e3a4754616d7a87949e9185786b5e52424e58606d7984919e999083786c60575a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111921272c2f303636363433302b241d140b01000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d9a8e817467544a3f34281c1d1c1915100a0300000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1926333f4c5966727f8c99a094877a6d6154473a2e21141c2936434f5c6976828f9c9d9084776a5d5144372a1e110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000000000000000000613202c3945525d6874818e9ba39f9f92867a6d6154473c32271b0f0100000000000000000000000000000000010e1b2734414e5a6774808b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b9299a3a4998b7e7165584b3e3225180b00000c1926333f4c5966727f8c99a39986796d6053463a2d20202c3945515d677986929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000000000001081019222b333b42464f54575e6166686d7174777a7d808385898d91959c9f9f98928c80746d62564c41362a1e0c0200000714212e3a4754616d7a87949e9185786b5e524a545f6a73808d969f92877c6f665b505a6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232b32383b3d424242413f3c362f261d1308000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d9c908376665c5044382c28292826211b140d04000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1925323f4c5865727f8b98a194887b6e6155483b2e22151d2a3643505d697683909c9d9083776a5d5044372a1d110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e00000000000000000000000000000000000714212d3a4754606d7a86929f999299998b7f7265584e43372b1d120700000000000000000000000000000000010e1b2734414e5a6774818d9797979797979797979797979797989c9c9c9c988b7e7165584b3e3225180b00000c1926333f4c5966727f8c999f928679665c5044382b1f1d2935404b556c7885929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c80736b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000000000000030c18222b343d454d52596063696e72767a7d818386898c8f9298999da09e99928e867f746e645b51443b3025190e0000000714212e3a4754616d7a87949e9185786b5e52505c666f7c87929f968d80736a5f544a5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d4448494f4f4f4d4c4740382f241a0e030000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d9f9285796d6053463b31343635322d261f160d030000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000b1825313e4b5864717e8b97a295887b6f6255483c2f22151d2935404b556a7783909d9c8f8276695c504336291d10000000000000071c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0902000000000000000000000000000006131f2b37434e5865727f8b98999286929d9083776a605447392f23180c00000000000000000000000000000000010e1b2734414e5a6774818d8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8b7e7165584b3e3225180b00000c1926333f4c5966727f8c999f938679675c5145382c1f1d2a36414c566c7885929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807878787878787878787878787878787878787878787c8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000000000a151e2a343d464f575e616b6f757b7f83868a8d909399999c9fa09d9997928d86817c726d645c52493f32291e14080000000714212e3a4754616d7a87949e9185786b5e4d57606d788390999e9184796d60584e4e5a6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27323d474f54565c5c5c5a58524a40362b1f13070000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919da298897c6f63574d43414143423e3830281f140a0000000000000815212e3b4854616e7b87949c95887c6f6255493c2f222d3a4754606d7a87939c95887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000a1723303d4a5663707d8996aa96897d7063564a3d3023171f2c3845515d677885919e9b8e8175685b4e4235281b0f00000000030b12182936424f5c6975828f9c9a8d8174675a4e4134271e1a140d05000000000000000000000000000815222e3b4754606a7783909d9387808c9995887c6f62554b4034291c1004000000000000000000000000000000000c1825323f4b5865727f828282828282828282828282828282828282828282827d7063564a3d3023170a00000c1926323f4c5965727f8c98a49986796d6053463a2d20202d3946525e687986929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a09f928584848484848484848484848484848484848484848484919ea5988b7f7265584c3f3225190c000000000000000000000000000000000000000006111c26303c464f5960696e757c82878c9093999a9d9f9f9d9a9795908d8985807b756e6a635b524a41372d20170d020000000714212e3a4754616d7a87949e9185786b5e525e69727f8b959e93897d70675d51464e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f59606369696967645c52473c3024170b0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919da79a8e8174695f554e4d4e504e49423a30261b100500000000000815212e3b4854616e7b878f8f8f887c6f6255493c2f222d3a4754606d7a878f8f8f887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000815222e3b4855616e7b8898a2988b7f7265584c3f32261b202d3a4753606d7a86939f998d8073665a4d4033271a0d000000030c151c232836424f5c6975828f9c9a8d8174675a4e41342d2a251f170e05000000000000000000000004111d2935414c55626f7c89959c90827a86929a8d8174675c5145382c1f1409000000000000000000000000000000000b1824313d4a56626d7275757575757575757575757575757575757575757575706b6054483c2f22160900000b1825323e4b5865717e8b98a093877a6d6054473a2d21212e3a4754616d7a8799a3978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a297929191919191919191919191919191919191919191919196a1a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000c17232e38424e58606b6f7b82898f939a9d9f9f9c999992908d8a8784807c79746e69625f58514941382f251b0e05000000000714212e3a4754616d7a87949e9185786b5e5a616e7b86929f978e81756b60554b404e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b70757575746e64584c3f33261a0d0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919da09590867b6e675f585a5b5c5a544c42382d21150a00000000000714212e3a4754616d7a82828282827b6e6155483b2e222d3a4753606d7982828282827b6e6155483b2e22150800000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000713202d3a4653606d7985929f9a8e817467584e43372b2628303c4855626f7c889aa4978a7e7164574b3e3124180b0000000b151e272e3438424f5c6975828f9c9a8d8174675a4e413b3a36302920170d02000000000000000000000613202c3945515d6774818e9a998b7f75828f9c9285796d6053473b31251a0e000000000000000000000000000000000915222e3a45515b6265696969696969696969696969696969696969696969696360594f44382c20140700000a1724313d4a5764707d8a97a195887b6e6255483b2f22232f3c4956626f7c8995ab978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9da0a8a5988b7f7265584c3f3225190c0000000000000000000000000000000000000003101c28343f4a545f6a6f7d858f939c9f9f9b9992908c898683807d7a77736f6d66615e57534e463f372f261d130900000000000714212e3a4754616d7a87949e9185786b55616c75828f989e92857a6d61594f43414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d8282828074675a4d4134271a060000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005111e2b3844515e6b7784919e9d90839083796f6a68676769665e54493e3226190d00000000000713202d3946525e686d75757575756e695f53463a2d212c3945515d676d75757575756e695f53463a2d21140700000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000006121f2b3844505c6676828f9c9e9184786a5f54473d37313438424e5865727f8c98a196887b6e6155483b2e221508000007121c2730394044464f5c6975828f9c9a8d8174675a4e484746423b33291f1409000000000000000000000714212d3a4754606d7a86929f92867a717e8a98978a7e7164574d42362a1c110600000000000000000000000000000005111d29343f495156585c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c56544f473d33271c100400000916222f3c4955626f7c8895a8968a7d7063574a3d2f232935404b5565727e8b98a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a197919090909090909090909090909090909090909090909195a0a5988b7f7265584c3f3225190c0000000000000000000000000000000000000006121f2c3844505c666f7c8592979e9f99938f8a86837f7c7a7673706d686663605c54534d47433c332d251d140b0100000000000714212e3a4754616d7a87949e9185786b5d67717e8a949e948b7e71685e52473d414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b8f8f84776b5e51442d22170b0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005121e2b3845515e6b7884919e988b7e8b90837c777474747670665a4e4235281c0f000000000005111d2935414c565e616969696969615f574d42372b1e2935404b555d606969696969615f574d42372b1e120500000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000003101c28343f4a5465727f8c99a196887c6f62594f47434240454a545f6a76828f9c9e918478695f53463a2d21140700000c18232e39424a5153555c6975828f9c9a8d8174675a555554524d453b30251a0e02000000000000000006131f2b37434e5865727e8b989c8f82766d7985929c8f8276695e5346382d22170b000000000000000000000000000000010c18232d373f454a4b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4a48443d352b21160b0000000714212d3a4754606d7a8796a1988c7f7265554b4034292f3845515d6775828e9ba4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a09e918583848484848484848484848484848484848484848484919da5988b7f7265584c3f3225190c000000000000000000000000000000000000000713202d3a4653606d78839197a19d949087827d7a7673706d676764615e565653504a46423b37312a211e1a140d0500000000000714212e3a4754616d7a87949e9185786b606d7a84919e988f82766c62564c4135414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c989185786b5e4a3f33281c0f0300000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005121e2b3845515e6b7884919e94887b84919088838180818276695c504336291d100000000000010d1925303a444c52545c5c5c5c5c55534d453c31261a242f39434b51535c5c5c5c5c55534d453c31261a0e0200000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000b17232e3b4754616e7b86929f9b8f82756b6059534e4e4b51545c666f7c88949f9a8d807367574d42372b1e12050004101c2834404a545c6061616975828f9c9a8d817467616161615e574d42362a1e110500000000000000000815222e3b4754606a7783909d998b7e716774818e9b93877b6e61544a3f33281c0f0300000000000000000000000000000006111b242d343a3d3f424242424242424242424242424242424242424242423d3c38332b231a0f050000000713202c3945525d687884919e9c8f8275675c51453a3539414c55606d7a85929fa4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807777777777777777777777777777777777777777777c8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000005111e2a36414c5665727e8b95a09d938e827c75716d676663605d555754524c4946443f3f3d3a3936302d2a251f170f05000000000714212e3a4754616d7a87949e9185786b6a74808d969f92867b6e615a50443a30414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99928579665b5044382b1f120600000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005121f2c3845525f6b7885929e94877b7e8b9595908e8d8e86796c5f5346392c201300000000000008131e28323a4146474f4f4f4f4f4846423c332a1f141d2831394045474f4f4f4f4f4846423c332a1f14090000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000614202d3a46525e6975818e989e93897d706b625f585b545c60666d78828f9c9f93877b6e6155483c31261a0e020006121f2c3844515c666d6e6e6e75828f9c9a8d81746e6e6e6e6e695e52463a2d2014070000000000000004111d2935414b55626f7c89959f92867a6d63707d8a979a8c8073665b5044382b1f13080000000000000000000000000000000009121b23292e313236363636363636363636363636363636363636363636302f2c27211a11080000000004111d2935414c566875818e9b9f9285796d60564c4541444b535d67727f8b98a2a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c80736a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000714202d3946525e687783909da0958e81786f6a64605d555653514b4a4746413c4347484c494746413b3a36312921170d030000000714212e3a4754616d7a87949e918478666f7c87939f958c7f73695f53483e3234414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9a9386796c605346392d20130600000000000000000000000000000000000000000013202c3946535f6c7986929c96897d7063564a3d3023170a0006121f2c3945525f6c7885929c93877a788390969d9b9a9286796c5f5346392c2013000000000000020c1620283035393a42424242423b3a37312a21180e161f282f35393a42424242423b3a37312a21180e030000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000005111e2a36424d57616e7b86929f9f92867d746e6a696868666d7078818e949f978e8174695f53463a2a1f140900000713202d3a4653606d797b7b7b7b828f9c9b8e817b7b7b7b7b7b6e6154473b2e211408000000000000000613202c3945515d6774818e9a9b8f827568606d7985929e9184786c6053463a3024190d01000000000000000000000000000000000911181d222425292929292929292929292929292929292929292929292322201c160f080000000000010d19242f3e4b5764717e8a98a2988b7f72685e56514c51555c656d7a85919ea1a9978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000814212e3b4754616e7a86939f9d9083786d665f5854514c494745403d3a393c464e5355585654524c4846423b33291f14090000000714212e3a4754616d7a87949d9184776d788390999a9083786d60574d42362d34414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9a9a877a6d6054473a2d21140700000000000000000000000000000000000000000013202c3946535f6c79878f8f8f897d7063564a3d3023170a000613202c3946535f6c79868f8f8f86796e7b848e9298969286796c5f5346392c201300000000000000040e161e25292d2e36363636362e2d2b261f180f060d161d24292c2d36363636362e2d2b261f180f06000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000020e1a25303b46535f69727f8c939f989287807b7776757576797d838e939d9791857a6e61574d42372b180e0300000815222f3b4855626e7b888888888f949f9e938e88888888888276695d5043362a1d10000000000000000714212d3a4754606d7a85929f978a7d71645c6674818e9a96897d7063564c4135291d11050000000000000000000000000000000000060c111518181c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c171614100b05000000000000000814202d3a4753606d7985929f9e91847a6d68605d555c60676d77818e919197a1978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665951515151515151515151515151515155626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000916232f3c4956626f7c899aa4978b7e71665c544e4745413d3a39352f2e37434e585f626563615e5654534d453b31251a0e0200000714212e3a4754616d7a87949d908377727f8c959f93887c6f665c51453c312734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875818e9b94877a6e6154473b2e2114080000000000000000000000000000000000000000000f1c2935424f5c687582828282827c6f6255493c2f22160900030f1c2936424f5c6975828282828175696e7a818588898987796c5f5346392c20130000000000000000040c13191d2021292929292922211e1a140e0600040c12181d2020292929292922211e1a140e0600000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000009141f2b37424d57626d74818d939a99938d888482818283858a90959f9691857d6f685e52453c31261a060000000815222f3b4855626e7b889494949c9fa6a59e9b94949494908376695d5043362a1d1000000000000006131f2b37434e5865727e8b989e9285796d605463707d89979b8e8175685d5246392d20150a0000000000000000000000000000000000000105090b0c0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0a0907040000000000000000000613202c3945515d6773808d97a19690827a716d6769666d7179818e918585919e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d444444444444444444444444444855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000a1724313d4a5764707d8a97ac95887c6f62544a423c39352f2d2c2929303947535f6a6f72706d6869615e574d42362a1e120500000714212e3a4754616d7a87949d9083767b86929f978d81746b60544a40332a2734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9b95887b6e6255483b2f2215080000000000000000000000000000000000000000000f1b2834414d5a656f75757575756f6a5f54473b2e22150800020f1b2834414d5a657075757575756f65686d74797b7c7c7a756154473b2e21140800000000000000000002080d1113141c1c1c1c1c1514120e090300000001070d1013141c1c1c1c1c1514120e09030000000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000000020e1a26313c45515b606c78808890959a9a96918f8e8e9092989b98928d847c6f6b60564c41332a1f14090000000815222f3b4855626e7c888f8f8f9297a1a196918f8f8f8f8f8376695d5043362a1d100000000000000815222e3b4754606a7783909d9a8d8074665c53606c7884919e92867a6d6154473c32261b0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616d7a8592999f9490847e7a777677797d838e938b7e83919d978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4037373737373737373737373b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000a1724313d4a5764707d8a97ab95887b6e6255483c3731323131322f353a424d57626f7c7f7d7a78766e695e53463a2d21140700000714212e3a4754616d7a87949c8f8376828f989e91847a6d60594f42392e212734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9c95887c6f6255493c2f2216090000000000000000000000000000000000000000000c1925313d49545d656869696969625f584e43372b1f130600000c1925313d49545d656969696968655d5e61666d6f706f6e685e5246392d2014070000000000000000000000010507070f0f0f0f0f0807050200000000000000010406070f0f0f0f0f0807050200000000000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000009141f2a333f44505b666c737d83898d9093999696959597928f8b86807a6f6a60594f443b3021180e030000000815212e3b4854616e7b8282828285929e9e918482828282828073665a4d4033271a0d000000000004111d2935404b55626f7c8895a095887c6f6254505b6674808d9a988b7f7265584e43372b1d120700000000000000000000000105070713131313130d0c0a07020000000000000000000000000000000000000000000000000000000000000000010d18242f3946525e68707d8792999f96918b86848383858a91948e817683909d978a7e7164574b3e3124180b000714212e3a4754616d7a8794a0998c807366594d40332a2a2a2a2a2a2a2a2a2f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000916232f3c4956626f7c8999a396897d7063584e4743403f3e3e3e3f41454c545e6974808b898785827b6e6154483b2e21150800000714212e3a4754616d7a87949b8f827e8a949e948a7e71685d52463d30271c2734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a3743505d6a7683909d96897c706356493d3023160a0000000000000000000000000000000000000000000915212c37424b545a5c5c5c5c5c55544e463c32261b0f0300000915212c37424b545a5c5c5c5c5c595452545c60626363615e564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000030e182128333f4a545b606b6f767c80848688898989888785827f7a736d685f584f463d32291e0f06000000000714202d3a46525e696e75757575828f9c9a8d807575757575736e63584b3f3226190d00000000000613202c3945515d6774818e9a9d9083776a5f534a54636f7c89969d9083776a5f5447392f23180c00000000000000000002080d11131420202020201a1917130e07000000000000000000000000000000000000000000000000000000000000000007121d2a36414c56606b717e8790959a9e99929190909298928c827976838f9c978b7e7164584b3e3125180b000714212e3a4754616d7a8794a0998c807366594d4033261e1e1e1e1e1e1e222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000714212d3a4754606d7a86929f9a8d80746a5f58534e4d4b4b4a4b4c4c52565d666e7b869296979184796c605346392d20130600000714212e3a4754616d7a87949c8f8285929e988f82756c61564c41342b1e152734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a3744515d6a7784909d968a7d7063574a3d3024170a00000000000000000000000000000000000000000007131f2b36404a52585a5a5a5a5a55534e453c31261a0e02000004101b26303942494d4f4f4f4f4f4d49464a505355565654524c443b3025190e020000000000000000000000000000000005080a0b131313131313070604000000000001060b0e111113131313130d0c0a070200000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000060f17222d38424a505960636b6f74777a7b7c7d7c7b7a7975726d68615d564e463d342b20170d000000000005121e2a36424d575e6169696975828f9c9a8d81746969696966635c52473b2f23170a00000000000714202d3a4753606d7a85929f988b7f7265584e4653606c7884919e95887c6f62554b4034291c100400000000000000050c13191d20212d2d2d2d2d2626231f19120a01000000000000000000000000000000000000000000000000000000000000010d1925303a444f59616c717c838a8e919794959992908c867f786d75828e8f8f8b7e7265584b3f3225180c000714212e3a4754616d7a8794a0998c807366594d4033261a111111111115222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000613202c3945515d6776838f9c9f92867c6f6a625f58595858575859565d60686d78828f98a2978d8073665b5044382b1f120600000714212e3a4754616d7a87949f938692979f92867b6e615a50433a2f22191b2734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b3845515e6b78849196968a7e7164574b3e3124180b0000000000000000000000000000000000000000000b1723303b47525c646767676767625f574e42372b1e120600000009141e2730373d414242424242413d383f44464849494746413b32291e1408000000000000000000000000000000060c111417182020202020201413100c070100040c12171b1d1e20202020201a1917130e08000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000006111c262f383f444f5459606367676d6e6f706f6e6d6c6565615e56524c443c342b22190e050000000000020e1a25303b454d52545c5c6975828f9c9a8d8174675c5c5c5a58524a40362a1f13070000000006131f2b37434e5865717e8b989f92867a6d60544744505b6573808d9a9a8d8174675c5145382c1f1409000000000000050e161e252a2d2e393939393933322f2a241c130a0000000000000000000000000000000000000000000000000000000000000008131e28323d47505a616a6f787d81858687888886837f7a726c66727f828282827e7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0404040815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000004111d2935414b5564717d8a949f9891847c746e6a6866656464656567686d727a818f949f9f92857a6d61544a3f33281c0f0300000714212e3a4754616d7a8794a49a939a9f958b7f72695e52483e31281e101b2734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885898989897e7165584b3e3225180b0000000000000000000000000000000000000000000d1926333f4c58646e73747474746e6a5f53473a2e211408000000020c151e262c3134363636363534312e34383a3c3d3c3b3936302920170d0200000000000000000000000000000810171d2123242d2d2d2d2d2c201f1d18120b030e161d23272a2b2d2d2d2d2d2726231f19120a0200000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000000000000000a141d262d333d43484f5456555d60626363626261605b5354524c46413a322a221910070000000000000009141f29333b4246484f5c6875828f9b9b8e817468564c504f4d49423930261b1004000000000815212e3b47535f6a7783909d9b8e8175685d52453f4953626f7c88969f9285796d6053473b31251a0e0000000000020c162028303639464646464646403f3b352e261c1207000000000000000000000000000000000000000000000000000000000000020c16202c353e4850585f666c7074787a7b7b7b7a77736e6860626d7275757575716c6155493c3023170a000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000000010d18242f3a4955616c76828f96a0969186817b777573727171717274767a7f848f939e9e938b7f72685e5242382d22170b0000000714212e3a4754616d7a8794a0a49fa3999083786c60574d42362c1f160c1b2734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d7d7d7d7d7b6e6154483b2e2115080000000000000000000000000000000000000000000d1a2734404d5a677380808080807c6e6255483b2f22150800000000030c141b2125282929292929281c23282c2d2f30302e2d2a251e170e05000000000000000000000000000008121a22282d30313939393939392d2c29241d150d1820282e333738393939393933322f2a241c140a00000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000000020b141c222832383d4348494b51535556565655545350494746413a353028201810070000000000000000020d17212930363a414e5b6874818e9b9c908376685e565d5c59544b42372c21150900000004101d2935404b55626f7c88959f96897d7063564c413847545f6a7784919d978a7e7164574d42362a1c11060000000008131e28323a41465353535353534d4b4740382e24190e02000000000000000000000000000000000000000000000000000000000000050e1a232c363e464e545b606367676d6e6f6e6d6766615e565b62656969696964615a5045392d211408000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000007131d2d3945505a616e7a8490959f98928d888481807e7e7d7e7f8183868b91969e9f938e81776c60564c412f261c11060000000714212e3a4754616d7a8794a0a3a89f92877c6f665b50453b30241a0d0e1b2734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4854606b70707070706e695e53463a2d21140700000000000000000000000000000000000000000013202c3946535f6c79878d8d8d897d7063564a3d3023170a000000000002091015191b1c1c1c1c1c1b11171c1f2022232321201e19140d05000000000000000000000000000006101a242c33393d3e4646464646463a39352f271f15202a32393f43444646464646403f3b362e261c1208000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000020a111721272c32383b3c40454748494a49484746443f3a39363029241e160e0600000000000000000000050f171f252a33404d5a6673808d999f92867a6e68696a68655d54493d3125190c0000000613202c3945515d6774818d9a9e9184786c6053463a37434e586673808c999c8f8276695e5346382d22170b000000010d1925303a444c525f60606060605957524a40352a1f13070000000000000000000000000000000000000000000000000000000000000008111a242c343c424a505357555c60616261605c5554524c5156585c5c5c5c575550483e33281c1104000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000001111c28333e46525e686e7b838c92979d9a96918e8c8b8b8a8b8c8d9092999e9d98928b81796d655b50443a301d140a000000000714212e3a4754616d7a8794969696968d80736a5f544a3f33291f12080e1b2734414e5a6774818d96968b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f59606363636363615e574d42362a1e120500000000000000000000000000000000000000000013202c3946535f6c7986929a96897d7063564a3d3023170a0000000000000004090c0f0f0f0f0f0f0e060c1012131516161414110e08020000000000000000000000000000000c17222c363e45494b5353535353534745403931271d20323c444b4f5153535353534d4b4740382e24190e020000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000000000000060b161b21272c2f2f35383a3b3c3d3c3b3a3937332d2d2a251e19130c04000000000000000000000000050d141a24313e4a5764717d8a98a2998f827a777676756f65594d4134281b0e0000000714202d3a4753606d7985929f9a8c8073665b504438323c4855626e7b88959f93877b6e61544a3f33281c0f03000005111d2a36414c565e6c6c6c6c6c6c66635c52473b2f23170a000000000000000000000000000000000000000000000000000000000000000008121a222a2f383f44464a4b515354555553514b474641454a4b4f4f4f4f4a49453e362c22170c00000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000000000c17222a36414d565e696e797f858c909597999b9998979798989a9b999a93908c857f756d675c53493f32281e0b02000000000714212e3a4754616d7a87898989898984796d60584e42382d21170d000e1b2734414e5a677481898989897f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d474f54565656565654534d453b31251a0e0200000000000000000000000000000000000000000013202c3946535f6c7986929996897d7063564a3d3023170a00000000000000000000020303030302020000030607090a09080705020000000000000000000000000000000005111d28333e4850555760606060605f53514b43392f242933444e565c5e60606060605a58524a40362a1f13020000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000040a0f161b1f2224292c2d2f30302f2f2e2d2b2722201e19130d08020000000000000000000000000000020914212d3a4754606d7a86929f9f948f868383838175685c4f4235291c0f000006121f2b37434e5865717e8b989f93877b6e61544a3f332e3a47535f6a7783909d9a8c8073665b5044382b1f130800000713202d3946525e68767979797979736e63574b3f3226190c0000000000000000000000000000000000000000000000000000000000000000000810191d262d3338393d4045474848484745403b39363a3d3f424242423e3c39332c241a100500000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000000050e1925303b444d575e666d727a7f83878a8c8e8f90919191908f8e8c8a87837f7a726d605c554b41382d20160c00000000000713202d3a4653606d787d7d7d7d7d7d7b6e675d51463c2f261c0f05000815222f3b4855626e7c7d7d7d7d7b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d44484a4a4a4a4a4846423b33291f14090000000000000000000000000000000000000000000013202c3946535f6c79878c8c8c897d7063564a3d3023170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6a5d554b403529303b455660676b6c6c6c6c6c66635c52473b2f1f14090000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000000000000000000040a0f1315181d1f20222323232221201f1b1713110d080200000000000000000000000000000000000613202c3945525d6873808d949e9f9992908f908376695d5043362a1d1000000815212e3b47535f6a7683909d9c8f8376695f5342382d2b37434e5866727f8c999e9184786c6053463a3024190d01000714212e3a4754616d7a8686868686807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000070b141c22282b2d2f34383a3b3c3b3a38342f2d2a2e31323636363631302d28221a12080000000714212e3a4754616d7a879496968c807366594d4033261a0d0000000815222f3b4855626e7b889596968b7f7265584c3f3225190c00000000000000000000000000000000000000000008141f29323b454d545c60686d72767b7d7f8283838484848383817f7e7a77726d67625b514b43392f261b0e05000000000006121f2c3844515c666d7070707070706e695f554b40342a1d140a00000814212e3a47535f6a6e707070706e695e53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232b33383c3d3d3d3d3d3b3a36312921170d03000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4955616c7179797979797975675d5145392c36424d576772777979797979736e63584b3b30251a0e0200000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000000000000307070c10131415161716151413120f0b0605010000000000000000000000000000000000000004111d2935414c56606d78828b919697989897908376695d5043362a1d100004101d2935404b55626f7c88959f988b7e7164574d422f2626313c4855616e7b88959f96897d7063564c4135291d1105000714212e3a4754616d7a879393938c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f2023292c2d2e2f2e2d2c2923201e222425292929292423211c171008000000000714212e3a4754616d7a8789898989807366594d4033261a0d0000000815222f3b4855626e7b88898989897f7265584c3f3225190c000000000000000000000000000000000000000000020d172029333b424b51565e6165696e707375767777787777767473716e6865605d555145403930271d140a00000000000004101c2834404a545c60636363636363615f574d43392f22180b02000006121f2b37434e585f6263636363615e574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111921272c2f30303030302e2d2a251f170f0500000000000000000000000000000000000000000000000c1825323e4b57636d72737373736e695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e868686868687796d6053473a2d3a46525e6977848686868686807366574d42362a1e120500000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000000000000000000004060708090a0908070605030000000000000000000000000000000000000000000000010d19242f3a44515c666d787f84888a8b8b8a898276695d5043362a1d100006131f2c3945515d6774818d9a9f9285796d6053473b3120212d3a46535f697683909d9b8e8175685d5246392d201307000714212e3a4754616d7a87949f998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213181c1f20212222201f1c1814111517181c1c1c1c171714110c0500000000000713202d3a4653606d787d7d7d7d7d7b6e6155483b2e2215080000000714202d3a4753606d797d7d7d7d7d7b6e6154483b2e21150800000000000000000000000000000000000000000000050e172129303940454c5254575e61646668696a6a6b6a6a69686664615e5654514c433f342e271e150b02000000000000000c18232e39424a515356565656565655534d453c31271d1006000000020f1a26313c464e53555656565654534d453b31251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f161c2022232323232321211e1a140d050000000000000000000000000000000000000000000000000a16222f3b46515b636666666666615f574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e586874818e93939399897d7063564a3d2f3b4754616e7b8796939393908377695e52463a2d20140700000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2834404a545c666c72787b7d7e7e7e7d7a6e6154473b2e211408000714202d3a4753606d7985929c9a8e8174675d5145392c1f1e2a36424d5765727f8c9a9c92867a6d6154473a2e211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000306070c1013141515151413100c0705090b0c0f0f0f0f0b0a08040000000000000006121f2c3844515c666d70707070706e695f53473a2d2114080000000613202c3945515d676d70707070706e695e53463a2d2114070000000000000000000000000000000000000000000000050f171e272e343a4146474d525457595b5c5d5e5e5e5d5c5b595754524c4745413a3128231d150c03000000000000000007121c2730394044464a4a4a4a4a4a4846423c332a1f150b00000000000a15202a343c4347484a4a4a4a4846423b33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10131617171717171514120e09030000000000000000000000000000000000000000000000000006121e2a3540495157595959595955534d453b31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7885919e9ea1998d807366554c41353e4b5764717e8a97a19ea095877b6e6154483b2e23180c00000000000000000000000000000613202c3946535f6c7986929c96897d7063564a3d3023170a000000000000000106090b0c0c0c0c0c08070502000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e39424a545b6065696e70717171706e685e5246392d201407000b1825323e4b5865717e8b8f8f8f897c6f62554b4035291d1a26313b4754616e7b878f8f8f8b7f7265584c3f3225190c000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060708090807060400000000000003030303000000000000000000000004101c2834404a545c606363636363615f574d42372b1e120600000004101d2935404b555d606363636363615e574d42362a1e1205000000000000000000000000000000000000000000000000050c151d23283035393b4246484a4c4f505051515150504e4c4a4746413b39352f281f18120b03000000000000000000000b151e272e34383a3d3d3d3d3d3d3b3a37312a21180d030000000000030e18222a31373a3b3d3d3d3d3b3a36312921170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a0a0a0a0a08070502000000000000000000000000000000000000000000000000000000020d18232e3740464b4c4c4c4c4c4846423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88979791979d908376675d514539414c566774818e9a979197988b7e7165544a4034281c1004000000000000000000000000000613202c3946535f6c79868f8f8f897d7063564a3d3023170a000000000000060d12161819191919191514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000007121c273039424a5053575f616465656463615e564c41362a1e1105000d1a2633404d596673808282828281746a605443392f241814202d3a46525e697480828282828073665a4d4033271a0d000714212e3a4754616d7a8794a0998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a5153565656565655534d453c31261a0e02000000010d18242f39434b5153565656565654534d453b31251a0e0200000000000000000000000000000000000000000000000000030b12181e25292d30363a3b3d40424344444544444341403e3b3936302c29241e160d07000000000000000000000000030c151c23282c2d3030303030302e2d2b261f180f0600000000000000060f1820262b2e2f303030302e2d2a251f170f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353b3e3f404040403b3a36312921180d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b5566727f8c999185919892867a6d6054473a46525e687784919d9185919b8f8275665c5144382c1f120600000000000000000000000000020f1c2935424f5c687581828282827c6f6255493c2f22160900000000010911181e2224252626262622211e1a140e0600000000000000000000000000000000000000000000000000000000000000000000000000000b151e272f383f44464d5355575858575654524c443b3025190e02000c1925323f4b57636e7375757575746f64584e4331271d12111e2a36424d57646e7475757575736e63584b3f3226190c000714212e3a4754616d7a8794a0998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c2730394044464a4a4a4a4a4847423c332a1f1509000000000007121d2831394045474a4a4a4a4a4846423b33291f140900000000000000000000000000000000000000000000000000000000070c13191d20252a2d2e313335363737383737363533312e2d2a25201d19130c040000000000000000000000000000030b12181c1f2023232323232322211e1a140e06000000000000000000060e151a1f21222323232321211e1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2f3233333333332e2d2a261f180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6776838f998d808692998a7d7063574a3d4754616e7a8796968c7f8c999285796d6053463a2d20130900000000000000000000000000020f1b2834414d5a656f75757575756f6a5f54473b2e2215080000000009131b23292e3132323232322e2d2b261f180f0600000000000000000000000000000000000000000000000000000000000000000000000000030c151d262d33383c4246484a4b4b4b494746413b32291e140800000a16232f3b47525b63666969696968645d53463d321f150b0e1a25303b45525c64676969696966635c52473b2f23170a000714212e3a4754616d7a8794a0998c807366594d4033261a0d0a0a0a0a0a0a0a0a0a0a0a0a0a08080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3d3d3d3d3d3b3a37312a21180e030000000000010c161f282f35393a3d3d3d3d3d3b3a36312921170d03000000000000000000000000000000000000000000000000000000000002080d11141a1e2021242628292a2b2b2b2a2928262421201e1914110d08010000000000000000000000000000000000070c1012131717171717171514120e09030000000000000000000000030a0f121415171717171514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12181e2225262626262622211e1a140d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8692968a7d82909a8d807367564c414a5764717e8a9791847b879698897c706356493d30251a0e02000000000000000000000000000c1925313d49545d656869696969625f584e43372b1f130600000006111b252d343a3e3f3f3f3f3f3b3a37312a21180e0300000000000000000000000000000000000000000000000000000000000000000000000000030b141c22282b31373a3b3d3e3e3e3d3b3936302920170d02000007131e2a3540495257595c5c5c5c5b59534b41342b210d0309141f2933404a52585a5c5c5c5c5a58524a40352a1f1307000714212e3a4754616d7a8794a0998c807366594d4033261a17171717171717171717171717171514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d30303030302e2d2b261f180f0600000000000000040d161d24292c2d30303030302e2d2a251f170f0500000000000000000000000000000000000000000000000000000000000000000105090e12141517191c1d1d1e1e1e1d1d1b19171414110d0804010000000000000000000000000000000000000000000406070a0a0a0a0a0a08070502000000000000000000000000000000020608080a0a0a0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a9996877a7f8c99908377685d52464c566774818d9a8e817884919a8d807367574d42362a1e1205000000000000000000000000000915212c37424b545a5c5c5c5c5c55544e463c32261b0f030000010d18232d373f464a4c4c4c4c4c4846423c332a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f262b2d2e31323231302e2d2a251e170e05000000020e19242e3740474b4d4f4f4f4f4e4d4841392f22190f00020d17202f3840474c4d4f4f4f4f4d4b4740382e24190e02000714212e3a4754616d7a8794a0998c807366594d40332623232323232323232323232323232322211e1a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f20232323232322211e1a150e06000000000000000000040c12181d2020232323232321211e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000020507080a0d0f101111121111100e0d0b080705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d576774818d9a9184777c899893867a6d615447525e68778491988b7e75828e9b908477695e52463a2d2014070000000000000000000000000007131f2b36404a52585a5a5a5a5a55534e453c31261a0e02000006121e29343f495156585959595955534d453c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1e2122242525242321201e19140d05000000000007121c252e353b3f404242424241403c372f271d10070000050e1d262f363c3f4142424242403f3b352e261c120800000714212e3a4754616d7a8794a0998c807366594d4033303030303030303030303030303030302e2d2b261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10121317171717171514120e0903000000000000000000000001070d10131417171717171514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f697784919b8e8175798592998a7d7064574a54616d7a879597887b727e8b9895877b6e6154483b2e23180c000000000000000000000000000b1723303b47525c646767676767625f574e42372b1e120600000916222e3a46515b626565656565615f574d42372b1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141517181818161414110e0802000000000000000a131c242a2f3233363636363534302b251d150b000000000b141d242b3033343636363633322f2a241c140a0000000714212e3a4754616d7a8794a0998c807366594d403d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3b3a37312a21180e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0a0a0a0a08080602000000000000000000000000000000010406070a0a0a0a0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e1011131313130c0b090601000000000000060b0e1011131313130c0c0a06020000000000000000000000000105070712131313130f0e0c09040000000000000000000406071113131313120807050100000000000000000000000000000000000000000000000815222f3b4855626e7b8896988b7e7275828f9a8d807467564c5764717d8a979285786e7b8896988b7e7165544b4034281c10040000000000000000000000000d1926333f4c58646e73747474746e6a5f53473a2e21140800000b1824313e4a56626d72727272726e695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0b0b0b0a08070502000000000000000000010a12191e23252629292929282724201a130b0300000000020b13191f242627292929292726231f19120a020000000714212e3a4754616d7a8794a0998c807366594d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4847423c332a1f15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b12171b1d1e20202020191816120d07000000040b11171a1d1e20202020191816120d0700000000000000000002080d1113141f202020201c1b19151009020000000000070c1013131e202020201f1414110d0802000000000000000000000000000000000000000004101c2834404b5565727f8b9897887b6e727f8c98908477685e52566774808d9a8e82756a7884919b8f8275665c5145382c1f13060000000000000000000000010d1a2734404d5a677380808080807c6e6255483b2f22150800000c1925323f4c5865727f7f7f7f7f7b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e1316191a1c1c1c1c1b1a18140f090100000000000001080e13171a1a1c1c1c1c1a1917130e0800000000000714212e3a4754616d7a8794a0998c807366595656565656565656565656565656565656565655534d453c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161d23272a2b2d2d2d2d2525221e18110901050e161d22272a2a2d2d2d2d2625221e18120a01000000000000040c13191d20212b2d2d2d2d292825211b140c030000030b12181c1f202b2d2d2d2d2c21201e19140d050000000000000000000000000000000000000006131f2c3845515c6775828f9c918578696f7c889793867a6d61545d68778490988b7e726875818e9b9285796d6053463a2d20130900000000000000000000000613202c3946535f6c79878d8d8d897d7063564a3d3023170a0006131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070a0c0d0f0f0f0f0e0e0c08030000000000000000000003070b0d0e0f0f0f0f0d0c0a07020000000000000714212e3a4754616d7a8794a0998c8073666363636363636363636363636363636363636363615f574d42372b1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720282e3336373939393932312e29231b13090e1720272e3336373939393933322f2a231c130a0000000000040e161e25292d2e38393939393534312c261e150c00030c151d23282c2d3739393939382e2d2a251e170e050000000000000000000000000000000000000713202d3a4653606d7985929b8e8175686c7885929a8a7d716457616d7a869396887b6e64717e8b9798897d706356493d31251a0e02000000000000000000000613202c3946535f6c7986929a96897d7063564a3d3023170a0006131f2c3946525f6c79859298978a7d7064574a3d3124170a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80737070707070707070707070707070707070707070706e695f53473a2d21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393f4344464646463f3e3a342d251b1116202932393f4344464646463f3e3a352e251c1207000000020c1620283035393a454646464642413d3730271e12080b151e272e34383a4446464646453b3936302920170d0200000000000000000000000000000000000a1723303d4a5663707d8998988b7e72656575818e9a8d8174675664707d8a9a91847869616e7b87969a8d807367574d42362a1e1205000000000000000000000613202c3946535f6c7986929996897d7063564a3d3023170a0006131f2c3946525f6c7985929f978a7d7064574a3d3124170e0e0d0b0906050300000000000000000000000000000000000000000000000000000000000000000000000001040707090b0c0d0e0e0d0c0b09070704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8e817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d28323b444b4f51535353534c4a463f372d23181d27323b444a4f51535353534c4b463f372e23180d02000008131e28323a41464752535353534f4d49423930241a0e121d2730394045465153535353524746413b32291e14080000000000000000000000000000000005121e2a36424d576773808d9a97887b6e6265717e8b98918477695e6774808d9a8e8175685e697784919d918477695e53463a2d211407000000000000000000000613202c3946535f6c79878c8c8c897d7063564a3d3023170a0006131f2c3946525f6c7985929f978a7d7064574a3d31241a1a1b1a181513120f0b06000000000000000000000000000000000000000000000000000000000000000306080d1113141618191a1a1a1a1918161413110d0806040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938e898989898989898989898989898989898989898989898073675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39444d565b5e60606060585651493f34291e222e39444d555b5d60606060595751493f352a1e120600010d1925303a444c52545e606060605c59544b42362c201718232e39424b51535e606060605f54524c443b3025190d010000000000000000000000000000000714202d3a46525e697784919d9185786a5f616e7b879696877b6e6168778390988b7e7165576774818e9a95877b6e6154483b2e23180c00000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6155483b2e2215080006131f2c3946525f6c7985929f978a7d7064574a3d3124262727272522201f1b17110c07000000000000000000000000000000000000000000000000000000060b0f1213191d20212325262727272726242321201d191313100c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b9696969696969696969696969696969696969696968d8073675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1b27333f4b565f676a6c6c6c6c65625b51463a2e2227333f4a555f676a6c6c6c6c66635b51463a2f22160a0005111d2935414c565e616b6c6c6c6c68655d54483e32291e1e2834404b545c606a6c6c6c6c6b615e564c41362a1e11050000000000000000000000000000000815212e3b4854616e7b87959b8e817568575e69778491978a7e71646d7a869396887b6e615764717e8a97988b7e7265554b4034281c1004000000000000000000000c1825323e4b57636d72737373736e695f53463a2d2114070006131f2c3946525f6c7985929f978a7d7064574a3d313133343433322f2d2b27221b18120b030000000000000000000000000000000000000000000001070c11171c1f2024292c2d303233333434333331302d2c2924201f1c18120f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b9797979797979797979797979797979797979797978d8073675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2a36434f5b67717779797979726d62564a3e31252a36434f5b67717779797979726d63574b3e3225180c000713202d3946525e686d7879797979756f655a50443a302526303845515c666d7779797979786e685e5246392d201407000000000000000000000000000003101c28343f4a5465717e8b98988b7e726558576774818e9a8e817467707d8a99918478695f54616e7a87959c8f8275675c5145382c1f1306000000000000000000000a16222f3b46515b636666666666615f574d42362a1e12050006131f2c3946525f6c7985929f978a7d7064574a3d3b3e404141403e3c3937332d28231d150c060000000000000000000000000000000000000000030b12181c22282b2d3035393a3c3e3f404141403f3e3c3a3935302d2c28231d1a150e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8073675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784868686867f7265584c3f32252a3744515d6a7783868686867f7266594c3f3326190c000714212e3a4754616d7a858686868681756c61564c41362a2e38424e58606d788386868686857a6e6154473b2e211408000000000000000000000000000006121f2b3844505c6675828e9b97887b6e62555764717d8a9a9184776973808d9a8e81746857525e687784909d9285796d6053463a2d2013090000000000000000000006121e2a3540495157595959595955534d453b31261a0e020006131f2c3946525f6c7985929f978a7d7064574a47484b4d4d4e4d4b4846443f38342e271e180f06000000000000000000000000000000000000060d151d23292d3338393d414547494b4c4d4d4d4d4c4b494745413d3a38342e2b26201a150c07000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8f817e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a77849193938b7f7265584c3f32252a3744515d6a77849093938c7f7266594c3f3326190c000713202d3946525e68707d8a9293938a7e71685e52463e32343f4a545f6a73808c9593938a7d70685e5246392d20140700000000000000000000000000000713202d3a4653606d7985929e9285786a5f5354616d7a879396877b6e778390978b7e7164584c566774808d9a98897d7063564a3d31261a0e02000000000000000000020d18232e3740464b4c4c4c4c4c4846423b33291f1409000006131f2c3946525f6c7985929f978a7d7064574d535557595a5a5a5855535049454039302a21180f06000000000000000000000000000000030a11171f272f34383f4446494c52545658595a5a5a5a59575654524c4a4645403937312b262018120b0300000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80737171717171717171717171717171717171717171716f6a5f54473b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0005111d2935414c56616b74818e969e92857a6d615a50443a3844505c666f7c87929f968e81746c61564c41362a1e11050000000000000000000000000000091623303c4956636f7c89979b8e827568584e525e68778390978a7e717a869296877b6e61544a5764707d8a999a8d807367574d42362a1e12050000000000000000000007121c252e353b3e3f404040403b3a36312921180d03000006131f2c3946525f6c7985929f978a7d706457575f6264666767666562605b53514b423c332a21180d0300000000000000000000000000040c151c2328313940454a505356565d6063656666676766666463605d565753514b47433c373128231d150c06000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073666464646464646464646464646464646464646464625f584e43372b1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00010d1925303a444f59606d79849199978e81756c61564c41424e58606d78839099999184796d605a50443b3025190d010000000000000000000000000005111d2a36414c566673808c99988b7e7265584b4c566773808d9a8e81747d8999918477695e524754606d7a86939d918477695f53463a2d21140700000000000000000000000a131c232a2f3233333333332e2d2a261f180f0600000006131f2c3946525f6c7985929f978a7d70646065696e7173747473716f6c65605c544d453c332a1f150b010000000000000000000000040d161e262e343d434b51545b606367686d6f71727374747372716f6d686764605c55534e47423c342e271e180f070000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366595757575757575757575757575757575757575755544e463c32261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000008131e28323e45515d676f7c87929f938a7e71685e52464a545f6a737f8c959f92877c6f675d51473e32291e140800000000000000000000000000000713202d3946525e687783909d97887b6e6255484a5763707d8a99918477808c998e817467574d45525d687783909d95887b6e6155483b2f23180c0000000000000000000000010a12181e2225262626262622211e1a140d060000000006131f2c3946525f6c7985929f978a7d70666d72777b7e808081807e7c78726d665f574d453c31271d120700000000000000000000030c161f2830383f444f555c60666c7074777a7c7e7f808080807f7e7c7a7774706d67625f58534e454039302a2119110700000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4947433c342a20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000020c16202935404b55606a73808d959e91857a6d61594f505b666e7c86929f958c80736a60554b40352c20170d0200000000000000000000000000000714212e3a4754616d7a87939e9285786a5f53474753606d7a869293867a828f978a7e7164574b414c566673808d99988b7e7265554b4034291c1004000000000000000000000000070d12161819191919191514120e0903000000000006131f2c3946525f6c7985929f978a7d706e787f84888a8c8d8d8d8b88847f796e695f574d43392f23180c020000000000000000000b151e283139424a505960676d72787d808487898b8c8d8d8d8d8c8a898684817d79746e6a625f57514b433c332b23190f05000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3c3b37322a22190e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000040e18242f39434e58606d78839098978e81756b615657606c78839098989083786d60584e433a2f231a0e050000000000000000000000000000030f1b27333f495364717e8a9a9b8e827568584e4345515d677683909a8a7d859295877a6e6154473d4a5663707d89999c8f8275675c5145382c1f13060000000000000000000000000002060a0c0c0d0d0d0d080705020000000000000006131f2c3946525f6c7985929f978a7d707b838b919697979799999896918b837b6e695f554b4034291e1308000000000000000007121c273039434b545c606b70797e84898d9196969899999a9a9999979a93918e8a85817b756e6a605c554e453d352b21170d030000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4033313131313131313131313131313131312f2e2b2620191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000007121d28313d44515c666f7c86929f938a7d70685d5f69727f8c959f92867b6e665c50463d31281d110800000000000000000000000000000005121f2b3744505b6575818e9b988b7e7265584b3f404b5566737f8c998e818e97918477685e52463a4753606d7a86929f9285796d6053473a2d20140900000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c7985929f968a7d7b859095918d8b8a8b8c90959e9e9590857b6e675c51453a3024190d01000000000000040d18232e39424b555d666d747d848b91969a9e9c989694989292999496989b9d9a98928e87827b736d675f574f473d33291f14090000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d40332624242424242424242424242424242422221f1b150e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000010c161f2834404a545f6a727f8c949e91847a6d60656e7b86929f948b7f72695f544a3f342b1f160c000000000000000000000000000000000613202d394653606c7885929e97887b6f6255483c3c4956636f7c89989286929a8d817467564c413945515d677683909c98897d7063564a3d31261a0e02000000000002080d101213131313130a0a08040000000000000000000000000006131f2c3946525f6c7985929f978a7e8390918a84807f7d7e7f83899196a0979183796d60564c4135291d11040000000000010c161f2834404a545d676d78808991969e9f99938f8c89878685868687898b8e92979b9f9a938f8780796e6a60594f453b31251a0e0200000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4033262424242424242424242424242424242421201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000040d18232e39424e58606c77828f97968e81746b6c77829098978f82756d62574d42382e22190d04000000000000000000000000000000000916222f3c4955626f7c88979e9285796c605346393a4653606d7985929892989a8a7d7164574a3e35404b556673808c999a8d807467574d42362a1e120500000000060d14191c1f1f20202020171614100b05000000000000000000000006131f2c3946525f6c7985929f9b8f828f91847d777472717173777d849197a0958c8073685d5245392c201308000000000008131e28313a44515c666d79828d929e9f99928d87827f7c7a797979797b7c7e8185898e92999f99928d837c6f6b60574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403330303030303030303030303030303030302e2d29251e160e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000007121c27303c44505b656e7b85929f93897d70727f8b949e92857a6e615b51453c30261c10070000000000000000000000000000000003101c28343f4a5466727f8c999b8e8275655b5044373844505c6675828f9c9c9c93867a6d6154473a2f3c4956636f7c89989c918477695f53463a2d2114070000000810181f25292b2c2d2d2d2d2423201c1710080000000000000000000006131f2c3946525f6c7985929f9e938f91847a706c67656464666b707b85929e9f92857a6d6054473a2f24190d01000000010d19242f3a43505a606d78828f949d9e959086807b76726f6e6c66666d6e6f7275797c81868e939e9f9590857d6f695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3935302820160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000b151e27333f49535e69717e8b939e9184797b86929f938a7e70685e52493f332a1e150a000000000000000000000000000000000006121f2c3844505c6676838f8f8f8b7f726553493f33343f4a5465727f8c8f8f8f8f8377685e5246392d3a4653606d79868f8f8f887b6e6155483b2e221508000006101a222a303538393939393931302d28221a110800000000000000000006131f2c3946525f6c7985929fa59f93877c6f68615a585758596069717e8a96a0988b7f7265564c4135291d110400000004111d2935414c55616c74818e949e9e938f837b746e69656361605b5c60616365666c70757b818a9297a09792867b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4746413a32281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000030c17222d38414d57616c75818e97968e81828f98968e81746c61564c41372d21180c0300000000000000000000000000000000000713202d3a4653606d7881828282827b6e6155483b2d2e3b4855626e7b82828282827f7265564c41362c3845515c667380828282827d7063564a3d3023170a00020d18222c343b414446464646463d3c39332c231a1005000000000000000006131f2c3946525f6c7985929faa9b8e81756a5f56504c4a4b4f57606d7884919e9c908376685d5245392c2013060000000613202c3945515d67717e8a939d9f948f81796e6a615e575654535050535456545b6063696e757d859299a298887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736659575757575757575757575757575757575757575754524c443a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000006111b262f3b45505a616d7a85919e928e8f94999184796d605a50443b30251b0f0600000000000000000000000000000000000006121f2c3844505c666d75757575756e695f53473a2d2e3a47535f696e7575757575726d6256443a302834404b54636e7375757575706b6054483c2f2216090008141f2a343e464d5152535353534a49443e362c22170b000000000000000006131f2c3946525f6c7985929fa298897d7063584e443f3e3e44505c6673808d9a9f92867a6d6054473a2d211407000004101d2935404b55606d7a85919ea1978f82786d675f57524d49474644444648494a5053575e616b707b87929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366636363636363636363636363636363636363636363615e564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000a141d29333e46525e68707d8a929d9a9c9f93877d6f675d51483e32291e13090000000000000000000000000000000000000003101c28343f4a545c606869696969615f574d42372b2b37424d575f62696969696965625b51463228232e3942525c6366696969696360594f44382c201307000d1925303b4650585d5f60606060575550483e33281c10040000000000000006131f2c3946525f6c7985929f9f9285796d6053463c3231343f4a5463707d8a96a399897d706356493d3023160a00000613202c3945515d6773808d97a19e91857a6d665c554e46423c3b3938383a3b3c3f44464d535961697986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073707070707070707070707070707070707070707070706d685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000020b17212a36414c56616b74818e9aa7a49a8d80736b60554b41362c20170d0000000000000000000000000000000000000000000c17232e38424a50535c5c5c5c5c55534d453c312626313c454d53555c5c5c5c5c585651493f34201d2730404a52585a5c5c5c5c56544f473d33271c100400101c2935414d5862696c6c6c6c6c64615a5044392d2014080000000000000006131f2c3946525f6c7985929f9c8f8376665c5144382a232e3a4754616d7a8798a2988c7f7265594c3f3226190c00000714202d3a4753606d7985929f9f94897d70685e544b433c36302d3338393a3a3a3a3a3b42464f576c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8e817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000008131e28323a45515d67707c8996a39f93867b6e655b50443c30271d120700000000000000000000000000000000000000000006111c2630383f44464f4f4f4f4f4847423c332a1f202a333c4247484f4f4f4f4f4c4a463f372d23151e2e3840474b4d4f4f4f4f4a48443d352b21160b0000121f2b3844515d69747979797979706c6155493c3023160a0000000000000006131f2c3946525f6c7985929f9a8d817467544a403428202d3946525e687985929f9a8d8174675a4e4134271b0e0004111d2935414b5565727e8b97a29c8f82766b61564c4239312a2f383f44464747474747474747535f6c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a897d706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000050f1925303a444f59606d7984919d9d9e9a8f82776c60584e43392e23180d040000000000000000000000000000000000000000000a151e262e34383a42424242423b3a37312a211818212a31373a3b42424242423f3e3a342d251b0c1c262e363b3f40424242423d3c38332b23190f050000131f2c3946525f6c7986868686867d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988c7f7265594c3f2e231d2a36414c566a7784919d9b8f8275685c4f4235291c0f000613202c3945515d677683909ca0968a7d7063594f443a30272d38424a50535353535353535353535f6c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b96969696969696969696969696969696969696969696897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988c7f7265594c3f32262a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000020b17212a36414c56616b74808d9695909197948c7f726a5f554b4034281f160c010000000000000000000000000000000000000000030c151c23282c2d35363636362e2d2b261f180f0f1820262b2e2f363636363632312e29231b130a141c242a2f323336363636302f2c2721191108000000131f2c3946525f6c79859293938a7e7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988b7e7165584b3e322519253043505d6a7683909d9c908376695d5043362a1d10000714212d3a4754606d7a86929f9d9184786c6053463d322928333f4a545b60606060606060606060606c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87949696969696969696969696969696969696969696969696969696897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d998c807366594d402f242a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000a141d29333b46525e68707d8a9299908385919e92867c6f675c51453d31281e1308000000000000000000000000000000000000000000030a11171c1f20292929292922211e1a150e06060e151a1e212229292929292524221e181109020a12191f232627292929292322201c160f0800000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978a7e7164574b3e31241d293643505c6976838f9c9d9083776a5d5044372a1d11000a1724313d4a5764707d8a99a39a8d8073655b5044372c202b3844505b666c6d6d6d6d6d6d6d6d6d6d6d7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87898989898989898989898989898989898989898989898989898989897d706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9a8d817467554b4035292b3744515e6a7784919d998c7f7266594c3f3326190c0000000000000006111c262f3b45505a616d7a85919e93877c7e8a94989083796d60594f433a2f24190f0500000000000000000000000000000000000000000000060c1012131c1c1c1c1c1514120e0903000003090e1214151c1c1c1c1c191815120d06000000080e1317191a1c1c1c1c171613100b050000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978a7d7064574a3d31241c2936424f5c6975828f9c9d9084776a5d5144372a1e11000d192633404c5966737f8c99a9978a7d716453493f3327202d394653606c78797a7a7a7a7a7a7a7a7a7a7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9c908376675d5145392f2a36414c566b7884919e988c7f7265594c3f3226190c000000000000030d17222d38424d57626c75818f97968d807475828f98958d80736b60564c41352921170b0200000000000000000000000000000000000000000000000306070f0f0f0f0f08080602000000000000020608080f0f0f0f0f0c0b090601000000000002070a0d0d0f0f0f0f0a09070400000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978a7d7164574a3e31241c2936424f5c6975828f9c9d9184776a5e5144372b1e11000f1b2835424e5b6875818e9ba297877a6e6154473b2d2224303d4a5763707d8686868686868686868686868b98a395887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c666d70707070707070707070707070707070707070707070707070707070706d685d5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9f92867a6d60554b4038353946525e687985929f988b7e7165584b3e3225180b0000000000010b151f28333f4a545e69717e8b939e9184796d6e7b86929f93887d70685d52453e33291d140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978b7e7164584b3e31251d293643505c6976838f9c9d9083776a5d5044372a1d1100111d2a3744505d6a7783909d9e928578685e5246392d1b24303d4a5763707d8a93939393939393939393939fa3aa95887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c606363636363636363636363636363636363636363636363636363636363615d564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919da3988b7e71675d514a4541424754616e7a8798a2978a7d7164574a3e3124170b000000000007121d27313944505b666e7b86929f938a7d706769727f8b959a91847a6d605a50453b2f261b11060000000000000000000000000000000000000001040607090b0d0d0e0e0d0c0b08060603000000000000000000000000000000000000000002060a0c0c131313131308070502000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988c7f7265594c3f32261c28343f4a546a7683909d9c908376695d5043362a1d1000121e2b3845515e6b7884919e9e9184776b564c41362a1e24303d4a5763707d8a969b9b9b9b9b9b9b9b9b9b9b9b9b95887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000c18232e39424a5153565656565656565656565656565656565656565656565656565656565654524c443a3024190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919da79e9184796d605c54524c4d535a64707d8a97a399887c6f6255493c2f22160900000000040e18232f39434e58606c78829098978e81756b61606c78839099968e81756c61574d41382d22170c030000000000000000000000000000000004070d1113141618191a1a1a1a19171513120f0b060000000000000000000000000000000000070d1216181920202020201514120e090300000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9a8d8073675a4d4031261f2c3844505c667884919e9b8f8275685c4f4235291c0f00121f2c3845525f6b7885929e9d9083766a5d504330251924303d4a5763707d8a8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000007121c2730394044464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4746413a32281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9f95908d80746d66605d56575e616c76828f9c9f9286796d6053463a2d201307000000020c16202934404b555f6a727f8c949e92857a6d61595b666f7c87929f938a7e71695e53493f33271e150b0000000000000000000000000001070c1013181d202123252627272726262422201f1c17110f0a04000000000000000000000000010a12181e2225262d2d2d2d2d22211e1a140e06000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9c8f827569584e43372b202d3a4653606d7986929f9a8d8174675a4e4134271b0e00131f2c3946525f6c7985929f9c8f8276695c4f4336291c222f3c4955626f7c81828282828282828282828282828282817b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3935302820160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9d9083908d8078716d686a6a696e737e8b949f9c908376675c5145382c1f130600000008131e28323a45515c676f7c87929f948b7e71685e52545f6a73808c969f92857b6e655b50443c30271d12070000000000000000000000030b12181d1f24292c2d2f31333334343332312e2d2b28221c1b160e0903000000000000000000000a131c232a2f323339393939392e2d2b261f180f060000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9e9184786a5f53473a2f292d3b4855616e7b8899a3988c7f7265594c3f3226190c00131f2c3946525f6c7985929f9c8f8376695c504336291d212e3b47535f6a6f75757575757575757575757575757575756e695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d30303030303030303030303030303030303030303030303030303030302e2d29241e160e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b7784919e95897c84918d837e7a787777787b8088939fa0958b7e7164554b4034281c10040000010d1924303a444f59606d79839199988f82766c61564c4e58606d7984919a978f82776c60584e43392e23180c00000000000000000000090d151d24292c2f35393a3c3e40404141403f3e3b3938332d2c27211a140e06000000000000000007121c252e353a3e3f46464646463b3a37312a21180e0300000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa196887b6f62564c41383538424d5765717e8b98a399897d7063564a3d3023170a00121f2c3945525f6c7885929f9d9083776a5d504431261a1f2b37434e585f626868686868686868686868686868686868615e574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f20232323232323232323232323232323232323232323232323232323232321201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2b3845515e6b7884919e94887b7d8792918a8684838485878d939aa0989184796d6053473a2e23180c00000004111d2935414c56606b74808d959f92867b6e615a504445515c67707d88939f948c7f726a5f554b4034281c100400000000000000020b121b1f272f35393a414547494b4c4d4d4d4d4c4a4846443f3838322a261f180f07000000000000020d18232e373f464b4c53535353534846423c332a1f140900000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa9998d8073685d524945414449525e6975818e9b9f92867a6d6054473a2d21140700121e2b3845515e6b7884919e9e9184786b574d42372b1e1b26323c464e53555b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b54534d453b31251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000070c10121317171717171717171717171717171717171717171717171717171717171413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3845525e6b7885919c94877a717e8791969291909092979a9f9c9691867c6f675c5145382c1d12070000000713202c3945525d68707d88939c958c7f72695e53483e404b55606b74818e979c92867c6f675c5145382c1f1306000000000000010b141d242d31394045474b51545658595a5a5a5959575553504a48433d36312a21191007000000000006121e2a353f49515759606060606055534d453c31261a0e02000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa99e92857a6d605b53524c50535b616e7b86929f9d908376685d5245392c20130700101d2a3643505d697683909c9f928578695f53473a2d2115202a343c4347494f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4846423b33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a07070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2c3845525f6b78858f8f8f867a6d717d848b8f929996969598928f8b847c6f6a5f554b4034291c0b000000000714212d3a4754606d7a848f8f8f8f83786c60574d423639434f59606d7a858f8f8f8f83796d6053463a2d2013070000000000000a131d262f363e434b5153555d6062646666676766656461605b54544f46423b332b22190f06000000000a16222f3a46515b63666c6c6c6c6c6c5f574d42372b1e1205000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa197928e81746c65605d565c60656c74818e99a2978b7f7265564c4135291d1104000f1b2835424e5b6875818e9ba298887b6e6155483b2e231818222a32373b3c42424242424242424242424242424242423b3a36312921170d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875818282828275676b6f797e8286888989898885827e786f6a5f584e43392f23180c000000000b1825323e4b5865717e82828282827c6f665b50453b31303d45525d68707d82828282827d7064574a3d3124170a000000000006101c252f38414850555d6065676d6f71737374747372716e6c66636059534d453d342b21180e030000000c1825323e4b57636d72797979797976695f53463a2d211407000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9e9285928d8078716d686a666d70777f8c939e9f92857a6d6054473a2f24190d01000c1926333f4c5966727f8c99aa978b7e7164544b4034281b111820262b2e2f353535353535323a4145474946443f3a3935302a251f170f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1b2834414d59656f75757575756f6560676d7176797b7c7c7c7b7976716d665f584e463c31271d1207000000000b1724313d4a56626c7175757575756f6a5f544a3f33292935414c56616b707575757575706c6155493c3023160a00000000030e18222e37414a535a62676d72767a7c7e7f808080807f7d7b79746f6b615f574f473d332a2015090000000c1926333f4c5966727f86868686867b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988b7e87928d837e7a787778797d828c919c9f948c7f72685d5245392c1e130800000a1723303d4a5663707d8998a29a8d8174665c5145382d22170f151b1f21222828282824303a444c52545653504a4746413a322920170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925313d49545d656869696969655d555c6065666d6e6f706f6e6d6664605c544e463c342a1f150b01000000000915212e3a45505a62656969696969625f584e42382d21242f3a444f596163696969696964615a5044392d201408000000000a15202a344049535c646c71797f8386898b8c8d8d8d8c8c8a8885817c756e6960594f453c31261a0e0400000c1926333f4c5966727f8c939393887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006121f2b3844505b667986929f95887c7f8c93908a8785848486898f949c9f958f82786d60564c4135291d0c0100000714202d3a4753606d7986929f9e9285796d6053493f3327211913111315161c1c19212935414c565d6063605c5454524c443a32291e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212c37424b54595c5c5c5c5c5a544b5153545c606263636261605c5453504a423c342a22190d03000000000005111d29343f485056585c5c5c5c5c55534e463c2f261c1e28323e474f55575c5c5c5c5c575550473e33281c1004000000030f1a26313c46515b646e747e858b909299979999989899989797928e89827b6f6b60574e42372b20160a00000c1926333f4c5966727f8c999f94887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000613202d394653606c7986999c94887b77818c92999791919192999c9d99928d82796d665c50433a2f24190d00000006131f2c3845515d6775828f9ca1978a7e71655b50443c332925201d191c191d202429333c45525d686d706d6664615d564c443a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b26303942494d4f4f4f4f4f4d494045464a5053555656565553504a46443f38302a22191007000000000000010c17222d363f454a4b4f4f4f4f4f4847433c342a1d1416202c353e44484a4f4f4f4f4f4a49443e352c22170b0000000006121f2b37434e58636d74808b92979c9992908d8c8b8c8c8d9092999a948f857d6f6a5f53473d32271b0f03000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000714202d3a4753606d7a868f8f8f877a6d777f868d90939995959495908c8680796d675d544a3f31281e130800000004101d2935404b5564717d8a96a19d9083786c60584e453d35302c29242924292c30353d454f59606d7a7c7975716d685e564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141e2730373d414242424242413d34383a3f4446484949494846443f3a38342e261e181007000000000000000006111b242d343a3d3e42424242423c3a37312a22180b0d1a232c33383c3d42424242423d3c39332c231a1005000000000815212e3a47535f6a737f8c929e97928b8683817f7f7f7f8183868c92999792867c6e62584e43382b1f1306000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000714212d3a4754606d7a8282828282786c6c727b808486888989888684807b736d675d554b42382e1f160c01000000000c18242f3a4653606d7984919e9f958b7f726a5f574e46413a393530352f35393a41454e57606b74808985817e7a6d685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c151e262c313435363636363431282c2e34383a3b3c3d3c3b3a38342e2c28231c150c060000000000000000000009121b22292e313236363636362f2e2b262018100608111a21282c2f30363636363631302d28221a11080000000004111d2935414b55626f7c87929f9691857f7a76747372727374767a7f87929a989083766a6054473b2e221508000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000713202c3945525d686d75757575756c6660696e73777a7b7c7c7b7a77736e69605d554b433930261c0d04000000000007121f2c3844515c66727e8b95a09f92867c6f696058524c4745414242434145474c52586069707d8792928e8a867a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c141b212528292929292928251c1f23282c2d2f30302f2e2d2b28231f1c17110a030000000000000000000000000911171d212425292929292922211f1b150e0600000810161c20232429292929292423201c17100800000000000613202c3945515d6775828f999991847b726d67676665656667686d737d88939f95897c6f6256493c2f231609000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000004111d2935414c565d606969696969605b575e6166676d6e6f6f6e6d6766625f57514b433931281e150a00000000000004101c2834404a54606d78839099a39891847b6f6a615e5654524c4f4f4f4c5254565d606a6f7b8592999f978d8074685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002091015191b1c1c1c1c1c1b191013171c1f202223232322201f1c1712100c06000000000000000000000000000000060c111517181c1c1c1c1c1515120f0a0400000000050b101416171c1c1c1c1c171614100b050000000000000714212d3a4754606d7986909292877c6e69605d5559585959565d606b75818e9b9a8d8073675a4d4034271a0d000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000010d1924303a444c52545c5c5c5c5c53504d5254555c6062626261605d5555534d45403931281f160c03000000000000000c18232e3944505c666f7c87929fa09691847c736d6863605d565c5c5c565d6064686d737c859297a19a92857a6d61564c41362a1d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090c0e0f0f0f0f0f0f0c04060c10121315161616151312100b06030000000000000000000000000000000000000105090b0b0f0f0f0f0f0908060300000000000000000407090a0f0f0f0f0f0a0a080400000000000000000815212e3b4854616e7b8183868881746a5f57514b4c4c4c4c4c525965717e8b989c8f8275695c4f4236291c0f000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000008131e28323a4145474f4f4f4f4f46444246474b51535556565553514b4847423c352f271f160d04000000000000000007121c28343f4a545f6a717e8a919fa0969187807a74706d68696968696a686d70747a80879297a19f93887d70685e52443a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020203030303020000000003060708090a0908070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e696e7476797b7b6e61584e4541403f3f41464c5564707d8a979d9083776a5d5044372a1d11000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000000020c1620283035393a42424242423938363a3b404547484949484745403b3a373129241d150d04000000000000000000000c17232e38424e58616c727f8b9298a099928d86817d7a787675757676787a7d81868d9299a19f918c7f736b61564c4132291e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c1313131313130807050200000000000000000000000000000000000005121e2a36424d575e6167666d6f6e695e53463c3f4446494c52565d67727f8c999c908376695d5043362a1d10000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000000040e161e24292c2d36363636362d2b2a2d2f34383a3b3c3c3b3a39352f2e2b262018120b03000000000000000000000006111c26303c46505a626d727e8690959e9f98928e8a8684838282828385878a8e92989f9f97928b7f736d63594f443a3020170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0c0c0b0a0807050200000000000000000000000000000000000000000000000000000000000000000000070d121618192020202020201514120e090300000000000000000000000000000000020e1a25313b454d5354545c6062615e574d46484a505356565e61686d7984919e9b8e8175685b4e4235281b0f000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000000000040c13191d20212929292929201f1e2023292c2d2f2f2f2e2d2c2924211e1a150c0701000000000000000000000000000a151e2a343e48515b626c717c838b91979c9f9b9a9391908f8f8f909197979a9f9d99928e857e736d635b52473e32281e0e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141518191918171514120e0903000000000000000000000000000000000000000000000000000000000000010a11181e2225262d2d2d2d2d2d22211e1a140e060000000000000000000000000000000009141f29333b4246484a50535554534d4d5354545b606266686d727a828f96a0978b7e7164584b3e3125180b000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000000000002080d1113141c1c1c1c1c13121114181c1f2022232322201f1d1814120e0903000000000000000000000000000000030c18222c363f49515a626a6f787f848a8f9298989a9c9c9c9b9c9d9c9b999795918d86817b716c635b524940352c20160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e141a1e2121242525252421201e1a140f0a04000000000000000000000000000000000000000000000000000000000a131c232a2e31333939393939392e2d2b261f180f06000000000000000000000000000000030d17212931363a3b3f4446484d5254575e6165666c6f72767a7f858f949e9e92857a6d6054473a2d211407000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000000000000000010407070f0f0f0f0f060605070c101314151616151413100c07060200000000000000000000000000000000000006101b242d373f4850585f666d72797e8286898c8e8f9091919190908e8c8a8784807b756e69615a514940372e231a0e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191f252a2d2e31323231302e2d2a251f1b150e06000000000000000000000000000000000000000000000000000007111c252d353a3e3f4646464646463b3a37312a21180e03000000000000000000000000000000050f171f252a2d353d444c52565e6166696e7275797c7f83868c92979e9f928b7e71675d5145392c201306000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000000000000000000000000303030303000000000004060708090908070604000000000000000000000000000000000000000000000009121b252d363e464e545c60666d71757a7c7f8182838484848383817f7e7b77736e69615e56504840372e251c1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f252a31363a3b3e3f3f3e3d3b3a36302b2620181006000000000000000000000000000000000000000000000000010d18232d373f464a4c5353535353534846423c332a1f140900000000000000000000000000000000050d17202b353d474f565e61686e72777b7e8285898c8f92999e9f97928b80736c62554b4135291d1104000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b242d343c424a50545c6064676d6f7274767777787777767573716e6966615e57524d443e362e251c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e17202930363b4246484b4c4c4b4a4846423b37322a22180e04000000000000000000000000000000000000000000000006121e2a353f4951575960606060606055534d453c31261a0e0000000000000000000000000000000009141f29323d474f5960686e747b7f83878b8f9297999c9e9b97928d857e736e635a50433a2f24180d01000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000105070713131313131313131313131313131313131313131313131313131313131313130c0b090601000000000000000000000000000109121b222a30383f444a5153555d60636567696a6a6b6a6a69686664615e5754524d46423b322d241c130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c162029323b41464d5354575858585754524d47433c342a20150a00000000000000000000000000000000000000000000000916222e3a46515b63666c6c6c6c6c6c6c5f574d42372b1b11060000000000000000000000000000020e1925303b444f59606b707a81868c9095989b9f9c9897928e8a85807a716c635c52483f31281d130700000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000002080d1113142020202020202020202020202020202020202020202020202020202020202020191816120d0700000000000000000000000000000910181e262e34394044464b515356595b5c5d5e5e5e5d5d5b595754524d4846423b363029201b120a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323b444d52575e616465656463615e57534e463c32261b0f03000000000000000000000000000000000000000000000c1825313e4a57636d7279797979797976695f5346382d22170b000000000000000000000000000005111e2a36424d56606b707d858e92999d9e9a98928f8c8885817d79736d68625a524a40362d1f160c0100000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000050c13191d20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2525221e1811090100000000000000000000000000060c151c23282e34383a404547494c4e4f5051515150504e4c4b4846423b3a36302a251f170e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a444d565e61696e71727271706e69625f584e43372b1f120600000000000000000000000000000000000000000006131f2b37434e5866727f8686868686867b6e6153493f33271b0f03000000000000000000000000000714202d3a46525e69707d8791979f9e96918d8985827f7c7874706d67615e56504840382e241b0f050000000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000050e161e252a2d2e393939393939393939393939393939393939393939393939393939393939393932312e29231b13090000000000000000000000000000030a11171c23282c2f35393a3c3f414344444544444342403e3b3a36302d2a251f19140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565e686e757b7e7f7f7e7d7b786f6a5f53473b2e2115080000000000000000000000000000000000000000000815212e3b47535f6a778490939393938c8073655b5044372b1f1307000000000000000000000000000814212e3b4754616e7b859299a096918a84807c7975726f6c6564605c55524c443f3a36302921170d0300000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000020c1620283036394646464646464646464646464646464646464646464646464646464646464646463f3e3a342d251b1107000000000000000000000000000000060c12181c1f24292c2d303234363737383737363533312e2d2a25201e1a140e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686e7a82878a8b8b8b8a87857c6f6255483c2f221509000000000000000000000000000000000000000003101c28343f4a54626f7c88959f9d9f9e9184786c6053463a2f24180d01000000000000000000000003101c28343f4a546773808d97a09691847d7873706d666562605b53535453514b4f4846423b33291f140900000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000008131e28323a41465353535353535353535353535353535353535353535353535353535353535353534c4a463f372d23180d0100000000000000000000000000000000070c1012181d1f20232628292a2b2b2b2a2a28262421201e1a14120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55606d7a848f93979898979697897c6f6356493c30231609000000000000000000000000000000000000000006121f2b3844505c6673808d9a9590929996897d7063554b4035291d1104000000000000000000000006121f2c3844505c667784919e9d91847a706c6563605c54555350565d60605d555b54524d453b30251a0e02000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00010d1925303a444c525f6060606060606060606060606060606060606060606060606060606060606060585651493f34291e120600000000000000000000000000000000000004070c10131416191b1c1d1e1e1e1d1d1b19181514120e09050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6774818d969e9f9892908f91897c6f6356493c3023160900000000000000000000000000000000000000000713202d3a4653606d7985919d908387929b8e8174675d5145392c20140900000000000000000000000713202d3a4653606d7986939f978a7d7168605b5353514a4946525d686d6d676a68615e574d42362a1e1205000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0005111d2a36414c565e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e221609000000000000000000000000000000000000000000040607090c0e101111121111100f0d0b080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7985929f9f948f86838384877d6f6356493c302316090000000000000000000000000000000000000004111d2935404b5563707d8997988b7f82909c92867a6d6053473b31261a0e00000000000000000000000714202d3a4753606d7a8698a294877b6e61565049464444464e58606d7a7a7876756e695e52463a2d201407000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000713202d3946525e68767979797979797979797979797979797979797979797979797979797979797979726d62564a3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8998a29c8f827a76767779786d6053463a2d201307000000000000000000000000000000000000000613202c3945515d6775818e9b96887b7f8c99988b7e7164574d42362a1b11060000000000000000000006131f2c3845515d677985929f94887b6e61575350494a5153585f6a7581868583817b6e6154483b2e211508000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000714212e3a4754616d7a86868686868686868686868686868686868686868686868686868686868686867f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a297887c6f6869666d6d665c5145382c1f1306000000000000000000000000000000000000000714202d3a4753606d7a86929e9184777c88959c908376695f5346382d22170b0000000000000000000004101d2935404b556a7783909d988b7e716962605b53545c60636a6f7c8792929085796d6053463a2d201307000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c79859299978a7d7064574a3d3124170a000714212e3a4754616d7a879393939393939393939393939393939393939393939393939393939393938b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b989f9285786a5f565c60605c544b4034281c100400000000000000000000000000000000000005111e2a36424d5764717e8b989a8d80747784919d93877b6e6153493f33271b0f03000000000000000000000c18242f404d596673808c989e92857b736f6c656a6a666d6f747c849199998e8174665c5144382c1f1206000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a000714212e3a4754616d7a87949fa79f9d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989e9184776b584e515353514b42392e23180c000000000000000000000000000000000000000714202d3a46525e6976828f9c98897d7073808c999a8c8073655b5044372b1f1207000000000000000000000715212e3b4854616e7b86929f979285807b7977777777797c818691969f92877b6e61544a4034281c1004000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000c1926333f4c5966727f7f7f7f7f7b6e6255483b2f221508000714212e3a4754616d7a8794a09f95908d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144464645403930271d1207000000000000000000000000000000000000000814212e3b4754616e7b87939f9285796d6f7c88959e9184786c605346392f24180d010000000000000000000714202d3a46525e69727f8b939a98928c88858483838486898e929999928b7f72695f5342392e23180c00000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000c1825313e4a57636d72737373736e695f53473a2e211408000714212e3a4754616d7a8794a09d908380818181818181818181818181818181818181818181818181807d706356493d3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e51443a3a38342e271e150b0000000000000000000000000000000000000006121f2b37434e5865727f8c999b8e8175676a7784919d96897c7063554b4035291d100400000000000000000005121e2a36424d57626d727f889094999998929190909192999a999490877f726d62574d4230271c120700000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000916222e3a46515b636666666666625f574d42372b1e1206000714212e3a4754616d7a8794a0998c807474747474747474747474747474747474747474747474747474706b6054483b2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372d2c28231d150c03000000000000000000000000000000000000000815212e3b47535f6a7783909d988a7d706466737f8c999b8e8174675d5145392c201409000000000000000000020e1a25303b45515b626d727c83888d8f9297949595949792908c88837c726d635b51453b311e150b0000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000006121e2a353f495157595959595955534d453c31261a0e02000714212e3a4754616d7a8794a0998c8073676767676767676767676767676767676767676767676767676360594f44382c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1f1c18120b030000000000000000000000000000000000000003101c28343f4a54626f7c88959f9285796d60616e7b88959f92857a6d6053473b31251a0e0200000000000000000009141f29333f49515b626a6f767c8083858787888888878583807c766f6b635b51493f33291f0c030000000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000010d18232d373f464a4c4c4c4c4c4847423c332a1f150900000714212e3a4754616d7a8794a0998c8073665a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a56544f473d32271b100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e100c0700000000000000000000000000000000000000000006121f2b3844505c6673808d9a9b8e8175675c5f697683909d988b7e7164574d42362a1e1205000000000000000000020d17212d373f49515860626a6f7376787a7b7b7b7b7a7876736f6a63605951493f372d21180d000000000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000007111c252d353a3e3f404040403b3a37312a21180e0300000714212e3a4754616d7a8794a0998c807366594e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4948443d352b21160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e1100000000000000000000000000000000000000000000000713202d3a4653606d7984919e978a7d7063555765727f8b999c8f8276695e53463a2d21160a00000000000000000000050f1b242d373f464e54585f626669686d6e6f6f6e6d686966626058544f473f372e251b0f06000000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000000000a131c232a2e3133333333332f2e2b261f180f060000000714212e3a4754616d7a8794a0998c807366594d414141414141414141414141414141414141414141413d3b38322b23190f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e110400000000000000000000000000000000000000000004101d2935404b5563707d89979f9285796d605354616e7b87939f93877b6e6154483d32271b0f010000000000000000000009121b252d343d43474e53555a565d6061626261615d565955544e48433d342e251c130900000000000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000000010a11181e2225262626262622211e1a150e06000000000714212e3a4754616d7a8794a0998c807366594d40343434343434343434343434343434343434343434302f2c2721191107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e11040000000000000000000000000000000000000000000613202c3945515d6775818e9b9b8e8174665c51525e6876838f9c9a8c7f7366594f43382c1d1207000000000000000000000009131b222b32373c4347484d4c52545455555554524c4d4947433c38322b221c130a0100000000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000000000000070d12161819191919191514120e090300000000000714212e3a4754616d7a8794a0998c807366594d403327272727272727272727272727272727272727272322201b160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e11040000000000000000000000000000000000000000000714202d3a4753606d7a85929f978a7d7063544b4d5665717e8b999e9184776b605448392f24180c00000000000000000000000109101920272b31373a3c4041454748484848474641403c3b37322c272119100a010000000000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000000000000000106090c0c0d0d0d0d08080602000000000000000714212e3a4754616d7a8794a0998c807366594d40332d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28231c150c0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e1104000000000000000000000000000000000000000005111e2a36424d5664717e8b989e9285796d6053464754606d7a86929f96897c6f63554b4035291d1004000000000000000000000000070f151b20262b2e2f3035393a3b3c3c3b3a3935302f2e2b27201b160f0700000000000000000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a38342e271e150b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e110000000000000000000000000000000000000000000714202d3a46525e6976828f9c9a8e8174665c514445525d6875828f9c9a8e8174675d5145392c1f140900000000000000000000000000040a0f151b1f212224292c2d2e2f2f2e2e2d292422221f1b150f0a040000000000000000000c1926333f4c5966727f8c969694887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d474747474747474747474747474747474747474644403930271c12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e0e0802000000000000000000000000000000000000000814212e3b4754616e7b87939f97897d7063544a40414c5664717e8a989f9285796d6053473b30251a0e020000000000000000000000000000040a0f121515191d20212122222221201d191615130f0a0400000000000000000000000c1926333f4c5966727f89898989887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736659535353535353535353535353535353535353535353514a42392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a1925323f4c5865727f8b989d9184776a5e5144372b1e19140d05000000000000000000000000000000000006121f2b37434e5865727f8c999e9285796d6053463a3a4753606d7a86929f988a7e7164574d42362a1e120500000000000000000000000000000000030608080d111314151515151413110d08080603000000000000000000000000000815222e3b4855616e7b7d7d7d7d7d7a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366606060606060606060606060606060606060606060605c544a4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c23323f4c5865727f8b989d9184776a5e5144372d2a251f170e05000000000000000000000000000000000815212e3a47535f6a7783909d9a8e8174665c5044383945515d6775818e9b9c8f8276695e52463a2d20160a000000000000000000000000000000000000000001040707080909080707050100000000000000000000000000000000000714212d3a46535f696e70707070706d675d5145392c1f1306000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665c5144382c1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e262e343f4c5865727f8b989d9184776a5e51443b3936302920170d020000000000000000000000000000030f1c28333f4a54626f7c8895a097897d7063544a3f3435404b5564707d8a979f93877b6e6154483d32271b0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d575f616363636363605d554b4035291d1004000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998d80797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f444c5865727f8b989d9184776a5e51484746413b32291f1408000000000000000000000000000006121f2b3844505b6673808d9a9e9285796d6053463a2e2f3a4653606d7985929f998c7f7266584e43382c1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b454d5355565656565653514b43392f24180c00000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09c928d86868686868686868686868686868686868686868686867f7366594c403326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424a50535865727f8b989d9184776a5e555554524d443b3025190e02000000000000000000000000000613202d394653606c7884919e9a8d8174665c5044382b2c3845515c6674818e9a9d9184776a605448392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333b4246484a4a4a4a4a4745403931271d120700000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a49c99939393939393939393939393939393939393939393938c7f7366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c606165727f8b989d9184776a616161615e564d41362a1e110500000000000000000000000004101d2935404b5563707d8996a197897c7063544a3f34282834404b5463707d8997a096897c6f62554b4034291c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212931363a3b3d3d3d3d3d3a39352f271f150b0100000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a69f9c999999999999999999999999999999999999999999998c7f7366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c666d6e6e727f8b989d9184776e6e6e6e6e685e5246392d2014070000000000000000000000000613202c3945515d6774818e9b9e9184786c605346392e23232e394653606c7884919e9a8e8174675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f262a2d2e30303030302d2c29241d150d030000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09f948f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f7366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787b7b7b808c999e91847b7b7b7b7b7b6e6154473b2e2114080000000000000000000000000714202d3a4753606d7985929c9a8d8074665b5044382b1c1f2b3844505b6674808d9a9c9285796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a1e21222323232323201f1d18120b03000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09c8f827f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8788888c929ca0969188888888888275695c4f4236291c0f0300000000000000000000000b1824313e4b5764717e8a8f8f8f897c6f63544a3f33281c1c28333f4a54626f7c898f8f8f8a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141517171717171413100c070100000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073727272727272727272727272727272727272727272726f6b6054483b2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a879494999ca4a8a09e949494948f8275695c4f4236291c0f0300000000000000000000000c1926333f4c5966727f8282828281776c605346392d221717222d384754606a7581828282827f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0a0a0a0a07060400000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073666666666666666666666666666666666666666666666360594f43382c1f1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a878f8f90949fa298928f8f8f8f8f8275695c4f4236291c0f0300000000000000000000000c1825323e4b57636d7275757575756c655b5044372b1c11111c2b37434e58656f7575757575726d63574b3e3225180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736659595959595959595959595959595959595959595956544f463d32271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8282828290999f928682828282827f7366594c403326190d0000000000000000000000000a16222f3a46515b63666969696968605b53493f33271b0a0f1b27323d46535d65686969696966635b51463a2e22160a00000000000000000000000000000000000005090d0f101313131313130a0907030000000000000000000002070b0d0d1313131313130c0b09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4948433d342b21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686d7575757987939d91847775757575736d63574b3e3225190c00000000000000000000000006121e2a353f495157595c5c5c5c5b53504941382d22170b0a16202b34414b53595b5c5c5c5c595751493f352a1e120600000000000000000000000000000000020a1015191c1c202020202020161613100b0400000000000000080e1317191a202020202020181815120c06000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b38322b22190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d606969677784909d9184776a69696966635b51463b2f23160a000000000000000000000000020d18232e373f464b4c4f4f4f4f4f46443f382f261b1106040f19222f3941484d4e4f4f4f4f4c4b463f372e23180d02000000000000000000000000000000040c141b212528292d2d2d2d2d2d2322201b160f0700000000020a12191f2326272d2d2d2d2d2d2524221d1811090000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d40333333333333333333333333333333333333302f2c272119130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a444c52545c556774818e9a9184776a5e5c5c5957514940352a1e12060000000000000000000000000007121c252e353a3e3f42424242423937332d261d140a000007101d272f373d4042424242423f3e3a352e251c1107000000000000000000000000000000000c161e262d323536393939393939302f2c27211911070000000a141c242a2f333439393939393932312e29231b120900000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4033303030303030303030303030303030303030302d2c29241e160e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a4145474f5865717e8b989184776a5e514f4c4b4640372e23190d0200000000000000000000000000000a131c232a2f323336363636352d2b27221b140b020000000b151d252c3134353636363633322e2a231c130a00000000000000000000000000000000040d1e2830383e41434646464646463d3b38322b23190f040008121c262e363b3f404646464646463f3d3a342d251b1106000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3935302820160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c1620282f35393c4855626f7b88989184776a5e5144403e3b352e251c1207000000000000000000000000000000010a12181e2225262929292928201f1b17110a0200000000030b131a20242728292929292625221e18110a01000000000000000000000000000000010c161f303a42494e4f5353535353534948443d352b21160b020e19242e3840474b4d5353535353534b4a453f372d23180c010000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4745413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e24292d394653606c7985909084776a5e514437322f2a231c130a000000000000000000000000000000000000070d121618191c1c1c1c1c13120f0b060000000000000001090f14181b1b1c1c1c1c191816120d07000000000000000000000000000000000007131d2831424c545a5c60606060606056544f473d32271b1007131f2a36404a52585a606060606060585651493f34291d12010000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366595757575757575757575757575757575757575757575754524c443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191f2b3844505b66748183838175685b4f423528231e19120a010000000000000000000000000000000000000002060a0c0c0f0f0f0f0f060503000000000000000000000004080c0e0f0f0f0f0f0c0c0a06020000000000000000000000000000000000010d18242f3a43545e66696c6c6c6c6c6c6360594f44382c20130b17232f3b47525c64676c6c6c6c6c6c65625b51453a2e1d12070000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073666363636363636363636363636363636363636363636363605d564c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f1c28333f4a54646e747777756f65594d4134281b120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b55667076797979797979706b6054483b2f2216081926333f4b58646e73797979797979726d62564a392f24180c0000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80737070707070707070707070707070707070707070707070706d685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3842535c64676a6a68655d53483d3125190c0200000000000000000000000000000000000000000000000000000000050a0e101113131313100f0d0a0500000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6776828686868686867d706356493d302519111e2a36414c566773808686868686867f7265554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8e817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f414a53585b5d5d5b59534b42372c201509000000000000000000000000000000000000000000000000000000030b11161a1d1d202020201d1c1a16110a030000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8692939393938d807366564c41362a1d14202d3946525e68778390939393938f8275675d5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2f3841484c4e50504f4d48423930251b0f040000000000000000000000000000000000000000000000000000050d151c2226292a2d2d2d2d2a2926221c150d0400000000000000000000000000000000000000000000000000000000000000030f1b27333f495364707d8a99a39f9f9d908377685e5246392d2014212e3b4754616e7a87939f9f9f9f9286796d6053473a2d20140a00000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b969696969696969696969696969696969696969696969696897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1d262f363c4041444442413d3730271e14090000000000000000000000000000000000000000000000000000030d171f272d323637393939393635322d271f160d0300000000000000000000000000000000000000000000000000000000000005121f2b3744505b6574818e9aa09d9e9f93877a6d6154473a2e211825313e4b5864717e8b9a9f9c9fa2988a7d7063574a3d31261b0f03000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a879496969696969696969696969696969696969696969696969696969696897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b141d252b30333437373534312c251e150c0200000000000000000000000000000000000000000000000000000b151f2931393e42444646464643423e3831281f150a0000000000000000000000000000000000000000000000000000000000000613202d394653606c7885919e959092979a8a7e7164574b3e31261f2b37434e586875818e9b948f92999a8d817467584e43372b1f1206000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a878989898989898989898989898989898989898989898989898989898989897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131a202427282a2a282825201b140c03000000000000000000000000000000000000000000000000000005111c27313b434a4f5053535353504e4a433a31271c110500000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88979d908385929b8e817468584e43372b212e3b47535f6a7885919c8f8287929e9184786a5f53473a2e211508000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b1d1d1c1b19150f09020000000000000000000000000000000000000000000000000000000a16222d39434d555b5d606060605d5a544c43382d22160a0000000000000000000000000000000000000000000000000000000005111e2a36414c5666737f8c999a8d80828f9c9184786a5f53473a2e222f3c4855626f7c8897988c7f83909d96887b6f6255483c3024190d0100000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c666d707070707070707070707070707070707070707070707070707070707070706d685d5245392c2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e11110f0e0c090400000000000000000000000000000000000000000000000000000000010e1a26323e4a555f666a6c6c6c6c69665e544a3e32261a0d010000000000000000000000000000000000000000000000000000000713202d3946525e687683909d978a7e7f8c9996887b6f6255483c2f2934404b5565727f8c9898897d808d9a998c7f7266564c4135291d110500000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c6063636363636363636363636363636363636363636363636363636363636363605d564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2936424f5b667177797979797670665a4e4235291c0f030000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87939f97877b7d8999988c7f7265554b40342c3845515c6776828f9c9286797d8a979c908376685d5246392d201306000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a51535656565656565656565656565656565656565656565656565656565656565654524c443a2f24190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783868686868276695d5043362a1d1003000000000000000000000000000000000000000000000000000004101c2834404a5464717e8b9a9e9185787a86929c8f8276675c5145382d3a4753606d7986929c9083767a87969f92867a6d6154473a2e23170b0000000000000000000000000000000000000000000000000000000000000000000007121c2730394044464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4745413a32281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909393908376695d5043362a1d1003000000000000000000000000000000000000000000000000000006121f2c3844515c6675828e9b9b8e82757683909d9286796d6053473a303d4a5663707d8998998c80737784919e998a7e7164544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a39352f2820160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000000000713202d3a4653606d7985929f988b7e7273808d9a98897d7063564a3d36414c566773808d9a99897d7074818e9b9b8e8175665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d303030303030303030303030303030303030303030303030303030303030302d2c29241e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000000000a1623303d495663707d8998a196887b6e707d8a999a8d807367564d413946525e687784909d92867a6d717e8b979f9285796d6053463a2d2013090000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202323232323232323232323232323232323232323232323232323232323232321201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000000005121e2b37424d576773808d9a9e918478696d7a86929d908477685e52463b4754616e7a87959c908376676e7b8795a097897c6f6356493c31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000070c101213171717171717171717171717171717171717171717171717171717171717171413110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d1003000000000000000000000000000000000000000000000000000714212d3a46535f697784919d9b8e817568677683909d95877a6e6154473f495364717e8b97998c807366697784919d998d807366574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000406070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a07070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d1003000000000000000000000000000000000000000000000000000815222e3b4855616e7b8896a09a8b7e71646673808c99978b7e7164534944505b6575818e9b98897c70636774808d9a9d908477695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000004111d2935414b5565727f8b989f93877a6e61636f7c89989b8e8175655b504653606c7885919e9285796d6063707d8a98a095877b6e6154483b2f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000000613202c3945515d6776828f9c9d908377685e606d7985929e9285786c60534855626f7c88979c8f8275665c606d7a86929f988b7e7265554b4035291d1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000000714212d3a4754606d7a86929f998d807366565c6675828f9b97887c6f62554b5565727f8c98988b7f7265545d6776828f9c9c8f8275675d5145392c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000030f1b27333f495364707d8a99a298897c6f63565465727e8b98998c7f726655515d6776828f9c96887b6e61555566727f8c999f92867a6d6053473a2d20140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d1003000000000000000000000000000000000000000000000005121f2b3744505b6574818e9b9f9285796d605355616e7b88969c8f8276675d53606d7986929e918477695f5355626f7c8897a1988a7d7063574a3d32261b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000613202d394653606c7885919e9b8f8275665c50535f697784919e9286796d605663707d89989a8d817467574d53606c7885919e9a8d817467584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a7783909d9c908376695d5043362a1d080000000000000000000000000000000000000000000000000916222f3c4955626f7c8897a1988b7e7165544a4d576774818d9a98897d7063566773808d9a998a7d7064574a505b6574818e9b9e9184786a5f53473b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172a3744505d6a7783909d9c908376695d50433025190e050000000000000000000000000000000000000000000005111e2a36414c566673808c99a095877b6e6154484a5764707d8a999a8d8073675e687784909d92867a6d605347495364717e8a9aa196887c6f6255483c3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202a36424d576a7783909d9c90837669564c41362a20170c020000000000000000000000000000000000000000000714202d3946525e687783909d9d918477695e53464753606d7a86929d90837768616e7a87959c8f8376675d51454754616d7a87939f998c7f7266564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323b46525e697783909d9c908376685e52463e32291e13080000000000000000000000000000000000000000000814212e3b4754616e7a87939f9a8d807367574d4245515d6776838f9c93877a6e64717e8b97998c7f7266554b4046525e687783909d9d908376685e5246392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e1925303b44505a616e7b85929f9f92857a6e615a50443a3025190e040000000000000000000000000000000000000004101c2834404b5465717e8b9aa298897d7063564a3d404b5566727f8c999a8a7e716875818e9b97887c6f6255493c414c566673808d999f93867a6d6154473a2e23170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c17202a36414c56626c75828f98a2a2978f82756c61564c41362a20160c0200000000000000000000000000000000000006131f2c3845515c6675828f9b9f9285796d6053463a3c4955626f7c88979b8e8174697885919e9185786c605346393d495663707c8998a2998a7e7164544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323a46525e68717e8b949e9f9f9e938a7e71685e52463e32281e13080000000000000000000000000000000000000713202d3a4653606d7985929f9c8f8275675c514538394653606c7885919e9184786e7b88979b8e8174655b5044373a4653606d7985929f9b8e8175665c5044382c1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1925303a44505a616e7a85929f989292979e92857a6d615a50443a3024190d0400000000000000000000000000000000000a1723303d4a5663707d8998a2988b7f7265554b40343744505b6574818e9b96877b717e8b98998a7e716453493f333844515c6675828f9b9f9285796d6053463a2d201309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202a36414c56616c75828f979f928685929f978e81756c61564c4135291f160c0100000000000000000000000000000006121e2b37424d576774808d9aa096887b6e6155483b2e333f495364717e8a99978a7e74818e9b93867a6d6154473a2d34404a5465727e8b98a297897c6f6356493c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a46525e68717e8a939e958c7f7e8b949e938a7e70685d52463e31281e13080000000000000000000000000000000814212e3a47535f697784919e9e918477695f53463a2d2d3a4754616d7a86939a8d817784919d908376685e5246392d2e3b4855616e7b8896a09a8d807367574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1924303a44505a616d7a85929e99908378778290989e91857a6d61594f433a2f24190d0400000000000000000000000000000815222f3b4855626e7b8896a09a8d807467574d42362a2d3946525e687683909d90837a8693998c807366564c41362a2d3a46535f697784919e9d918477695f53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2935414c56616c75818e979f93877c6f6e7b86929f978e81756b61564c4135291f160c0100000000000000000000000004111d2935414c5565727f8c98a3988a7d7063574a3d31262935414c566673808c9992877d8a9a97897c6f6356493c30252a36424d576774808d9aa095887b6e6155483b2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313a45525d68707d8a939e968d80746a69737f8c959e938a7d70685d52453d31281d13070000000000000000000000000613202c3945515d6776828f9c9f92867a6d6053473a2d2025303c4956636f7c8997999083909c9285796d6053463a2d2026313d4a5763707d8a99a3988b7f7265554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d19242f3a434f59606d7a85919e9e9184796d60606d788390999e91847a6d60594f433a2f24180d0400000000000000000000000714212d3a4754606d7a86929f9c8f8276675d5145392c1f202d3a4653606d7985929f9490949b8e8275665c5044382c1f202d3a4753606d7a86929f9c8f8276675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2935414c55616b74818e979e938a7d70675d5c666f7c87939f968e81746b60554b4135291f160c01000000000000000000030f1b27333f495364717d8a99a3988c7f7265554b4035291d1f2b3844505c6675828e9b9f9c9f988b7e7165544a3f34281c202c3945515d6776838f9c9f92867a6d6053473a2d20140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313945515d67707d8a939e978e81756b615554606a74808d969d93897d70675d51453d31281d120700000000000000000005121f2b3744505b6574818e9ba196887b6e6255483b2f24181c28343f4a5465717e8b98a7a9a095877b6e6154483b2e23171d2935404b5566727f8c99a3988a7d7064574a3d32261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18242f39434f59606d7a84919e9e92857a6d61594f4e58606d7984919e9e9184796d60594f43392f24180d0300000000000000000613202d394653606c7885919e9e9184786a5f53473a2e1d1217232e3b4754616e7b8795a0a39d918477695e52463a2d1c1118242f3c4855626f7c8897a19a8e817467584e43372b1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2935404b55606b74818e969f948b7e71685e524745515d67707d8a939e968d81746b60554b4035291f150b01000000000000000916232f3c4956626f7c899796968d817467584e43372b1f0b14202d3a46525e697783909696968d807467574d42362a1e0a15212e3b47535f6a78859196969184786a5f53473b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313945515d67707d89939d988f82766c61564c41414b55616c75818e979f93887d70675d51453d31271d1207000000000000000d1a2633404d5966738089898989897d7064574a3d31261a0f111e2a36424d5666738089898989897d7063564a3d30251a0e121f2b37434e5868748189898989887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18242f39434f59606d7984919e9f92867b6e615a50443a3a43505a616e7b85929f9a9184796d60594f43392f24180c030000000000000916222f3c4955626f7c7d7d7d7d7d796d6053473a2d2014090e1925303b4754616e7a7d7d7d7d7d796d6053463a2d2013090f1b26323c4854616e7b7d7d7d7d7d7b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2935404b55606b74808d969f958c7f72695f53483e32313e46525e68727e8b949f968d80746b60554b4035291e150b0000000000000815212e3b47535f6a6f70707070706d675d5145382c1f13060914202d3946525e686e70707070706d675c5145382c1f13060a15212d3a46535e696e70707070706e695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303945515d676f7d88939f999083786d60574d42362d2a36414d56606c778290989f93887d6f675d51453d30271d1207000000000006131f2b37434e585f626363636363605d554b4035291d100405111e2a36414d565e616363636363605c554b4034281c100405121e2a36424d575e616363636363615e574d42362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39434e58606d7984919a9f92877c6f665c50453b312425303b44505b656e7b86929f9a9184796d60584e43392e23180c0400000000030f1b26323c464e5355565656565653514b43392f24180c00020e1925303b444d5254565656565653514b43392e23180c00020e1a25313b454d5354565656565654524d453b30251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b55606a73808d96a0968d80736a5f544a3f33291f1f27333f49535f6a737f8c95a0968d80736a60554b40342820150a00000000000a15202a343c4347494a4a4a4a4a4745403931271d1207000008141f29323b4146474a4a4a4a4a4645403930271d1207000009141f29333b4246484a4a4a4a4a4746423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676f7c87929f9a9184796d60584e42382e211717222d38414e57606d7983919a9f93877c6f675c51453c32271b0f0300000000040e18222a32373b3c3d3d3d3d3d3a38352f271f150b010000020d1720293036393b3d3d3d3d3d3a38342e271e150b000000030d17212931363a3b3d3d3d3d3d3b3a36302920170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e58606d798391999f93887d70675c51463c30261c0f111b262f3c45515c666f7c88939f999183796d60584e43372b1f1306000000000007101820262b2e2f30303030302d2c29241d150d0300000000050e171f252a2d2e30303030302d2c28231d150c0300000000050f171f252a2d2e30303030302e2d2a251f170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a73808d9596978e81746b60554b40342a1e140a0a141d2834404b54606b74808d9696958d80736a6054473b2e221508000000000000070e151b1f21222323232323201f1d18120b03000000000000050d14191e20212323232323201f1c18120b03000000000000050d141a1e2121232323232321201e1a140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8689898989857a6d60594f43392f22180c02020b18232e39424f59606d7a8489898989877c6f6255493c2f22160900000000000000040a0f13151617171717171413100c0701000000000000000002080e11141417171717171313100c0700000000000000000003090e12141517171717171414110e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7c7d7d7d7d7d7b6e685d52473d31271d1006000007121d27303d45515d676e7b7d7d7d7d7d7c6f6255483c2f221509000000000000000000030608090a0a0a0a0a07060400000000000000000000000000020507080a0a0a0a0a07060400000000000000000000000000020507080a0a0a0a0a0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a6e70707070706e6a5f564c41352b1f150b000000000b151e2935414c555f696e70707070706f6a5f53473a2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e585f626363636363625f574e443a2f23190d0300000000030c19242f3a434d575f626363636363625f584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1a26313c464e5355565656565655534e453c32281e110700000000000008131e28313c454d5355565656565655534e463c31261a0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c4347484a4a4a4a4a4847423c332a20160c00000000000000010c161f2a333c4247484a4a4a4a4a4847433c342a20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222a31373a3b3d3d3d3d3d3b3a37312a21180d040000000000000000040d18212a31373a3b3d3d3d3d3d3c3a37312a22180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1820262b2e2f30303030302f2e2b2620180f0600000000000000000000060f1820262b2e2f30303030302f2e2b262018100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1f2122232323232322211e1a150e06000000000000000000000000060e151a1e2122232323232322211f1a150e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12141517171717171514120e0903000000000000000000000000000003090e12141517171717171515120f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080a0a0a0a0a08080602000000000000000000000000000000000000020608080a0a0a0a0a09080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: ---- !u!21 &783799688297434243 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: LiberationSans Atlas Material - m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Cube: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _FaceTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 704257233308556572} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OutlineTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _Ambient: 0.5 - - _Bevel: 0.5 - - _BevelClamp: 0 - - _BevelOffset: 0 - - _BevelRoundness: 0 - - _BevelWidth: 0 - - _BumpFace: 0 - - _BumpOutline: 0 - - _ColorMask: 15 - - _CullMode: 0 - - _Diffuse: 0.5 - - _FaceDilate: 0 - - _FaceUVSpeedX: 0 - - _FaceUVSpeedY: 0 - - _GlowInner: 0.05 - - _GlowOffset: 0 - - _GlowOuter: 0.05 - - _GlowPower: 0.75 - - _GradientScale: 10 - - _LightAngle: 3.1416 - - _MaskSoftnessX: 0 - - _MaskSoftnessY: 0 - - _OutlineSoftness: 0 - - _OutlineUVSpeedX: 0 - - _OutlineUVSpeedY: 0 - - _OutlineWidth: 0 - - _PerspectiveFilter: 0.875 - - _Reflectivity: 10 - - _ScaleRatioA: 1 - - _ScaleRatioB: 1 - - _ScaleRatioC: 1 - - _ScaleX: 1 - - _ScaleY: 1 - - _ShaderFlags: 0 - - _Sharpness: 0 - - _SpecularPower: 2 - - _Stencil: 0 - - _StencilComp: 8 - - _StencilOp: 0 - - _StencilReadMask: 255 - - _StencilWriteMask: 255 - - _TextureHeight: 1024 - - _TextureWidth: 1024 - - _UnderlayDilate: 0 - - _UnderlayOffsetX: 0 - - _UnderlayOffsetY: 0 - - _UnderlaySoftness: 0 - - _VertexOffsetX: 0 - - _VertexOffsetY: 0 - - _WeightBold: 0.75 - - _WeightNormal: 0 - m_Colors: - - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} - - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} - - _FaceColor: {r: 1, g: 1, b: 1, a: 1} - - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} - - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} - - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} - - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} - m_BuildTextureStacks: [] diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf deleted file mode 100644 index 626dd93..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf.meta deleted file mode 100644 index 435ecfc..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf.meta +++ /dev/null @@ -1,19 +0,0 @@ -fileFormatVersion: 2 -guid: d773920d064f540f18ab094416a6864d -timeCreated: 1484171297 -licenseType: Pro -TrueTypeFontImporter: - serializedVersion: 2 - fontSize: 16 - forceTextureCase: -2 - characterSpacing: 1 - characterPadding: 0 - includeFontData: 1 - use2xBehaviour: 0 - fontNames: [] - fallbackFontReferences: [] - customCharacters: - fontRenderingMode: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf deleted file mode 100644 index 2107596..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf.meta deleted file mode 100644 index 585a230..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf.meta +++ /dev/null @@ -1,22 +0,0 @@ -fileFormatVersion: 2 -guid: a9d380ac100490b48a7e8fc9b5da7cc7 -timeCreated: 1446193155 -licenseType: Pro -TrueTypeFontImporter: - serializedVersion: 2 - fontSize: 16 - forceTextureCase: -2 - characterSpacing: 1 - characterPadding: 0 - includeFontData: 0 - use2xBehaviour: 0 - fontNames: - - Droid Sans - - Droid Sans Fallback - - Microsoft YaHei - fallbackFontReferences: [] - customCharacters: - fontRenderingMode: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture.meta deleted file mode 100644 index cd000ee..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1e6dd843707ec2c44910af304cbecd3a -folderAsset: yes -timeCreated: 1464270030 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat deleted file mode 100644 index 03cf048..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat +++ /dev/null @@ -1,77 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: Globe Material - m_Shader: {fileID: 10703, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 5 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: a9f1967c2ba9bff4b93efceca70b54a5, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Glossiness: 0.5 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat.meta deleted file mode 100644 index 392b6a3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aa9cae01e1843384686010036f374ee2 -timeCreated: 1464247826 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png deleted file mode 100644 index 906521d..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png.meta deleted file mode 100644 index 3f94c03..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: a9f1967c2ba9bff4b93efceca70b54a5 -timeCreated: 1465913242 -licenseType: Pro -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons.meta deleted file mode 100644 index 10dc7db..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 51b8c529035e8ea439f9b55d0d1ab04e -folderAsset: yes -timeCreated: 1446628629 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png deleted file mode 100644 index ca1c9c6..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png.meta deleted file mode 100644 index fbd53ec..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 2b4a52e704e150c4082c996d30040be6 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i0.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png deleted file mode 100644 index 962571c..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png.meta deleted file mode 100644 index 0c00b2f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 01d5999d46ad1874cb6c9ddd233d9eb8 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i1.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png deleted file mode 100644 index 637e439..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png.meta deleted file mode 100644 index 123d4ab..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 1fd1555241ea6e84195fc2ea4fc62770 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i2.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png deleted file mode 100644 index 1609a74..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png.meta deleted file mode 100644 index d798859..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 01fafa2ac11f9ae4aa694ff241306d9e -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i3.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png deleted file mode 100644 index aea7a27..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png.meta deleted file mode 100644 index 90972a4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: c0bed239a472e4a439a4d31c2954ce15 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i4.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png deleted file mode 100644 index a520b0f..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png.meta deleted file mode 100644 index 9c69a07..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: feb2e3d03dfb98649aceb692468b71fb -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i5.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png deleted file mode 100644 index 2deeb05..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png.meta deleted file mode 100644 index 35311ee..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: f17aab5275e124842a951aec138b94a7 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i6.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png deleted file mode 100644 index f928e7c..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png.meta deleted file mode 100644 index d8be929..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: a506a1c074c2c8341bc0baf13ab5fd68 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i7.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png deleted file mode 100644 index 91c4c30..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png.meta deleted file mode 100644 index 8a5bec7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 8d0786d8f92f7f544b7147b1d441a2ff -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i8.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png deleted file mode 100644 index 3c3c10a..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png.meta deleted file mode 100644 index 652825b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 5f96b07c7caa7f84db1236359e8b0d43 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -2 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: fairygui-examples/i9.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture.meta b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture.meta deleted file mode 100644 index a93c764..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 39e75451504ad64498ffbcc17bc583c6 -folderAsset: yes -timeCreated: 1447172616 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader deleted file mode 100644 index 6ac923c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader +++ /dev/null @@ -1,69 +0,0 @@ -Shader "Game/FullScreen" { - Properties { - _MainTex ("Base (RGB) Trans (A)", 2D) = "black" {} - _Tex2 ("Base2 (RGB) Trans (A)", 2D) = "black" {} - } - SubShader { - Pass { - Tags {"Queue"="Background" "IgnoreProjector"="True" "RenderType"="Background"} - ZWrite Off - Cull Off - Fog { Mode Off } - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #include "UnityCG.cginc" - - sampler2D _MainTex; - sampler2D _Tex2; - - struct appdata { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD0; - float2 texcoord1 : TEXCOORD1; - }; - - struct v2f { - float4 pos : POSITION; - float2 texcoord : TEXCOORD0; - float2 texcoord1 : TEXCOORD1; - }; - - float4 _MainTex_ST; - float4 _Tex2_ST; - - v2f vert (appdata v) - { - v2f o; - o.texcoord = v.texcoord; - o.texcoord1 = v.texcoord1; - o.pos = v.vertex; -#if UNITY_UV_STARTS_AT_TOP - o.pos.y = -o.pos.y; -#endif - -#if SHADER_API_D3D9 || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_GLCORE - o.pos.z = 1; -#else - o.pos.z = 0; -#endif - o.pos.w = 1; - return o; - } - - half4 frag (v2f i) : COLOR - { - half4 col1 = tex2D(_MainTex, i.texcoord); - half4 col2 = tex2D(_Tex2, i.texcoord1); - col1.rgb *= col1.a; - col1.rgb *= (1-col2.a); - col2.rgb *= col2.a; - col1.a = 1; - col2.a = 1; - return col1 + col2; - } - ENDCG - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader.meta b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader.meta deleted file mode 100644 index 18b114e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 3215886e81b218d41a9de58c554442c0 -ShaderImporter: - defaultTextures: [] - userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab deleted file mode 100644 index dc3ca2e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab +++ /dev/null @@ -1,77 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100000 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 400000} - - component: {fileID: 2000000} - m_Layer: 5 - m_Name: RenderImageCamera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &400000 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.41} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &2000000 -Camera: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 50 - field of view: 28 - orthographic: 0 - orthographic size: 100 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 100000} - m_IsPrefabParent: 1 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab.meta deleted file mode 100644 index dba3697..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: e1401866bdaef3a41b64115e2896151d -NativeFormatImporter: - userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role.meta deleted file mode 100644 index 6e65624..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 02aaf8cbdc6ad5649adb67721d2a8546 -folderAsset: yes -timeCreated: 1446196284 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials.meta deleted file mode 100644 index 4249f07..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 04ea8ad1eb97b764b9deffc1d03922ae -folderAsset: yes -timeCreated: 1445931749 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader deleted file mode 100644 index 93ed08e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader +++ /dev/null @@ -1,122 +0,0 @@ -// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Game/Role/Role-Diffuse" { - Properties { - _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {} - - _StencilComp("Stencil Comparison", Float) = 8 - _Stencil("Stencil ID", Float) = 0 - _StencilOp("Stencil Operation", Float) = 0 - _StencilWriteMask("Stencil Write Mask", Float) = 255 - _StencilReadMask("Stencil Read Mask", Float) = 255 - - _ColorMask("Color Mask", Float) = 15 - - _LightDir_0 ("Light0 direction", Vector) = (0.6, -0.8, 0.2, 1.0) - _LightColor_0 ("Light0 color", Color) = (0.6196,0.5255,0.46275,1) - _LightIntensity_0 ("Light0 intensity", Range(0,8)) = 0.8 - - _LightDir_1 ("Light1 direction", Vector) = (-0.9, 0.5, 0.1, 1.0) - _LightColor_1 ("Light1 color", Color) = (0.2196,0.498,0.61176,1) - _LightIntensity_1 ("Light1 intensity", Range(0,8)) = 0.6 - - _RimColor ("Rim color", Color) = (0.4, 0.4, 0.4, 1) - _RimWidth ("Rim width", Range(0,1)) = 0.7 - - _Direction ("Direction", Range(-1,1)) = 1 - _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 - } - - SubShader { - Pass { - Tags {"Queue"="AlphaTest" "IgnoreProjector"="True"} - AlphaTest Greater [_Cutoff] - Lighting Off - Fog {Mode Off} - Offset 0,-1 - Cull Back - ZWrite On - LOD 200 - - Stencil - { - Ref[_Stencil] - Comp[_StencilComp] - Pass[_StencilOp] - ReadMask[_StencilReadMask] - WriteMask[_StencilWriteMask] - } - - CGPROGRAM - #include "UnityCG.cginc" - #pragma exclude_renderers flash xbox360 ps3 - #pragma vertex vert - #pragma fragment frag - - sampler2D _MainTex; - float4 _LightDir_0; - float4 _LightColor_0; - float _LightIntensity_0; - float4 _LightDir_1; - float4 _LightColor_1; - float _LightIntensity_1; - float4 _RimColor; - float _RimWidth; - float _Direction; - - struct appdata { - float4 vertex : POSITION; - float3 normal : NORMAL; - float2 texcoord : TEXCOORD0; - }; - - struct v2f { - float4 pos : POSITION; - float2 texcoord : TEXCOORD0; - float4 posWorld : TEXCOORD1; - float3 normalDir : TEXCOORD2; - }; - - float4 _MainTex_ST; - - v2f vert(appdata v) { - v2f o; - float4x4 modelMatrix = unity_ObjectToWorld; - o.posWorld = mul(modelMatrix, v.vertex); - o.pos = UnityObjectToClipPos(v.vertex); - o.normalDir = normalize(mul(modelMatrix, float4(v.normal, 0.0)).xyz); - o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); - - float3 viewDir = normalize(ObjSpaceViewDir(v.vertex)); - float dotProduct = 1 - dot(v.normal, viewDir); - - return o; - } - - half4 frag(v2f i) :COLOR { - float3 normalDirection = normalize(i.normalDir); - float3 viewDirection = normalize(_WorldSpaceCameraPos - i.posWorld.xyz); - float3 cDir = float3(_Direction,1,1); - - float3 lightDirection0 = normalize(-_LightDir_0 * cDir); - float3 NDotL0 = max(0.0, dot(normalDirection, lightDirection0)); - float4 diffuseReflection0 = float4(_LightIntensity_0 * _LightColor_0.rgb * NDotL0, 1.0); - - float3 lightDirection1 = normalize(-_LightDir_1 * cDir); - float3 NDotL1 = max(0.0, dot(normalDirection, lightDirection1)); - float4 diffuseReflection1 = float4(_LightIntensity_1 * _LightColor_1.rgb * NDotL1, 1.0); - - float dotProduct = 1 - dot(normalDirection, viewDirection); - float4 rim = smoothstep(1 - _RimWidth, 1.0, dotProduct) * _RimColor; - - half4 tex = tex2D(_MainTex, i.texcoord); - half4 c = ((UNITY_LIGHTMODEL_AMBIENT + diffuseReflection0 + diffuseReflection1) * 2+ rim) * tex ; - c.a = tex.a; - return c; - } - ENDCG - } - } - FallBack "Diffuse" -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader.meta deleted file mode 100644 index c0ee7dd..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 52a70f49fc8a3a64f813389512529ecb -timeCreated: 1547976858 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat deleted file mode 100644 index aad9348..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat +++ /dev/null @@ -1,95 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: U1NPC0040 - m_Shader: {fileID: 10708, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _ALPHAPREMULTIPLY_ON - m_LightmapFlags: 5 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 3000 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 3c3eb5b459fd6d241afe2698a33268d9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - PixelSnap: 0 - - _BumpScale: 1 - - _ColorMask: 15 - - _Cutoff: 0.409 - - _DetailNormalMapScale: 1 - - _Direction: 1 - - _DstBlend: 10 - - _Glossiness: 0.5 - - _LightIntensity_0: 0.8 - - _LightIntensity_1: 0.6 - - _Metallic: 0 - - _Mode: 3 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _RimWidth: 0.7 - - _Shininess: 0.078125 - - _SrcBlend: 1 - - _Stencil: 0 - - _StencilComp: 8 - - _StencilOp: 0 - - _StencilReadMask: 255 - - _StencilWriteMask: 255 - - _UVSec: 0 - - _UseUIAlphaClip: 0 - - _ZWrite: 0 - m_Colors: - - _Color: {r: 0.588, g: 0.588, b: 0.588, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _LightColor_0: {r: 0.6196, g: 0.5255, b: 0.46275, a: 1} - - _LightColor_1: {r: 0.2196, g: 0.498, b: 0.61176, a: 1} - - _LightDir_0: {r: -0.44, g: -0.8, b: 0.2, a: 1} - - _LightDir_1: {r: -0.9, g: 0.5, b: 0.1, a: 1} - - _RimColor: {r: 0.4, g: 0.4, b: 0.4, a: 1} - - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat.meta deleted file mode 100644 index 665dce3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f610d32095a9f6f48b1ada37f0b76da2 -timeCreated: 1445931749 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat deleted file mode 100644 index 5dd7d42..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat +++ /dev/null @@ -1,97 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: U1NPC0041 - m_Shader: {fileID: 4800000, guid: 52a70f49fc8a3a64f813389512529ecb, type: 3} - m_ShaderKeywords: _ALPHAPREMULTIPLY_ON - m_LightmapFlags: 5 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 3c3eb5b459fd6d241afe2698a33268d9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - PixelSnap: 0 - - _BlendDstFactor: 10 - - _BlendSrcFactor: 5 - - _BumpScale: 1 - - _ColorMask: 15 - - _Cutoff: 0.409 - - _DetailNormalMapScale: 1 - - _Direction: 1 - - _DstBlend: 10 - - _Glossiness: 0.5 - - _LightIntensity_0: 0.8 - - _LightIntensity_1: 0.6 - - _Metallic: 0 - - _Mode: 3 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _RimWidth: 0.7 - - _Shininess: 0.078125 - - _SrcBlend: 1 - - _Stencil: 0 - - _StencilComp: 8 - - _StencilOp: 0 - - _StencilReadMask: 255 - - _StencilWriteMask: 255 - - _UVSec: 0 - - _UseUIAlphaClip: 0 - - _ZWrite: 0 - m_Colors: - - _Color: {r: 0.588, g: 0.588, b: 0.588, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _LightColor_0: {r: 0.6196, g: 0.5255, b: 0.46275, a: 1} - - _LightColor_1: {r: 0.2196, g: 0.498, b: 0.61176, a: 1} - - _LightDir_0: {r: -0.44, g: -0.8, b: 0.2, a: 1} - - _LightDir_1: {r: -0.9, g: 0.5, b: 0.1, a: 1} - - _RimColor: {r: 0.4, g: 0.4, b: 0.4, a: 1} - - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat.meta deleted file mode 100644 index 7729e97..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: fae8465b71b8eca4fbea8d86dbc01e03 -timeCreated: 1547976442 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures.meta deleted file mode 100644 index 041220a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 67a92a39217a34d40b581e69a3154c0a -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga deleted file mode 100644 index f62879e..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga.meta deleted file mode 100644 index d4052be..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga.meta +++ /dev/null @@ -1,47 +0,0 @@ -fileFormatVersion: 2 -guid: 3c3eb5b459fd6d241afe2698a33268d9 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 1 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: 5 - maxTextureSize: 256 - textureSettings: - filterMode: 1 - aniso: 0 - mipBias: -1 - wrapMode: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab deleted file mode 100644 index bfb7aa4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab +++ /dev/null @@ -1,3364 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100528 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 440488} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &101302 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 441226} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &102214 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 486672} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &102558 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 416452} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &102962 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 451288} - m_Layer: 0 - m_Name: UI(AutoGenerated) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &103494 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 491140} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &103806 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 411770} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &105358 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 429552} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &105878 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 468818} - - component: {fileID: 3335386} - - component: {fileID: 2395278} - m_Layer: 0 - m_Name: Image - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &106810 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 438748} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &108268 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 470766} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &111914 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 446010} - m_Layer: 0 - m_Name: HtmlImage - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &112358 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 420478} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &112420 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 478466} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &113498 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 420058} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &114450 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 408140} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &114880 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 431022} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &116510 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 414286} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &120078 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 469854} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &120122 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 452528} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &120432 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 469362} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &120696 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 476772} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &120864 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 452364} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &120884 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 402382} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &123680 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 481796} - - component: {fileID: 13701610} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &123700 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 416996} - m_Layer: 0 - m_Name: GLoader - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &125500 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 443362} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &125816 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 435198} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &126210 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 461516} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &127328 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 472208} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &128470 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 403624} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &128560 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 482094} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &129244 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 466946} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &129668 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 491028} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &130556 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 420360} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &133836 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 471058} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &136138 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 410744} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &138306 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 493882} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &138344 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 463980} - - component: {fileID: 11424352} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &138958 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 451690} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &139896 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 455540} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &140366 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 402504} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &140522 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 417878} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &141126 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 489022} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &141606 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 449420} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &141764 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 414740} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &143388 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 422054} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &144858 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 481000} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &145200 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 481892} - - component: {fileID: 3337002} - - component: {fileID: 2319432} - m_Layer: 0 - m_Name: Image - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &146052 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 480772} - - component: {fileID: 3361542} - - component: {fileID: 2379406} - m_Layer: 0 - m_Name: Image - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &146794 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 421104} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &146884 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 463114} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &148306 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 467964} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &148782 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 498232} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &149264 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 402696} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &150964 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 445030} - m_Layer: 0 - m_Name: RichTextField - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &150992 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 482740} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &151004 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 483072} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &153078 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 480466} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &153184 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 442382} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &153212 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 472940} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &154544 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 401828} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &154602 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 425774} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &154676 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 402838} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &154848 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 481764} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &155972 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 455924} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &156516 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 436710} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &157032 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 431364} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &158496 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 462730} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &159156 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 408886} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &159454 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 491800} - - component: {fileID: 3395100} - - component: {fileID: 2329174} - m_Layer: 0 - m_Name: Image - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &161144 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 487672} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &161278 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 480520} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &161578 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 454386} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &164450 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 445936} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &167814 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 440760} - m_Layer: 0 - m_Name: bloodbar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &173056 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 422622} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &176276 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 479794} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &176862 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 404802} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &178132 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 489938} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &180566 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 490418} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &180812 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 431000} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &182930 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 465700} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &183646 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 422792} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &184018 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 459386} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &184204 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 405538} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &186168 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 421276} - - component: {fileID: 3322010} - - component: {fileID: 2324568} - m_Layer: 0 - m_Name: TextField - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &187254 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 458440} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &188824 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 423924} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &190048 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 412228} - - component: {fileID: 11136530} - m_Layer: 0 - m_Name: npc-with-hud - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &190106 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 493204} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &191368 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 478478} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &194228 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 444480} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &194840 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 431592} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &194910 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 441316} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &195480 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 458130} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &195570 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 460888} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &195700 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 459326} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &196042 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 471658} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &196556 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 453180} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &198734 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 420894} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &199998 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 487314} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &401828 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 154544} - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_Children: [] - m_Father: {fileID: 431364} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &402382 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 120884} - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_Children: - - {fileID: 483072} - m_Father: {fileID: 470766} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &402504 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 140366} - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 425774} - m_Father: {fileID: 441316} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &402696 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 149264} - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 466946} - m_Father: {fileID: 420058} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &402838 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 154676} - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_Children: - - {fileID: 408886} - m_Father: {fileID: 438748} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &403624 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 128470} - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 449420} - m_Father: {fileID: 489938} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &404802 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 176862} - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 438748} - m_Father: {fileID: 489938} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &405538 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 184204} - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 441316} - m_Father: {fileID: 478466} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &408140 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 114450} - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_Children: - - {fileID: 444480} - m_Father: {fileID: 476772} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &408886 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 159156} - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_Children: [] - m_Father: {fileID: 402838} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &410744 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 136138} - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 481764} - m_Father: {fileID: 440488} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &411770 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 103806} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 412228} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &412228 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 190048} - m_LocalRotation: {x: 0, y: 0.7291566, z: 0, w: 0.68434685} - m_LocalPosition: {x: 250, y: 0, z: 305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 481796} - - {fileID: 411770} - - {fileID: 479794} - - {fileID: 420894} - - {fileID: 463980} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &414286 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 116510} - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 431592} - m_Father: {fileID: 478466} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &414740 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 141764} - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 441226} - m_Father: {fileID: 453180} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &416452 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 102558} - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_Children: - - {fileID: 461516} - m_Father: {fileID: 458130} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &416996 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 123700} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 47, y: 1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 468818} - m_Father: {fileID: 451288} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &417878 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 140522} - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_Children: - - {fileID: 482740} - m_Father: {fileID: 431000} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &420058 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 113498} - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_Children: - - {fileID: 402696} - m_Father: {fileID: 421104} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &420360 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 130556} - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 491140} - m_Father: {fileID: 471058} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &420478 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 112358} - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 422792} - m_Father: {fileID: 476772} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &420894 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 198734} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 412228} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &421104 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 146794} - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_Children: - - {fileID: 420058} - m_Father: {fileID: 472208} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &421276 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 186168} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 445030} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &422054 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 143388} - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_Children: [] - m_Father: {fileID: 479794} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &422622 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 173056} - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_Children: - - {fileID: 423924} - m_Father: {fileID: 472208} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &422792 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 183646} - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 471658} - m_Father: {fileID: 420478} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &423924 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 188824} - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_Children: - - {fileID: 452364} - m_Father: {fileID: 422622} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &425774 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 154602} - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 402504} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &429552 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 105358} - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 476772} - m_Father: {fileID: 483072} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &431000 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 180812} - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_Children: - - {fileID: 417878} - m_Father: {fileID: 479794} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &431022 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 114880} - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 443362} - m_Father: {fileID: 480520} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &431364 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 157032} - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 401828} - m_Father: {fileID: 493882} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &431592 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 194840} - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_Children: - - {fileID: 482094} - m_Father: {fileID: 414286} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &435198 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 125816} - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_Children: [] - m_Father: {fileID: 493204} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &436710 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 156516} - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 480520} - m_Father: {fileID: 476772} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &438748 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 106810} - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_Children: - - {fileID: 402838} - m_Father: {fileID: 404802} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &440488 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100528} - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 410744} - m_Father: {fileID: 451690} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &440760 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 167814} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: -86, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 491800} - - {fileID: 481892} - m_Father: {fileID: 451288} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &441226 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 101302} - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_Children: [] - m_Father: {fileID: 414740} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &441316 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 194910} - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 402504} - m_Father: {fileID: 405538} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &442382 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 153184} - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: [] - m_Father: {fileID: 491140} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &443362 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 125500} - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_Children: [] - m_Father: {fileID: 431022} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &444480 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 194228} - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 489022} - m_Father: {fileID: 408140} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &445030 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 150964} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -33, y: -56, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 421276} - - {fileID: 446010} - m_Father: {fileID: 451288} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &445936 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 164450} - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_Children: [] - m_Father: {fileID: 458440} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &446010 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 111914} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 114, y: -2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 480772} - m_Father: {fileID: 445030} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &449420 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 141606} - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 460888} - m_Father: {fileID: 403624} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &451288 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 102962} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -72.5, y: 106, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 440760} - - {fileID: 416996} - - {fileID: 445030} - m_Father: {fileID: 463980} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &451690 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 138958} - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 440488} - m_Father: {fileID: 478466} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &452364 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 120864} - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_Children: - - {fileID: 458440} - m_Father: {fileID: 423924} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &452528 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 120122} - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 469854} - m_Father: {fileID: 459386} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &453180 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 196556} - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 414740} - m_Father: {fileID: 481000} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &454386 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 161578} - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 469854} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &455540 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 139896} - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 469362} - m_Father: {fileID: 478466} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &455924 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 155972} - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 463114} - m_Father: {fileID: 469362} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &458130 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 195480} - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_Children: - - {fileID: 416452} - m_Father: {fileID: 487314} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &458440 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 187254} - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_Children: - - {fileID: 445936} - m_Father: {fileID: 452364} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &459326 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 195700} - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_Children: [] - m_Father: {fileID: 460888} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &459386 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 184018} - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 452528} - m_Father: {fileID: 478466} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &460888 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 195570} - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 459326} - m_Father: {fileID: 449420} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &461516 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 126210} - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: [] - m_Father: {fileID: 416452} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &462730 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 158496} - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 478466} - m_Father: {fileID: 491028} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &463114 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 146884} - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 455924} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &463980 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 138344} - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_Children: - - {fileID: 451288} - m_Father: {fileID: 412228} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &465700 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 182930} - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 470766} - m_Father: {fileID: 472208} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &466946 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 129244} - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 486672} - m_Father: {fileID: 402696} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &467964 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 148306} - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 482094} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &468818 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 105878} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1, y: -6, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 416996} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &469362 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 120432} - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 455924} - m_Father: {fileID: 455540} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &469854 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 120078} - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 454386} - m_Father: {fileID: 452528} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &470766 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 108268} - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 493204} - - {fileID: 498232} - - {fileID: 402382} - m_Father: {fileID: 465700} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &471058 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 133836} - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 420360} - m_Father: {fileID: 489938} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &471658 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 196042} - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_Children: - - {fileID: 487672} - m_Father: {fileID: 422792} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &472208 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 127328} - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: - - {fileID: 422622} - - {fileID: 421104} - - {fileID: 465700} - m_Father: {fileID: 489938} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &472940 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 153212} - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_Children: [] - m_Father: {fileID: 489022} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &476772 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 120696} - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 478478} - - {fileID: 481000} - - {fileID: 408140} - - {fileID: 436710} - - {fileID: 420478} - m_Father: {fileID: 429552} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &478466 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 112420} - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 414286} - - {fileID: 455540} - - {fileID: 451690} - - {fileID: 459386} - - {fileID: 405538} - m_Father: {fileID: 462730} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &478478 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 191368} - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: - - {fileID: 493882} - m_Father: {fileID: 476772} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &479794 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 176276} - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 422054} - - {fileID: 489938} - - {fileID: 431000} - m_Father: {fileID: 412228} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &480466 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 153078} - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_Children: [] - m_Father: {fileID: 490418} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &480520 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 161278} - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 431022} - m_Father: {fileID: 436710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &480772 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 146052} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 446010} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &481000 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 144858} - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_Children: - - {fileID: 453180} - m_Father: {fileID: 476772} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &481764 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 154848} - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: [] - m_Father: {fileID: 410744} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &481796 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 123680} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 412228} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &481892 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 145200} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 11, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 440760} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &482094 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 128560} - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_Children: - - {fileID: 467964} - m_Father: {fileID: 431592} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &482740 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 150992} - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 490418} - m_Father: {fileID: 417878} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &483072 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 151004} - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 429552} - m_Father: {fileID: 402382} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &486672 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 102214} - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 466946} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &487314 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 199998} - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 458130} - m_Father: {fileID: 489938} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &487672 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 161144} - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_Children: [] - m_Father: {fileID: 471658} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &489022 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 141126} - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 472940} - m_Father: {fileID: 444480} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &489938 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 178132} - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 472208} - - {fileID: 404802} - - {fileID: 403624} - - {fileID: 471058} - - {fileID: 487314} - m_Father: {fileID: 479794} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &490418 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 180566} - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 480466} - m_Father: {fileID: 482740} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &491028 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 129668} - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_Children: - - {fileID: 462730} - m_Father: {fileID: 498232} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &491140 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 103494} - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_Children: - - {fileID: 442382} - m_Father: {fileID: 420360} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &491800 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 159454} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 440760} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &493204 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 190106} - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: - - {fileID: 435198} - m_Father: {fileID: 470766} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &493882 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 138306} - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_Children: - - {fileID: 431364} - m_Father: {fileID: 478478} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &498232 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 148782} - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: - - {fileID: 491028} - m_Father: {fileID: 470766} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &2319432 -MeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 145200} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 3 ---- !u!23 &2324568 -MeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 186168} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 7 ---- !u!23 &2329174 -MeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 159454} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 2 ---- !u!23 &2379406 -MeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 146052} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 9 ---- !u!23 &2395278 -MeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 105878} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 5 ---- !u!33 &3322010 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 186168} - m_Mesh: {fileID: 0} ---- !u!33 &3335386 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 105878} - m_Mesh: {fileID: 0} ---- !u!33 &3337002 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 145200} - m_Mesh: {fileID: 0} ---- !u!33 &3361542 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 146052} - m_Mesh: {fileID: 0} ---- !u!33 &3395100 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 159454} - m_Mesh: {fileID: 0} ---- !u!111 &11136530 -Animation: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 190048} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!114 &11424352 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 138344} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!137 &13701610 -SkinnedMeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 123680} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 465700} - - {fileID: 472208} - - {fileID: 402382} - - {fileID: 493204} - - {fileID: 498232} - - {fileID: 421104} - - {fileID: 489938} - - {fileID: 422622} - - {fileID: 483072} - - {fileID: 491028} - - {fileID: 404802} - - {fileID: 403624} - - {fileID: 471058} - - {fileID: 458130} - - {fileID: 487314} - - {fileID: 449420} - - {fileID: 420360} - - {fileID: 470766} - - {fileID: 462730} - - {fileID: 438748} - - {fileID: 416452} - - {fileID: 402838} - - {fileID: 478466} - - {fileID: 414286} - - {fileID: 431592} - - {fileID: 459386} - - {fileID: 405538} - - {fileID: 452528} - - {fileID: 441316} - - {fileID: 451690} - - {fileID: 440488} - - {fileID: 455540} - - {fileID: 469362} - - {fileID: 482094} - - {fileID: 455924} - - {fileID: 410744} - - {fileID: 469854} - - {fileID: 402504} - - {fileID: 461516} - - {fileID: 458440} - - {fileID: 452364} - - {fileID: 423924} - - {fileID: 408886} - - {fileID: 460888} - - {fileID: 459326} - - {fileID: 429552} - - {fileID: 476772} - - {fileID: 478478} - - {fileID: 493882} - - {fileID: 436710} - - {fileID: 420478} - - {fileID: 480520} - - {fileID: 422792} - - {fileID: 408140} - - {fileID: 444480} - - {fileID: 431364} - - {fileID: 481000} - - {fileID: 453180} - - {fileID: 489022} - - {fileID: 414740} - - {fileID: 431022} - - {fileID: 471658} - - {fileID: 402696} - - {fileID: 466946} - - {fileID: 420058} - - {fileID: 431000} - - {fileID: 491140} - - {fileID: 442382} - - {fileID: 417878} - - {fileID: 482740} - - {fileID: 490418} - - {fileID: 480466} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 489938} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 0} - propertyPath: ObjectOnStage - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 0} - propertyPath: dummy - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 190048} - m_IsPrefabParent: 1 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab.meta deleted file mode 100644 index e77f4ec..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 67877f7eb74ad8d4b82029c02555173b -timeCreated: 1446568553 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX deleted file mode 100644 index 2d804a1..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX.meta deleted file mode 100644 index 25be426..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX.meta +++ /dev/null @@ -1,332 +0,0 @@ -fileFormatVersion: 2 -guid: 87d06d04f2d65d9428debc0b3b5bf4e2 -ModelImporter: - serializedVersion: 22 - fileIDToRecycleName: - 100000: //RootNode - 100002: BipU1NPC0040 - 100004: BipU1NPC0040 Footsteps - 100006: BipU1NPC0040 Head - 100008: BipU1NPC0040 HeadNub - 100010: BipU1NPC0040 L Calf - 100012: BipU1NPC0040 L Clavicle - 100014: BipU1NPC0040 L Finger0 - 100016: BipU1NPC0040 L Finger01 - 100018: BipU1NPC0040 L Finger02 - 100020: BipU1NPC0040 L Finger0Nub - 100022: BipU1NPC0040 L Finger1 - 100024: BipU1NPC0040 L Finger11 - 100026: BipU1NPC0040 L Finger12 - 100028: BipU1NPC0040 L Finger1Nub - 100030: BipU1NPC0040 L Finger2 - 100032: BipU1NPC0040 L Finger21 - 100034: BipU1NPC0040 L Finger22 - 100036: BipU1NPC0040 L Finger2Nub - 100038: BipU1NPC0040 L Finger3 - 100040: BipU1NPC0040 L Finger31 - 100042: BipU1NPC0040 L Finger32 - 100044: BipU1NPC0040 L Finger3Nub - 100046: BipU1NPC0040 L Finger4 - 100048: BipU1NPC0040 L Finger41 - 100050: BipU1NPC0040 L Finger42 - 100052: BipU1NPC0040 L Finger4Nub - 100054: BipU1NPC0040 L Foot - 100056: BipU1NPC0040 L Forearm - 100058: BipU1NPC0040 L Hand - 100060: BipU1NPC0040 L Thigh - 100062: BipU1NPC0040 L Toe0 - 100064: BipU1NPC0040 L Toe0Nub - 100066: BipU1NPC0040 L UpperArm - 100068: BipU1NPC0040 Neck - 100070: BipU1NPC0040 Pelvis - 100072: BipU1NPC0040 Prop1 - 100074: BipU1NPC0040 R Calf - 100076: BipU1NPC0040 R Clavicle - 100078: BipU1NPC0040 R Finger0 - 100080: BipU1NPC0040 R Finger01 - 100082: BipU1NPC0040 R Finger02 - 100084: BipU1NPC0040 R Finger0Nub - 100086: BipU1NPC0040 R Finger1 - 100088: BipU1NPC0040 R Finger11 - 100090: BipU1NPC0040 R Finger12 - 100092: BipU1NPC0040 R Finger1Nub - 100094: BipU1NPC0040 R Finger2 - 100096: BipU1NPC0040 R Finger21 - 100098: BipU1NPC0040 R Finger22 - 100100: BipU1NPC0040 R Finger2Nub - 100102: BipU1NPC0040 R Finger3 - 100104: BipU1NPC0040 R Finger31 - 100106: BipU1NPC0040 R Finger32 - 100108: BipU1NPC0040 R Finger3Nub - 100110: BipU1NPC0040 R Finger4 - 100112: BipU1NPC0040 R Finger41 - 100114: BipU1NPC0040 R Finger42 - 100116: BipU1NPC0040 R Finger4Nub - 100118: BipU1NPC0040 R Foot - 100120: BipU1NPC0040 R Forearm - 100122: BipU1NPC0040 R Hand - 100124: BipU1NPC0040 R Thigh - 100126: BipU1NPC0040 R Toe0 - 100128: BipU1NPC0040 R Toe0Nub - 100130: BipU1NPC0040 R UpperArm - 100132: BipU1NPC0040 Spine - 100134: BipU1NPC0040 Spine1 - 100136: BoneU1NPC0040_00 - 100138: BoneU1NPC0040_01 - 100140: BoneU1NPC0040_02 - 100142: BoneU1NPC0040_03 - 100144: BoneU1NPC0040_04 - 100146: BoneU1NPC0040_05 - 100148: BoneU1NPC0040_06 - 100150: BoneU1NPC0040_07 - 100152: BoneU1NPC0040_08 - 100154: BoneU1NPC0040_09 - 100156: BoneU1NPC0040_10 - 100158: BoneU1NPC0040_11 - 100160: BoneU1NPC0040_12 - 100162: BoneU1NPC0040_13 - 100164: BoneU1NPC0040_14 - 100166: BoneU1NPC0040_15 - 100168: BoneU1NPC0040_16 - 100170: BoneU1NPC0040_17 - 100172: BoneU1NPC0040_18 - 100174: BoneU1NPC0040_19 - 100176: Particle View 01 1 - 100178: Particle View 01 - 100180: U1NPC0040 - 400000: //RootNode - 400002: BipU1NPC0040 - 400004: BipU1NPC0040 Footsteps - 400006: BipU1NPC0040 Head - 400008: BipU1NPC0040 HeadNub - 400010: BipU1NPC0040 L Calf - 400012: BipU1NPC0040 L Clavicle - 400014: BipU1NPC0040 L Finger0 - 400016: BipU1NPC0040 L Finger01 - 400018: BipU1NPC0040 L Finger02 - 400020: BipU1NPC0040 L Finger0Nub - 400022: BipU1NPC0040 L Finger1 - 400024: BipU1NPC0040 L Finger11 - 400026: BipU1NPC0040 L Finger12 - 400028: BipU1NPC0040 L Finger1Nub - 400030: BipU1NPC0040 L Finger2 - 400032: BipU1NPC0040 L Finger21 - 400034: BipU1NPC0040 L Finger22 - 400036: BipU1NPC0040 L Finger2Nub - 400038: BipU1NPC0040 L Finger3 - 400040: BipU1NPC0040 L Finger31 - 400042: BipU1NPC0040 L Finger32 - 400044: BipU1NPC0040 L Finger3Nub - 400046: BipU1NPC0040 L Finger4 - 400048: BipU1NPC0040 L Finger41 - 400050: BipU1NPC0040 L Finger42 - 400052: BipU1NPC0040 L Finger4Nub - 400054: BipU1NPC0040 L Foot - 400056: BipU1NPC0040 L Forearm - 400058: BipU1NPC0040 L Hand - 400060: BipU1NPC0040 L Thigh - 400062: BipU1NPC0040 L Toe0 - 400064: BipU1NPC0040 L Toe0Nub - 400066: BipU1NPC0040 L UpperArm - 400068: BipU1NPC0040 Neck - 400070: BipU1NPC0040 Pelvis - 400072: BipU1NPC0040 Prop1 - 400074: BipU1NPC0040 R Calf - 400076: BipU1NPC0040 R Clavicle - 400078: BipU1NPC0040 R Finger0 - 400080: BipU1NPC0040 R Finger01 - 400082: BipU1NPC0040 R Finger02 - 400084: BipU1NPC0040 R Finger0Nub - 400086: BipU1NPC0040 R Finger1 - 400088: BipU1NPC0040 R Finger11 - 400090: BipU1NPC0040 R Finger12 - 400092: BipU1NPC0040 R Finger1Nub - 400094: BipU1NPC0040 R Finger2 - 400096: BipU1NPC0040 R Finger21 - 400098: BipU1NPC0040 R Finger22 - 400100: BipU1NPC0040 R Finger2Nub - 400102: BipU1NPC0040 R Finger3 - 400104: BipU1NPC0040 R Finger31 - 400106: BipU1NPC0040 R Finger32 - 400108: BipU1NPC0040 R Finger3Nub - 400110: BipU1NPC0040 R Finger4 - 400112: BipU1NPC0040 R Finger41 - 400114: BipU1NPC0040 R Finger42 - 400116: BipU1NPC0040 R Finger4Nub - 400118: BipU1NPC0040 R Foot - 400120: BipU1NPC0040 R Forearm - 400122: BipU1NPC0040 R Hand - 400124: BipU1NPC0040 R Thigh - 400126: BipU1NPC0040 R Toe0 - 400128: BipU1NPC0040 R Toe0Nub - 400130: BipU1NPC0040 R UpperArm - 400132: BipU1NPC0040 Spine - 400134: BipU1NPC0040 Spine1 - 400136: BoneU1NPC0040_00 - 400138: BoneU1NPC0040_01 - 400140: BoneU1NPC0040_02 - 400142: BoneU1NPC0040_03 - 400144: BoneU1NPC0040_04 - 400146: BoneU1NPC0040_05 - 400148: BoneU1NPC0040_06 - 400150: BoneU1NPC0040_07 - 400152: BoneU1NPC0040_08 - 400154: BoneU1NPC0040_09 - 400156: BoneU1NPC0040_10 - 400158: BoneU1NPC0040_11 - 400160: BoneU1NPC0040_12 - 400162: BoneU1NPC0040_13 - 400164: BoneU1NPC0040_14 - 400166: BoneU1NPC0040_15 - 400168: BoneU1NPC0040_16 - 400170: BoneU1NPC0040_17 - 400172: BoneU1NPC0040_18 - 400174: BoneU1NPC0040_19 - 400176: Particle View 01 1 - 400178: Particle View 01 - 400180: U1NPC0040 - 4300000: U1NPC0040 - 7400000: base@idle_z1 - 7400002: base@idle_z2 - 11100000: //RootNode - 13700000: //RootNode - 13700002: U1NPC0040 - externalObjects: - - first: - type: UnityEngine:Material - assembly: UnityEngine.CoreModule - name: U1NPC0040 - second: {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - materials: - importMaterials: 1 - materialName: 0 - materialSearch: 1 - materialLocation: 0 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - animationCompression: 2 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: - - serializedVersion: 16 - name: base@idle_z1 - takeName: - firstFrame: 1 - lastFrame: 61 - wrapMode: 2 - orientationOffsetY: 0 - level: 0 - cycleOffset: 0 - loop: 0 - hasAdditiveReferencePose: 0 - loopTime: 0 - loopBlend: 0 - loopBlendOrientation: 0 - loopBlendPositionY: 0 - loopBlendPositionXZ: 0 - keepOriginalOrientation: 0 - keepOriginalPositionY: 0 - keepOriginalPositionXZ: 0 - heightFromFeet: 0 - mirror: 0 - bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 - curves: [] - events: [] - transformMask: [] - maskType: 0 - maskSource: {instanceID: 0} - additiveReferencePoseFrame: 0 - - serializedVersion: 16 - name: base@idle_z2 - takeName: - firstFrame: 71 - lastFrame: 135 - wrapMode: 0 - orientationOffsetY: 0 - level: 0 - cycleOffset: 0 - loop: 0 - hasAdditiveReferencePose: 0 - loopTime: 0 - loopBlend: 0 - loopBlendOrientation: 0 - loopBlendPositionY: 0 - loopBlendPositionXZ: 0 - keepOriginalOrientation: 0 - keepOriginalPositionY: 0 - keepOriginalPositionXZ: 0 - heightFromFeet: 0 - mirror: 0 - bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 - curves: [] - events: [] - transformMask: [] - maskType: 0 - maskSource: {instanceID: 0} - additiveReferencePoseFrame: 0 - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - importVisibility: 0 - importBlendShapes: 1 - importCameras: 0 - importLights: 0 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMeshForGPU: 1 - keepQuads: 0 - weldVertices: 1 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - useFileScale: 0 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 4 - normalCalculationMode: 0 - importAnimation: 1 - copyAvatar: 0 - humanDescription: - serializedVersion: 2 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - rootMotionBoneName: - rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 0 - lastHumanDescriptionAvatarSource: {instanceID: 0} - animationType: 1 - humanoidOversampling: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab deleted file mode 100644 index 59d5535..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab +++ /dev/null @@ -1,2795 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 1150075176140312} - m_IsPrefabParent: 1 ---- !u!1 &1010404982028000 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4286742660426598} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1059218261172526 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4672451955769334} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1059379632462168 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4206757148000588} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1067117516360930 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4227937933469064} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1071057782414660 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4830860581344014} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1072597780765718 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4539816768824420} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1078478601437546 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4708610203189916} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1135460126913090 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4361978516921126} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1140253994452182 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4241094239306508} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1146300402992766 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4884672185996232} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1150075176140312 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4490259505578878} - - component: {fileID: 111666040288003186} - m_Layer: 0 - m_Name: npc - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1175560894121072 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4594310559806118} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1211018038989970 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4883958064838778} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1223994741929324 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4018078701669832} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1228119985909526 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4926157802774422} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1230450992769040 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4049452316068636} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1242315613069768 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4914943240201416} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1249896763784558 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4651692131757780} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1276819018595210 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4519628157740566} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1279178513536234 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4471665224973970} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1302887464771196 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4507225610043402} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1327037363249190 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4905368652293968} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1346049463988820 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4132173377954600} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1358265541489608 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4242575875878994} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1378262311794920 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4735972335878104} - - component: {fileID: 137001305767814332} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1383426941052994 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4941669013278794} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1394043320779632 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4768597039440366} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1435367911033436 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4222922947366276} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1450240092370900 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4077061754157946} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1457829413905422 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4774774915941070} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1461224286221150 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4558383211953496} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1463783122563160 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4514397939338246} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1466185034251980 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4369439259323886} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1469159043005404 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4402573559092728} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1480066599042308 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4237538198175074} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1491368564064446 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4748391031702748} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1495084127033132 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4298066619836676} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1499121026593800 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4670420799516482} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1511084918428596 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4597284278799572} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1534622683209196 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4129924974715750} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1534815798563810 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4334758250849932} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1555432860051452 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4212261233308806} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1570490740816210 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4119286177475372} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1585427440741598 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4772739930438904} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1586687326074116 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4592198057749092} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1593232354702004 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4108724387687140} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1607737375089906 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4218673413120388} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1611608646356222 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4024492227062350} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1615549402128192 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4715852658799120} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1615973451911864 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4741963489460462} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1633748573770202 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4245588526158778} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1634366814065108 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4355950095109032} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1656036028183870 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4892578489063060} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1668925066032506 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4197182265065022} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1672010311922786 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4991231530613518} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1672554701315912 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4075566800663240} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1687387406118398 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4732551661033212} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1689864009635666 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4781295074042782} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1693919613554156 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4459599931419054} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1694470935162810 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4993297944847610} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1704716674304470 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4160062110373730} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1705054790548186 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4198636148412806} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1707689860730350 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4136798552964460} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1713922177020308 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4789066211853810} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1722249510381470 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4146166128820228} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1735913267372192 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4007654423138198} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1737719886252514 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4225328472586460} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1756067799405304 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4948931464359600} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1765931078757778 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4052819782918204} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1769112418882430 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4280321952613922} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1775557559707370 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4283143979009394} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1781741348880706 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4683287682251894} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1790239854485172 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4169132998361604} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1797313834521158 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4382734894443346} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1802124568840748 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4432749068542684} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1818762075854664 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4399450937874530} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1848536345837664 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4301028178895886} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1853625800880806 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4143224262009474} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1865634291331264 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4540201712874252} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1873158203567434 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4928934790995212} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1884133590710864 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4860895689742166} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1884835152854118 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4306544925298146} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1888737124121322 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4181030785455488} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1890491245204348 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4447875865037570} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1903085340696336 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4594775044774486} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1903843755203422 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4677287491005038} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1917347220285920 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4231299221006758} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1934739608877382 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4212320446741038} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1935096534905822 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4917392242776758} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1951799514151002 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4550370854140754} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1980847113902110 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4268807291916800} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4007654423138198 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1735913267372192} - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4245588526158778} - m_Father: {fileID: 4748391031702748} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4018078701669832 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1223994741929324} - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 4748391031702748} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4024492227062350 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1611608646356222} - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4169132998361604} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4049452316068636 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1230450992769040} - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 4241094239306508} - m_Father: {fileID: 4143224262009474} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4052819782918204 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1765931078757778} - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4077061754157946} - m_Father: {fileID: 4382734894443346} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4075566800663240 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1672554701315912} - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4218673413120388} - m_Father: {fileID: 4181030785455488} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4077061754157946 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1450240092370900} - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4242575875878994} - m_Father: {fileID: 4052819782918204} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4108724387687140 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1593232354702004} - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4670420799516482} - m_Father: {fileID: 4741963489460462} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4119286177475372 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1570490740816210} - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 4471665224973970} - - {fileID: 4715852658799120} - - {fileID: 4382734894443346} - - {fileID: 4132173377954600} - - {fileID: 4268807291916800} - m_Father: {fileID: 4892578489063060} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4129924974715750 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1534622683209196} - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4732551661033212} - - {fileID: 4708610203189916} - - {fileID: 4651692131757780} - - {fileID: 4181030785455488} - - {fileID: 4860895689742166} - m_Father: {fileID: 4774774915941070} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4132173377954600 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1346049463988820} - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 4198636148412806} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4136798552964460 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1707689860730350} - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4212261233308806} - m_Father: {fileID: 4432749068542684} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4143224262009474 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1853625800880806} - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4049452316068636} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4146166128820228 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1722249510381470} - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_Children: - - {fileID: 4206757148000588} - m_Father: {fileID: 4597284278799572} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4160062110373730 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1704716674304470} - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_Children: - - {fileID: 4914943240201416} - m_Father: {fileID: 4732551661033212} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4169132998361604 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1790239854485172} - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4024492227062350} - m_Father: {fileID: 4225328472586460} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4181030785455488 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1888737124121322} - m_LocalRotation: {x: 0.14481032, y: 0.7232496, z: 0.67084324, w: -0.0768724} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4075566800663240} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4197182265065022 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1668925066032506} - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4592198057749092} - m_Father: {fileID: 4772739930438904} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4198636148412806 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1705054790548186} - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4768597039440366} - m_Father: {fileID: 4132173377954600} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4206757148000588 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1059379632462168} - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_Children: [] - m_Father: {fileID: 4146166128820228} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4212261233308806 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1555432860051452} - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_Children: [] - m_Father: {fileID: 4136798552964460} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4212320446741038 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1934739608877382} - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4519628157740566} - m_Father: {fileID: 4283143979009394} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4218673413120388 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1607737375089906} - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_Children: - - {fileID: 4222922947366276} - m_Father: {fileID: 4075566800663240} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4222922947366276 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1435367911033436} - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: [] - m_Father: {fileID: 4218673413120388} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4225328472586460 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1737719886252514} - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 4169132998361604} - m_Father: {fileID: 4948931464359600} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4227937933469064 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1067117516360930} - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4298066619836676} - m_Father: {fileID: 4789066211853810} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4231299221006758 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1917347220285920} - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4286742660426598} - m_Father: {fileID: 4594310559806118} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4237538198175074 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1480066599042308} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4490259505578878} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4241094239306508 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1140253994452182} - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4884672185996232} - m_Father: {fileID: 4049452316068636} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4242575875878994 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1358265541489608} - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_Children: [] - m_Father: {fileID: 4077061754157946} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4245588526158778 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1633748573770202} - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4007654423138198} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4268807291916800 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1980847113902110} - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4683287682251894} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4280321952613922 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1769112418882430} - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_Children: [] - m_Father: {fileID: 4677287491005038} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4283143979009394 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1775557559707370} - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4212320446741038} - m_Father: {fileID: 4715852658799120} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4286742660426598 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1010404982028000} - m_LocalRotation: {x: -0.00030686986, y: -0.014894295, z: -0.012759085, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_Children: [] - m_Father: {fileID: 4231299221006758} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4298066619836676 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1495084127033132} - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 4334758250849932} - m_Father: {fileID: 4227937933469064} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4301028178895886 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1848536345837664} - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_Children: - - {fileID: 4991231530613518} - m_Father: {fileID: 4306544925298146} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4306544925298146 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1884835152854118} - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_Children: - - {fileID: 4301028178895886} - m_Father: {fileID: 4860895689742166} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4334758250849932 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1534815798563810} - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4917392242776758} - - {fileID: 4948931464359600} - - {fileID: 4514397939338246} - - {fileID: 4143224262009474} - - {fileID: 4018078701669832} - m_Father: {fileID: 4298066619836676} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4355950095109032 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1634366814065108} - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4672451955769334} - m_Father: {fileID: 4928934790995212} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4361978516921126 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1135460126913090} - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4539816768824420} - m_Father: {fileID: 4514397939338246} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4369439259323886 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1466185034251980} - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 4892578489063060} - m_Father: {fileID: 4830860581344014} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4382734894443346 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1797313834521158} - m_LocalRotation: {x: 0.07039445, y: 0.011170968, z: -0.3130863, w: 0.9470464} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_Children: - - {fileID: 4052819782918204} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4399450937874530 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1818762075854664} - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_Children: - - {fileID: 4594310559806118} - m_Father: {fileID: 4550370854140754} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4402573559092728 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1469159043005404} - m_LocalRotation: {x: -0.027678797, y: 0.014816013, z: 0.03905903, w: 0.99874365} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4928934790995212} - m_Father: {fileID: 4732551661033212} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4432749068542684 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1802124568840748} - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4136798552964460} - m_Father: {fileID: 4651692131757780} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4447875865037570 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1890491245204348} - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: [] - m_Father: {fileID: 4539816768824420} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4459599931419054 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1693919613554156} - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_Children: - - {fileID: 4507225610043402} - m_Father: {fileID: 4941669013278794} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4471665224973970 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1279178513536234} - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4594775044774486} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4490259505578878 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1150075176140312} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 11.278667, y: -1.7827877, z: 6.118402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4774774915941070} - - {fileID: 4237538198175074} - - {fileID: 4540201712874252} - - {fileID: 4735972335878104} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4507225610043402 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1302887464771196} - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4459599931419054} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4514397939338246 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1463783122563160} - m_LocalRotation: {x: -0.07039445, y: -0.011170963, z: -0.3130863, w: 0.9470464} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4361978516921126} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4519628157740566 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1276819018595210} - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_Children: [] - m_Father: {fileID: 4212320446741038} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4539816768824420 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1072597780765718} - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4447875865037570} - m_Father: {fileID: 4361978516921126} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4540201712874252 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1865634291331264} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4490259505578878} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4550370854140754 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1951799514151002} - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_Children: - - {fileID: 4399450937874530} - m_Father: {fileID: 4774774915941070} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4558383211953496 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1461224286221150} - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4781295074042782} - m_Father: {fileID: 4594775044774486} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4592198057749092 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1586687326074116} - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4905368652293968} - m_Father: {fileID: 4197182265065022} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4594310559806118 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1175560894121072} - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4231299221006758} - m_Father: {fileID: 4399450937874530} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4594775044774486 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903085340696336} - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_Children: - - {fileID: 4558383211953496} - m_Father: {fileID: 4471665224973970} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4597284278799572 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1511084918428596} - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_Children: - - {fileID: 4146166128820228} - m_Father: {fileID: 4914943240201416} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4651692131757780 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1249896763784558} - m_LocalRotation: {x: -0.034353625, y: 0.6956146, z: 0.70682585, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 4432749068542684} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4670420799516482 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1499121026593800} - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_Children: [] - m_Father: {fileID: 4108724387687140} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4672451955769334 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1059218261172526} - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_Children: [] - m_Father: {fileID: 4355950095109032} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4677287491005038 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903843755203422} - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_Children: - - {fileID: 4280321952613922} - m_Father: {fileID: 4683287682251894} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4683287682251894 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1781741348880706} - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4677287491005038} - m_Father: {fileID: 4268807291916800} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4708610203189916 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1078478601437546} - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4741963489460462} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4715852658799120 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615549402128192} - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_Children: - - {fileID: 4283143979009394} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4732551661033212 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1687387406118398} - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4160062110373730} - - {fileID: 4772739930438904} - - {fileID: 4402573559092728} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4735972335878104 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378262311794920} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4490259505578878} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4741963489460462 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615973451911864} - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_Children: - - {fileID: 4108724387687140} - m_Father: {fileID: 4708610203189916} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4748391031702748 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1491368564064446} - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4007654423138198} - m_Father: {fileID: 4018078701669832} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4768597039440366 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1394043320779632} - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4883958064838778} - m_Father: {fileID: 4198636148412806} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4772739930438904 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1585427440741598} - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_Children: - - {fileID: 4197182265065022} - m_Father: {fileID: 4732551661033212} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4774774915941070 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1457829413905422} - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4993297944847610} - - {fileID: 4129924974715750} - - {fileID: 4550370854140754} - m_Father: {fileID: 4490259505578878} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4781295074042782 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1689864009635666} - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_Children: [] - m_Father: {fileID: 4558383211953496} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4789066211853810 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1713922177020308} - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4227937933469064} - m_Father: {fileID: 4928934790995212} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4830860581344014 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1071057782414660} - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4369439259323886} - m_Father: {fileID: 4928934790995212} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4860895689742166 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1884133590710864} - m_LocalRotation: {x: -0.0070472816, y: 0.7129379, z: -0.7009485, w: 0.018473662} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4306544925298146} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4883958064838778 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1211018038989970} - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_Children: [] - m_Father: {fileID: 4768597039440366} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4884672185996232 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1146300402992766} - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4241094239306508} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4892578489063060 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1656036028183870} - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 4119286177475372} - m_Father: {fileID: 4369439259323886} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4905368652293968 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1327037363249190} - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4926157802774422} - m_Father: {fileID: 4592198057749092} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4914943240201416 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1242315613069768} - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_Children: - - {fileID: 4597284278799572} - m_Father: {fileID: 4160062110373730} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4917392242776758 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1935096534905822} - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4941669013278794} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4926157802774422 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1228119985909526} - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4905368652293968} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4928934790995212 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1873158203567434} - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4355950095109032} - - {fileID: 4789066211853810} - - {fileID: 4830860581344014} - m_Father: {fileID: 4402573559092728} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4941669013278794 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1383426941052994} - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_Children: - - {fileID: 4459599931419054} - m_Father: {fileID: 4917392242776758} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4948931464359600 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1756067799405304} - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4225328472586460} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4991231530613518 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1672010311922786} - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: [] - m_Father: {fileID: 4301028178895886} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4993297944847610 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1694470935162810} - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_Children: [] - m_Father: {fileID: 4774774915941070} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!111 &111666040288003186 -Animation: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1150075176140312} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!137 &137001305767814332 -SkinnedMeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378262311794920} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 4402573559092728} - - {fileID: 4732551661033212} - - {fileID: 4830860581344014} - - {fileID: 4355950095109032} - - {fileID: 4789066211853810} - - {fileID: 4772739930438904} - - {fileID: 4129924974715750} - - {fileID: 4160062110373730} - - {fileID: 4369439259323886} - - {fileID: 4227937933469064} - - {fileID: 4708610203189916} - - {fileID: 4651692131757780} - - {fileID: 4181030785455488} - - {fileID: 4306544925298146} - - {fileID: 4860895689742166} - - {fileID: 4432749068542684} - - {fileID: 4075566800663240} - - {fileID: 4928934790995212} - - {fileID: 4298066619836676} - - {fileID: 4741963489460462} - - {fileID: 4301028178895886} - - {fileID: 4108724387687140} - - {fileID: 4334758250849932} - - {fileID: 4917392242776758} - - {fileID: 4941669013278794} - - {fileID: 4143224262009474} - - {fileID: 4018078701669832} - - {fileID: 4049452316068636} - - {fileID: 4748391031702748} - - {fileID: 4514397939338246} - - {fileID: 4361978516921126} - - {fileID: 4948931464359600} - - {fileID: 4225328472586460} - - {fileID: 4459599931419054} - - {fileID: 4169132998361604} - - {fileID: 4539816768824420} - - {fileID: 4241094239306508} - - {fileID: 4007654423138198} - - {fileID: 4991231530613518} - - {fileID: 4146166128820228} - - {fileID: 4597284278799572} - - {fileID: 4914943240201416} - - {fileID: 4670420799516482} - - {fileID: 4136798552964460} - - {fileID: 4212261233308806} - - {fileID: 4892578489063060} - - {fileID: 4119286177475372} - - {fileID: 4471665224973970} - - {fileID: 4594775044774486} - - {fileID: 4132173377954600} - - {fileID: 4268807291916800} - - {fileID: 4198636148412806} - - {fileID: 4683287682251894} - - {fileID: 4382734894443346} - - {fileID: 4052819782918204} - - {fileID: 4558383211953496} - - {fileID: 4715852658799120} - - {fileID: 4283143979009394} - - {fileID: 4077061754157946} - - {fileID: 4212320446741038} - - {fileID: 4768597039440366} - - {fileID: 4677287491005038} - - {fileID: 4592198057749092} - - {fileID: 4905368652293968} - - {fileID: 4197182265065022} - - {fileID: 4550370854140754} - - {fileID: 4218673413120388} - - {fileID: 4222922947366276} - - {fileID: 4399450937874530} - - {fileID: 4594310559806118} - - {fileID: 4231299221006758} - - {fileID: 4286742660426598} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 4129924974715750} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.06054941} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.6938623} - m_DirtyAABB: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab.meta deleted file mode 100644 index 2c127f3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 5044755b433cf354eb6f4e2f9f2173b9 -timeCreated: 1540944203 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 100100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX deleted file mode 100644 index 2d804a1..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX.meta deleted file mode 100644 index 7d68fcf..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX.meta +++ /dev/null @@ -1,309 +0,0 @@ -fileFormatVersion: 2 -guid: c91085c40a67a7542b3b1a737e2a9c51 -ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: //RootNode - 100002: BipU1NPC0040 - 100004: BipU1NPC0040 Footsteps - 100006: BipU1NPC0040 Head - 100008: BipU1NPC0040 HeadNub - 100010: BipU1NPC0040 L Calf - 100012: BipU1NPC0040 L Clavicle - 100014: BipU1NPC0040 L Finger0 - 100016: BipU1NPC0040 L Finger01 - 100018: BipU1NPC0040 L Finger02 - 100020: BipU1NPC0040 L Finger0Nub - 100022: BipU1NPC0040 L Finger1 - 100024: BipU1NPC0040 L Finger11 - 100026: BipU1NPC0040 L Finger12 - 100028: BipU1NPC0040 L Finger1Nub - 100030: BipU1NPC0040 L Finger2 - 100032: BipU1NPC0040 L Finger21 - 100034: BipU1NPC0040 L Finger22 - 100036: BipU1NPC0040 L Finger2Nub - 100038: BipU1NPC0040 L Finger3 - 100040: BipU1NPC0040 L Finger31 - 100042: BipU1NPC0040 L Finger32 - 100044: BipU1NPC0040 L Finger3Nub - 100046: BipU1NPC0040 L Finger4 - 100048: BipU1NPC0040 L Finger41 - 100050: BipU1NPC0040 L Finger42 - 100052: BipU1NPC0040 L Finger4Nub - 100054: BipU1NPC0040 L Foot - 100056: BipU1NPC0040 L Forearm - 100058: BipU1NPC0040 L Hand - 100060: BipU1NPC0040 L Thigh - 100062: BipU1NPC0040 L Toe0 - 100064: BipU1NPC0040 L Toe0Nub - 100066: BipU1NPC0040 L UpperArm - 100068: BipU1NPC0040 Neck - 100070: BipU1NPC0040 Pelvis - 100072: BipU1NPC0040 Prop1 - 100074: BipU1NPC0040 R Calf - 100076: BipU1NPC0040 R Clavicle - 100078: BipU1NPC0040 R Finger0 - 100080: BipU1NPC0040 R Finger01 - 100082: BipU1NPC0040 R Finger02 - 100084: BipU1NPC0040 R Finger0Nub - 100086: BipU1NPC0040 R Finger1 - 100088: BipU1NPC0040 R Finger11 - 100090: BipU1NPC0040 R Finger12 - 100092: BipU1NPC0040 R Finger1Nub - 100094: BipU1NPC0040 R Finger2 - 100096: BipU1NPC0040 R Finger21 - 100098: BipU1NPC0040 R Finger22 - 100100: BipU1NPC0040 R Finger2Nub - 100102: BipU1NPC0040 R Finger3 - 100104: BipU1NPC0040 R Finger31 - 100106: BipU1NPC0040 R Finger32 - 100108: BipU1NPC0040 R Finger3Nub - 100110: BipU1NPC0040 R Finger4 - 100112: BipU1NPC0040 R Finger41 - 100114: BipU1NPC0040 R Finger42 - 100116: BipU1NPC0040 R Finger4Nub - 100118: BipU1NPC0040 R Foot - 100120: BipU1NPC0040 R Forearm - 100122: BipU1NPC0040 R Hand - 100124: BipU1NPC0040 R Thigh - 100126: BipU1NPC0040 R Toe0 - 100128: BipU1NPC0040 R Toe0Nub - 100130: BipU1NPC0040 R UpperArm - 100132: BipU1NPC0040 Spine - 100134: BipU1NPC0040 Spine1 - 100136: BoneU1NPC0040_00 - 100138: BoneU1NPC0040_01 - 100140: BoneU1NPC0040_02 - 100142: BoneU1NPC0040_03 - 100144: BoneU1NPC0040_04 - 100146: BoneU1NPC0040_05 - 100148: BoneU1NPC0040_06 - 100150: BoneU1NPC0040_07 - 100152: BoneU1NPC0040_08 - 100154: BoneU1NPC0040_09 - 100156: BoneU1NPC0040_10 - 100158: BoneU1NPC0040_11 - 100160: BoneU1NPC0040_12 - 100162: BoneU1NPC0040_13 - 100164: BoneU1NPC0040_14 - 100166: BoneU1NPC0040_15 - 100168: BoneU1NPC0040_16 - 100170: BoneU1NPC0040_17 - 100172: BoneU1NPC0040_18 - 100174: BoneU1NPC0040_19 - 100176: Particle View 01 1 - 100178: Particle View 01 - 100180: U1NPC0040 - 400000: //RootNode - 400002: BipU1NPC0040 - 400004: BipU1NPC0040 Footsteps - 400006: BipU1NPC0040 Head - 400008: BipU1NPC0040 HeadNub - 400010: BipU1NPC0040 L Calf - 400012: BipU1NPC0040 L Clavicle - 400014: BipU1NPC0040 L Finger0 - 400016: BipU1NPC0040 L Finger01 - 400018: BipU1NPC0040 L Finger02 - 400020: BipU1NPC0040 L Finger0Nub - 400022: BipU1NPC0040 L Finger1 - 400024: BipU1NPC0040 L Finger11 - 400026: BipU1NPC0040 L Finger12 - 400028: BipU1NPC0040 L Finger1Nub - 400030: BipU1NPC0040 L Finger2 - 400032: BipU1NPC0040 L Finger21 - 400034: BipU1NPC0040 L Finger22 - 400036: BipU1NPC0040 L Finger2Nub - 400038: BipU1NPC0040 L Finger3 - 400040: BipU1NPC0040 L Finger31 - 400042: BipU1NPC0040 L Finger32 - 400044: BipU1NPC0040 L Finger3Nub - 400046: BipU1NPC0040 L Finger4 - 400048: BipU1NPC0040 L Finger41 - 400050: BipU1NPC0040 L Finger42 - 400052: BipU1NPC0040 L Finger4Nub - 400054: BipU1NPC0040 L Foot - 400056: BipU1NPC0040 L Forearm - 400058: BipU1NPC0040 L Hand - 400060: BipU1NPC0040 L Thigh - 400062: BipU1NPC0040 L Toe0 - 400064: BipU1NPC0040 L Toe0Nub - 400066: BipU1NPC0040 L UpperArm - 400068: BipU1NPC0040 Neck - 400070: BipU1NPC0040 Pelvis - 400072: BipU1NPC0040 Prop1 - 400074: BipU1NPC0040 R Calf - 400076: BipU1NPC0040 R Clavicle - 400078: BipU1NPC0040 R Finger0 - 400080: BipU1NPC0040 R Finger01 - 400082: BipU1NPC0040 R Finger02 - 400084: BipU1NPC0040 R Finger0Nub - 400086: BipU1NPC0040 R Finger1 - 400088: BipU1NPC0040 R Finger11 - 400090: BipU1NPC0040 R Finger12 - 400092: BipU1NPC0040 R Finger1Nub - 400094: BipU1NPC0040 R Finger2 - 400096: BipU1NPC0040 R Finger21 - 400098: BipU1NPC0040 R Finger22 - 400100: BipU1NPC0040 R Finger2Nub - 400102: BipU1NPC0040 R Finger3 - 400104: BipU1NPC0040 R Finger31 - 400106: BipU1NPC0040 R Finger32 - 400108: BipU1NPC0040 R Finger3Nub - 400110: BipU1NPC0040 R Finger4 - 400112: BipU1NPC0040 R Finger41 - 400114: BipU1NPC0040 R Finger42 - 400116: BipU1NPC0040 R Finger4Nub - 400118: BipU1NPC0040 R Foot - 400120: BipU1NPC0040 R Forearm - 400122: BipU1NPC0040 R Hand - 400124: BipU1NPC0040 R Thigh - 400126: BipU1NPC0040 R Toe0 - 400128: BipU1NPC0040 R Toe0Nub - 400130: BipU1NPC0040 R UpperArm - 400132: BipU1NPC0040 Spine - 400134: BipU1NPC0040 Spine1 - 400136: BoneU1NPC0040_00 - 400138: BoneU1NPC0040_01 - 400140: BoneU1NPC0040_02 - 400142: BoneU1NPC0040_03 - 400144: BoneU1NPC0040_04 - 400146: BoneU1NPC0040_05 - 400148: BoneU1NPC0040_06 - 400150: BoneU1NPC0040_07 - 400152: BoneU1NPC0040_08 - 400154: BoneU1NPC0040_09 - 400156: BoneU1NPC0040_10 - 400158: BoneU1NPC0040_11 - 400160: BoneU1NPC0040_12 - 400162: BoneU1NPC0040_13 - 400164: BoneU1NPC0040_14 - 400166: BoneU1NPC0040_15 - 400168: BoneU1NPC0040_16 - 400170: BoneU1NPC0040_17 - 400172: BoneU1NPC0040_18 - 400174: BoneU1NPC0040_19 - 400176: Particle View 01 1 - 400178: Particle View 01 - 400180: U1NPC0040 - 4300000: U1NPC0040 - 7400000: base@idle_z1 - 7400002: base@idle_z2 - 11100000: //RootNode - 13700000: //RootNode - 13700002: U1NPC0040 - materials: - importMaterials: 1 - materialName: 0 - materialSearch: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - optimizeGameObjects: 0 - motionNodeName: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - animationCompression: 2 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - clipAnimations: - - serializedVersion: 16 - name: base@idle_z1 - takeName: - firstFrame: 1 - lastFrame: 61 - wrapMode: 2 - orientationOffsetY: 0 - level: 0 - cycleOffset: 0 - loop: 0 - loopTime: 0 - loopBlend: 0 - loopBlendOrientation: 0 - loopBlendPositionY: 0 - loopBlendPositionXZ: 0 - keepOriginalOrientation: 0 - keepOriginalPositionY: 0 - keepOriginalPositionXZ: 0 - heightFromFeet: 0 - mirror: 0 - bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 - curves: [] - events: [] - transformMask: [] - maskType: 0 - maskSource: {instanceID: 0} - - serializedVersion: 16 - name: base@idle_z2 - takeName: - firstFrame: 71 - lastFrame: 135 - wrapMode: 0 - orientationOffsetY: 0 - level: 0 - cycleOffset: 0 - loop: 0 - loopTime: 0 - loopBlend: 0 - loopBlendOrientation: 0 - loopBlendPositionY: 0 - loopBlendPositionXZ: 0 - keepOriginalOrientation: 0 - keepOriginalPositionY: 0 - keepOriginalPositionXZ: 0 - heightFromFeet: 0 - mirror: 0 - bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 - curves: [] - events: [] - transformMask: [] - maskType: 0 - maskSource: {instanceID: 0} - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - importBlendShapes: 1 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMeshForGPU: 1 - keepQuads: 0 - weldVertices: 1 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - useFileScale: 0 - tangentSpace: - normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 - normalImportMode: 0 - tangentImportMode: 1 - importAnimation: 1 - copyAvatar: 0 - humanDescription: - human: [] - skeleton: [] - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 - feetSpacing: 0 - rootMotionBoneName: - hasTranslationDoF: 0 - lastHumanDescriptionAvatarSource: {instanceID: 0} - animationType: 1 - humanoidOversampling: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab deleted file mode 100644 index cef122a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab +++ /dev/null @@ -1,2795 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 1150075176140312} - m_IsPrefabParent: 1 ---- !u!1 &1010404982028000 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4286742660426598} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1059218261172526 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4672451955769334} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1059379632462168 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4206757148000588} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1067117516360930 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4227937933469064} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1071057782414660 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4830860581344014} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1072597780765718 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4539816768824420} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1078478601437546 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4708610203189916} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1135460126913090 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4361978516921126} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1140253994452182 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4241094239306508} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1146300402992766 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4884672185996232} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1150075176140312 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4490259505578878} - - component: {fileID: 111666040288003186} - m_Layer: 0 - m_Name: npc3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1175560894121072 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4594310559806118} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1211018038989970 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4883958064838778} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1223994741929324 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4018078701669832} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1228119985909526 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4926157802774422} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1230450992769040 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4049452316068636} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1242315613069768 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4914943240201416} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1249896763784558 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4651692131757780} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1276819018595210 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4519628157740566} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1279178513536234 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4471665224973970} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1302887464771196 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4507225610043402} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1327037363249190 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4905368652293968} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1346049463988820 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4132173377954600} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1358265541489608 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4242575875878994} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1378262311794920 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4735972335878104} - - component: {fileID: 137001305767814332} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1383426941052994 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4941669013278794} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1394043320779632 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4768597039440366} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1435367911033436 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4222922947366276} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1450240092370900 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4077061754157946} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1457829413905422 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4774774915941070} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1461224286221150 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4558383211953496} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1463783122563160 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4514397939338246} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1466185034251980 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4369439259323886} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1469159043005404 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4402573559092728} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1480066599042308 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4237538198175074} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1491368564064446 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4748391031702748} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1495084127033132 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4298066619836676} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1499121026593800 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4670420799516482} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1511084918428596 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4597284278799572} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1534622683209196 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4129924974715750} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1534815798563810 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4334758250849932} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1555432860051452 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4212261233308806} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1570490740816210 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4119286177475372} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1585427440741598 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4772739930438904} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1586687326074116 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4592198057749092} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1593232354702004 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4108724387687140} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1607737375089906 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4218673413120388} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1611608646356222 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4024492227062350} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1615549402128192 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4715852658799120} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1615973451911864 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4741963489460462} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1633748573770202 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4245588526158778} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1634366814065108 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4355950095109032} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1656036028183870 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4892578489063060} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1668925066032506 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4197182265065022} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1672010311922786 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4991231530613518} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1672554701315912 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4075566800663240} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1687387406118398 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4732551661033212} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1689864009635666 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4781295074042782} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1693919613554156 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4459599931419054} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1694470935162810 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4993297944847610} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1704716674304470 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4160062110373730} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1705054790548186 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4198636148412806} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1707689860730350 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4136798552964460} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1713922177020308 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4789066211853810} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1722249510381470 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4146166128820228} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1735913267372192 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4007654423138198} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1737719886252514 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4225328472586460} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1756067799405304 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4948931464359600} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1765931078757778 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4052819782918204} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1769112418882430 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4280321952613922} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1775557559707370 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4283143979009394} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1781741348880706 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4683287682251894} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1790239854485172 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4169132998361604} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1797313834521158 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4382734894443346} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1802124568840748 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4432749068542684} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1818762075854664 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4399450937874530} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1848536345837664 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4301028178895886} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1853625800880806 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4143224262009474} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1865634291331264 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4540201712874252} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1873158203567434 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4928934790995212} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1884133590710864 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4860895689742166} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1884835152854118 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4306544925298146} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1888737124121322 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4181030785455488} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1890491245204348 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4447875865037570} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1903085340696336 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4594775044774486} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1903843755203422 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4677287491005038} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1917347220285920 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4231299221006758} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1934739608877382 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4212320446741038} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1935096534905822 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4917392242776758} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1951799514151002 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4550370854140754} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1980847113902110 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4268807291916800} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4007654423138198 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1735913267372192} - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4245588526158778} - m_Father: {fileID: 4748391031702748} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4018078701669832 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1223994741929324} - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 4748391031702748} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4024492227062350 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1611608646356222} - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4169132998361604} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4049452316068636 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1230450992769040} - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 4241094239306508} - m_Father: {fileID: 4143224262009474} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4052819782918204 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1765931078757778} - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4077061754157946} - m_Father: {fileID: 4382734894443346} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4075566800663240 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1672554701315912} - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4218673413120388} - m_Father: {fileID: 4181030785455488} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4077061754157946 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1450240092370900} - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4242575875878994} - m_Father: {fileID: 4052819782918204} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4108724387687140 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1593232354702004} - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4670420799516482} - m_Father: {fileID: 4741963489460462} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4119286177475372 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1570490740816210} - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 4471665224973970} - - {fileID: 4715852658799120} - - {fileID: 4382734894443346} - - {fileID: 4132173377954600} - - {fileID: 4268807291916800} - m_Father: {fileID: 4892578489063060} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4129924974715750 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1534622683209196} - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4732551661033212} - - {fileID: 4708610203189916} - - {fileID: 4651692131757780} - - {fileID: 4181030785455488} - - {fileID: 4860895689742166} - m_Father: {fileID: 4774774915941070} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4132173377954600 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1346049463988820} - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 4198636148412806} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4136798552964460 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1707689860730350} - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4212261233308806} - m_Father: {fileID: 4432749068542684} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4143224262009474 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1853625800880806} - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4049452316068636} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4146166128820228 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1722249510381470} - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_Children: - - {fileID: 4206757148000588} - m_Father: {fileID: 4597284278799572} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4160062110373730 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1704716674304470} - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_Children: - - {fileID: 4914943240201416} - m_Father: {fileID: 4732551661033212} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4169132998361604 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1790239854485172} - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4024492227062350} - m_Father: {fileID: 4225328472586460} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4181030785455488 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1888737124121322} - m_LocalRotation: {x: 0.14481032, y: 0.7232496, z: 0.67084324, w: -0.0768724} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4075566800663240} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4197182265065022 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1668925066032506} - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4592198057749092} - m_Father: {fileID: 4772739930438904} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4198636148412806 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1705054790548186} - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4768597039440366} - m_Father: {fileID: 4132173377954600} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4206757148000588 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1059379632462168} - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_Children: [] - m_Father: {fileID: 4146166128820228} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4212261233308806 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1555432860051452} - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_Children: [] - m_Father: {fileID: 4136798552964460} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4212320446741038 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1934739608877382} - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4519628157740566} - m_Father: {fileID: 4283143979009394} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4218673413120388 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1607737375089906} - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_Children: - - {fileID: 4222922947366276} - m_Father: {fileID: 4075566800663240} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4222922947366276 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1435367911033436} - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: [] - m_Father: {fileID: 4218673413120388} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4225328472586460 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1737719886252514} - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 4169132998361604} - m_Father: {fileID: 4948931464359600} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4227937933469064 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1067117516360930} - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4298066619836676} - m_Father: {fileID: 4789066211853810} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4231299221006758 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1917347220285920} - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4286742660426598} - m_Father: {fileID: 4594310559806118} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4237538198175074 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1480066599042308} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4490259505578878} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4241094239306508 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1140253994452182} - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4884672185996232} - m_Father: {fileID: 4049452316068636} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4242575875878994 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1358265541489608} - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_Children: [] - m_Father: {fileID: 4077061754157946} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4245588526158778 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1633748573770202} - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4007654423138198} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4268807291916800 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1980847113902110} - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4683287682251894} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4280321952613922 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1769112418882430} - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_Children: [] - m_Father: {fileID: 4677287491005038} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4283143979009394 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1775557559707370} - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4212320446741038} - m_Father: {fileID: 4715852658799120} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4286742660426598 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1010404982028000} - m_LocalRotation: {x: -0.00030686986, y: -0.014894295, z: -0.012759085, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_Children: [] - m_Father: {fileID: 4231299221006758} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4298066619836676 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1495084127033132} - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 4334758250849932} - m_Father: {fileID: 4227937933469064} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4301028178895886 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1848536345837664} - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_Children: - - {fileID: 4991231530613518} - m_Father: {fileID: 4306544925298146} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4306544925298146 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1884835152854118} - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_Children: - - {fileID: 4301028178895886} - m_Father: {fileID: 4860895689742166} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4334758250849932 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1534815798563810} - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4917392242776758} - - {fileID: 4948931464359600} - - {fileID: 4514397939338246} - - {fileID: 4143224262009474} - - {fileID: 4018078701669832} - m_Father: {fileID: 4298066619836676} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4355950095109032 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1634366814065108} - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4672451955769334} - m_Father: {fileID: 4928934790995212} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4361978516921126 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1135460126913090} - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4539816768824420} - m_Father: {fileID: 4514397939338246} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4369439259323886 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1466185034251980} - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_Children: - - {fileID: 4892578489063060} - m_Father: {fileID: 4830860581344014} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4382734894443346 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1797313834521158} - m_LocalRotation: {x: 0.07039445, y: 0.011170968, z: -0.3130863, w: 0.9470464} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_Children: - - {fileID: 4052819782918204} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4399450937874530 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1818762075854664} - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_Children: - - {fileID: 4594310559806118} - m_Father: {fileID: 4550370854140754} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4402573559092728 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1469159043005404} - m_LocalRotation: {x: -0.027678797, y: 0.014816013, z: 0.03905903, w: 0.99874365} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4928934790995212} - m_Father: {fileID: 4732551661033212} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4432749068542684 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1802124568840748} - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4136798552964460} - m_Father: {fileID: 4651692131757780} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4447875865037570 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1890491245204348} - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: [] - m_Father: {fileID: 4539816768824420} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4459599931419054 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1693919613554156} - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_Children: - - {fileID: 4507225610043402} - m_Father: {fileID: 4941669013278794} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4471665224973970 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1279178513536234} - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4594775044774486} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4490259505578878 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1150075176140312} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 11.278667, y: -1.7827877, z: 6.118402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4774774915941070} - - {fileID: 4237538198175074} - - {fileID: 4540201712874252} - - {fileID: 4735972335878104} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4507225610043402 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1302887464771196} - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4459599931419054} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4514397939338246 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1463783122563160} - m_LocalRotation: {x: -0.07039445, y: -0.011170963, z: -0.3130863, w: 0.9470464} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4361978516921126} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4519628157740566 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1276819018595210} - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_Children: [] - m_Father: {fileID: 4212320446741038} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4539816768824420 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1072597780765718} - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4447875865037570} - m_Father: {fileID: 4361978516921126} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4540201712874252 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1865634291331264} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4490259505578878} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4550370854140754 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1951799514151002} - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_Children: - - {fileID: 4399450937874530} - m_Father: {fileID: 4774774915941070} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4558383211953496 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1461224286221150} - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4781295074042782} - m_Father: {fileID: 4594775044774486} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4592198057749092 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1586687326074116} - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4905368652293968} - m_Father: {fileID: 4197182265065022} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4594310559806118 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1175560894121072} - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4231299221006758} - m_Father: {fileID: 4399450937874530} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4594775044774486 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903085340696336} - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_Children: - - {fileID: 4558383211953496} - m_Father: {fileID: 4471665224973970} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4597284278799572 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1511084918428596} - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_Children: - - {fileID: 4146166128820228} - m_Father: {fileID: 4914943240201416} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4651692131757780 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1249896763784558} - m_LocalRotation: {x: -0.034353625, y: 0.6956146, z: 0.70682585, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_Children: - - {fileID: 4432749068542684} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4670420799516482 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1499121026593800} - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_Children: [] - m_Father: {fileID: 4108724387687140} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4672451955769334 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1059218261172526} - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_Children: [] - m_Father: {fileID: 4355950095109032} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4677287491005038 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903843755203422} - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_Children: - - {fileID: 4280321952613922} - m_Father: {fileID: 4683287682251894} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4683287682251894 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1781741348880706} - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_Children: - - {fileID: 4677287491005038} - m_Father: {fileID: 4268807291916800} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4708610203189916 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1078478601437546} - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4741963489460462} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4715852658799120 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615549402128192} - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_Children: - - {fileID: 4283143979009394} - m_Father: {fileID: 4119286177475372} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4732551661033212 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1687387406118398} - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4160062110373730} - - {fileID: 4772739930438904} - - {fileID: 4402573559092728} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4735972335878104 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378262311794920} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4490259505578878} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4741963489460462 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615973451911864} - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_Children: - - {fileID: 4108724387687140} - m_Father: {fileID: 4708610203189916} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4748391031702748 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1491368564064446} - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4007654423138198} - m_Father: {fileID: 4018078701669832} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4768597039440366 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1394043320779632} - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: - - {fileID: 4883958064838778} - m_Father: {fileID: 4198636148412806} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4772739930438904 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1585427440741598} - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_Children: - - {fileID: 4197182265065022} - m_Father: {fileID: 4732551661033212} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4774774915941070 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1457829413905422} - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_Children: - - {fileID: 4993297944847610} - - {fileID: 4129924974715750} - - {fileID: 4550370854140754} - m_Father: {fileID: 4490259505578878} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4781295074042782 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1689864009635666} - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_Children: [] - m_Father: {fileID: 4558383211953496} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4789066211853810 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1713922177020308} - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4227937933469064} - m_Father: {fileID: 4928934790995212} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4830860581344014 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1071057782414660} - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_Children: - - {fileID: 4369439259323886} - m_Father: {fileID: 4928934790995212} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4860895689742166 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1884133590710864} - m_LocalRotation: {x: -0.0070472816, y: 0.7129379, z: -0.7009485, w: 0.018473662} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4306544925298146} - m_Father: {fileID: 4129924974715750} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4883958064838778 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1211018038989970} - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_Children: [] - m_Father: {fileID: 4768597039440366} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4884672185996232 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1146300402992766} - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4241094239306508} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4892578489063060 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1656036028183870} - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_Children: - - {fileID: 4119286177475372} - m_Father: {fileID: 4369439259323886} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4905368652293968 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1327037363249190} - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4926157802774422} - m_Father: {fileID: 4592198057749092} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4914943240201416 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1242315613069768} - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_Children: - - {fileID: 4597284278799572} - m_Father: {fileID: 4160062110373730} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4917392242776758 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1935096534905822} - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4941669013278794} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4926157802774422 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1228119985909526} - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 4905368652293968} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4928934790995212 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1873158203567434} - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4355950095109032} - - {fileID: 4789066211853810} - - {fileID: 4830860581344014} - m_Father: {fileID: 4402573559092728} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4941669013278794 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1383426941052994} - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_Children: - - {fileID: 4459599931419054} - m_Father: {fileID: 4917392242776758} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4948931464359600 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1756067799405304} - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_Children: - - {fileID: 4225328472586460} - m_Father: {fileID: 4334758250849932} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4991231530613518 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1672010311922786} - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_Children: [] - m_Father: {fileID: 4301028178895886} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4993297944847610 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1694470935162810} - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_Children: [] - m_Father: {fileID: 4774774915941070} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!111 &111666040288003186 -Animation: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1150075176140312} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!137 &137001305767814332 -SkinnedMeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378262311794920} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: fae8465b71b8eca4fbea8d86dbc01e03, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 4402573559092728} - - {fileID: 4732551661033212} - - {fileID: 4830860581344014} - - {fileID: 4355950095109032} - - {fileID: 4789066211853810} - - {fileID: 4772739930438904} - - {fileID: 4129924974715750} - - {fileID: 4160062110373730} - - {fileID: 4369439259323886} - - {fileID: 4227937933469064} - - {fileID: 4708610203189916} - - {fileID: 4651692131757780} - - {fileID: 4181030785455488} - - {fileID: 4306544925298146} - - {fileID: 4860895689742166} - - {fileID: 4432749068542684} - - {fileID: 4075566800663240} - - {fileID: 4928934790995212} - - {fileID: 4298066619836676} - - {fileID: 4741963489460462} - - {fileID: 4301028178895886} - - {fileID: 4108724387687140} - - {fileID: 4334758250849932} - - {fileID: 4917392242776758} - - {fileID: 4941669013278794} - - {fileID: 4143224262009474} - - {fileID: 4018078701669832} - - {fileID: 4049452316068636} - - {fileID: 4748391031702748} - - {fileID: 4514397939338246} - - {fileID: 4361978516921126} - - {fileID: 4948931464359600} - - {fileID: 4225328472586460} - - {fileID: 4459599931419054} - - {fileID: 4169132998361604} - - {fileID: 4539816768824420} - - {fileID: 4241094239306508} - - {fileID: 4007654423138198} - - {fileID: 4991231530613518} - - {fileID: 4146166128820228} - - {fileID: 4597284278799572} - - {fileID: 4914943240201416} - - {fileID: 4670420799516482} - - {fileID: 4136798552964460} - - {fileID: 4212261233308806} - - {fileID: 4892578489063060} - - {fileID: 4119286177475372} - - {fileID: 4471665224973970} - - {fileID: 4594775044774486} - - {fileID: 4132173377954600} - - {fileID: 4268807291916800} - - {fileID: 4198636148412806} - - {fileID: 4683287682251894} - - {fileID: 4382734894443346} - - {fileID: 4052819782918204} - - {fileID: 4558383211953496} - - {fileID: 4715852658799120} - - {fileID: 4283143979009394} - - {fileID: 4077061754157946} - - {fileID: 4212320446741038} - - {fileID: 4768597039440366} - - {fileID: 4677287491005038} - - {fileID: 4592198057749092} - - {fileID: 4905368652293968} - - {fileID: 4197182265065022} - - {fileID: 4550370854140754} - - {fileID: 4218673413120388} - - {fileID: 4222922947366276} - - {fileID: 4399450937874530} - - {fileID: 4594310559806118} - - {fileID: 4231299221006758} - - {fileID: 4286742660426598} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 4129924974715750} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.06054941} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.6938623} - m_DirtyAABB: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab.meta deleted file mode 100644 index fe5f34e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0cf8cd8b7e5dca44290f132f95d0b01a -timeCreated: 1547976416 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI.meta deleted file mode 100644 index 8d9daca..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 5d47e13569988ba48b016bb4d47aa8ab -folderAsset: yes -timeCreated: 1446198115 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png deleted file mode 100644 index 209a182..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png.meta deleted file mode 100644 index a242076..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 346afb959685d48ed81690b2676beb38 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes deleted file mode 100644 index 9adb206..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes.meta deleted file mode 100644 index c10faac..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: db148c03ade42504588dd6f2f50ecaee -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png deleted file mode 100644 index f03157f..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png.meta deleted file mode 100644 index e5b8db0..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 2639a9e025be642158955609c804baf4 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes deleted file mode 100644 index 3f8b082..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes.meta deleted file mode 100644 index e2fa113..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a4930dcd8a536f243a39ef553f5d8b0f -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav deleted file mode 100644 index 37e7ceb..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav.meta deleted file mode 100644 index f731a02..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav.meta +++ /dev/null @@ -1,22 +0,0 @@ -fileFormatVersion: 2 -guid: 264b41ad74a12f84b96c1912d1f5b5aa -AudioImporter: - externalObjects: {} - serializedVersion: 6 - defaultSettings: - loadType: 0 - sampleRateSetting: 0 - sampleRateOverride: 44100 - compressionFormat: 1 - quality: 1 - conversionMode: 0 - platformSettingOverrides: {} - forceToMono: 0 - normalize: 1 - preloadAudioData: 1 - loadInBackground: 0 - ambisonic: 0 - 3D: 1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav deleted file mode 100644 index 32c65f0..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav.meta deleted file mode 100644 index 69a260e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav.meta +++ /dev/null @@ -1,22 +0,0 @@ -fileFormatVersion: 2 -guid: 87155986ecd4a494fb1bf8a30894be6c -AudioImporter: - externalObjects: {} - serializedVersion: 6 - defaultSettings: - loadType: 0 - sampleRateSetting: 0 - sampleRateOverride: 44100 - compressionFormat: 1 - quality: 1 - conversionMode: 0 - platformSettingOverrides: {} - forceToMono: 0 - normalize: 1 - preloadAudioData: 1 - loadInBackground: 0 - ambisonic: 0 - 3D: 1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png deleted file mode 100644 index 45e5101..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png.meta deleted file mode 100644 index 62b99f7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: b1507578401e008468ea8e425875ccc4 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: fairygui-examples/bundleusage.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes deleted file mode 100644 index 5f029da..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes.meta deleted file mode 100644 index 92d0d1f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 350c6259b97d7ac42a77dbed286ffca9 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: fairygui-examples/bundleusage.ab - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png deleted file mode 100644 index 8169565..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png.meta deleted file mode 100644 index f84ba9c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: c0442108e01274a65b9c9ddb2088b4d3 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes deleted file mode 100644 index 06199cb..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes.meta deleted file mode 100644 index 2e36643..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 359c0adf0408b364fbd36b6173b72867 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png deleted file mode 100644 index dc04373..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png.meta deleted file mode 100644 index 4907483..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: a67c842fc46754e2c84ffafa9aea4298 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes deleted file mode 100644 index 20113d5..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes.meta deleted file mode 100644 index 2ecb594..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 310ed4c653b32e44d8ecb7a7dfd523d5 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png deleted file mode 100644 index dd61a5b..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png.meta deleted file mode 100644 index 3892a6a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 37e1dfaa1f62d477eb49d74ede6109a7 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes deleted file mode 100644 index a746d84..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes.meta deleted file mode 100644 index 29d8e39..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 90e82b98c94b0bd4dbd3b56fffacf0c7 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png deleted file mode 100644 index 6764697..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png.meta deleted file mode 100644 index 3ca4972..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: e2ec10b04b3e94470bf6123d315ff9c0 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes deleted file mode 100644 index 5d93647..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes.meta deleted file mode 100644 index 584cfa6..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 61e3084654685784f84d844e0fc30e4f -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png deleted file mode 100644 index 3d841f0..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png.meta deleted file mode 100644 index 0048d48..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: b4f98defb276c48289959754e00cee34 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes deleted file mode 100644 index 9cbf699..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes.meta deleted file mode 100644 index cdb1163..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 703b8b3953da64146a7b4907bdd0c264 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png deleted file mode 100644 index 08c1c31..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png.meta deleted file mode 100644 index 3d90146..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 1d1b2b4b5ff4040f7aa0b81484ba93e1 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes deleted file mode 100644 index 6293fa6..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes.meta deleted file mode 100644 index 137cc71..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8aa31d075dbbae445abcd6049d3bba22 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png deleted file mode 100644 index c397db1..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png.meta deleted file mode 100644 index 973e3a6..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 7cdbc3249c2af40c3ab31ef863ea7f08 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes deleted file mode 100644 index 190e7ab..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes.meta deleted file mode 100644 index 8a9b39f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 3e95d77aad938b245b60a4698a2f7be8 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes deleted file mode 100644 index 1b25bec..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes.meta deleted file mode 100644 index 0fadf18..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0d3d4fc09ae51914691b7f1cba3be651 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png deleted file mode 100644 index a895af3..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png.meta deleted file mode 100644 index 576aac8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: dbc97846cafbb41cebb8168d9bad61fa -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes deleted file mode 100644 index 5e0505f..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes.meta deleted file mode 100644 index 6ea07ed..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4ee7f37d1f11c2c459ff36db6169332c -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png deleted file mode 100644 index c022d87..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png.meta deleted file mode 100644 index 7ff26ef..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 60708b9439d254e198b0933795041029 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes deleted file mode 100644 index e7ca0db..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes.meta deleted file mode 100644 index df80fd7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2b98557f90d48814a81ed521a3d4ca25 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png deleted file mode 100644 index 428a4b0..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png.meta deleted file mode 100644 index f8668d7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 9634eddcff8554d65b031e5962025725 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes deleted file mode 100644 index cb7eff8..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes.meta deleted file mode 100644 index c15d870..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 308c9f6ac8147a44ba6859a334e8d1c4 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png deleted file mode 100644 index ba5a905..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png.meta deleted file mode 100644 index a120ad9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 51af1ab91147945a092500a6ec852f54 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes deleted file mode 100644 index 9b6592a..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes.meta deleted file mode 100644 index 265cbb5..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0fe158521236c3846936aed736848add -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png deleted file mode 100644 index dc04373..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png.meta deleted file mode 100644 index 2c494cf..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 63e25316a3f544e0fad0be2802337063 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes deleted file mode 100644 index 56bbd50..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes.meta deleted file mode 100644 index 2eae331..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: da00dbf49111cd64ea7c7ceb7a7e4618 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png deleted file mode 100644 index baea7db..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png.meta deleted file mode 100644 index be8f220..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: ba8a3726c6403402cbd50dfd4615dbc2 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes deleted file mode 100644 index 72d6de0..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes.meta deleted file mode 100644 index b16a92e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 790c7d9c4d024c7438d1ff01a5c07f1f -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png deleted file mode 100644 index 9dc1ef7..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png.meta deleted file mode 100644 index 101aa47..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 34b6171899a7648e6baa0e82b2cb27ad -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes deleted file mode 100644 index 7d4823f..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes.meta deleted file mode 100644 index d17224c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2abb3b1a68ebc7a4cb6b273de5619bf8 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png deleted file mode 100644 index 911bc78..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png.meta deleted file mode 100644 index 9311bb0..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 9979fe01cca0048359536d32143f602b -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes deleted file mode 100644 index 3c3cbaf..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes.meta deleted file mode 100644 index 16d9018..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: be05ee8cec8ae704e8e6161295a4e21d -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png deleted file mode 100644 index f4b5249..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png.meta deleted file mode 100644 index 1326a65..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 9c51a92924cee4a9e814c7891e48cb01 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes deleted file mode 100644 index 0714948..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes.meta deleted file mode 100644 index eeab0f9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b0a30153bc9a1bd4197ea6499ae08bc3 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png deleted file mode 100644 index 981bb25..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png.meta deleted file mode 100644 index 0e5d10f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 8392c7363d118450d9193a7c73d574cc -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes deleted file mode 100644 index 18ff0c9..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes.meta deleted file mode 100644 index 2b5d31f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5cc4d91cab8814f48981f065ffb91b2a -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png deleted file mode 100644 index e480a08..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png.meta deleted file mode 100644 index 5ba18a7..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 443e1341bc243417b97740f655b23ef0 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes deleted file mode 100644 index 3c19943..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes.meta deleted file mode 100644 index 49b2f03..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 25e072f50178dd743bf51e98e7906433 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png deleted file mode 100644 index 3baa595..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png.meta deleted file mode 100644 index 81f5e22..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: e8fb179a0cfbe4efba6c1b82937e1ad8 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes deleted file mode 100644 index 15ca206..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes.meta deleted file mode 100644 index 01b5cce..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 13e5fff898acc2e42a042dc4ae10682d -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png deleted file mode 100644 index d284c56..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png.meta deleted file mode 100644 index 9c21f04..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png.meta +++ /dev/null @@ -1,153 +0,0 @@ -fileFormatVersion: 2 -guid: c8e5281cf8130430f953aeab61b5cf87 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes deleted file mode 100644 index dd5314a..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes.meta deleted file mode 100644 index ca50ca6..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: fc65f94cd947b46b6ad39d40179bd24b -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png deleted file mode 100644 index 851f000..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png.meta deleted file mode 100644 index 57e5c89..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 85940b8173dea45339e76145592a51bd -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes deleted file mode 100644 index bea2335..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes.meta deleted file mode 100644 index 1c5d60f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: c73a297bc5f785f4a83bc85211a85b10 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav deleted file mode 100644 index edaae03..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav.meta deleted file mode 100644 index 381ffe8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav.meta +++ /dev/null @@ -1,22 +0,0 @@ -fileFormatVersion: 2 -guid: aee486249a6a6964abaee5e35552eb4e -AudioImporter: - externalObjects: {} - serializedVersion: 6 - defaultSettings: - loadType: 0 - sampleRateSetting: 0 - sampleRateOverride: 44100 - compressionFormat: 1 - quality: 1 - conversionMode: 0 - platformSettingOverrides: {} - forceToMono: 0 - normalize: 1 - preloadAudioData: 1 - loadInBackground: 0 - ambisonic: 0 - 3D: 1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png deleted file mode 100644 index 0a13b26..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png.meta deleted file mode 100644 index b8877c8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 074e3db5779c24509a2d68806deed31f -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes deleted file mode 100644 index 5bf5fed..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes.meta deleted file mode 100644 index 3a09a66..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a742d5b70dc43c647805d3ccf3b4b2e3 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png deleted file mode 100644 index c0f64d7..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png.meta deleted file mode 100644 index 115f0b5..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 9600823ed9f92449a81baf81a4d993a7 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes deleted file mode 100644 index 9c09452..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes.meta deleted file mode 100644 index f62fc1e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 68c3403d1c5501742a08b2453bbd559e -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png deleted file mode 100644 index 6d11961..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png.meta deleted file mode 100644 index 9d78b76..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 60423f33540eb4cc5b0c05a541b4a586 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes deleted file mode 100644 index ade5a47..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes.meta deleted file mode 100644 index 755235c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 97d860cf3af710341bb25de35fcff91f -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png deleted file mode 100644 index 45aaedc..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png.meta deleted file mode 100644 index af606b2..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: 0f7c4ebe5147d466cab6f702f9ca1c4c -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes deleted file mode 100644 index 1e5f354..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes.meta deleted file mode 100644 index 1165cdc..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e82e588b274dee84682a15114b8b5d6f -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png deleted file mode 100644 index 08c1c31..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png.meta deleted file mode 100644 index 09aa353..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png.meta +++ /dev/null @@ -1,99 +0,0 @@ -fileFormatVersion: 2 -guid: e7f919ab9ee4d42dd971f965ec9aec59 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes deleted file mode 100644 index e1317a8..0000000 Binary files a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes and /dev/null differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes.meta deleted file mode 100644 index 03f8693..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ed1d9f6e251c95343859bc0e6fdc634f -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes.meta b/Assets/Plugins/FairyGUI/Examples/Scenes.meta deleted file mode 100644 index 90615ce..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ca17b6c8192bd5d4aadec6a31065c8cb -folderAsset: yes -timeCreated: 1446194671 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity deleted file mode 100644 index 171f5ac..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity +++ /dev/null @@ -1,408 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 1 - m_BakeResolution: 50 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &1022230605 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1022230610} - - component: {fileID: 1022230609} - - component: {fileID: 1022230606} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1022230606 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1022230605} - m_Enabled: 1 ---- !u!20 &1022230609 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1022230605} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1022230610 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1022230605} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1274964746 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1274964748} - - component: {fileID: 1274964749} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1274964748 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1274964746} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1274964749 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1274964746} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1841214650 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1841214652} - - component: {fileID: 1841214651} - - component: {fileID: 1841214653} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1841214651 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1841214650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Basics - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Basics - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1841214652 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1841214650} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.014084508, y: 0.014084508, z: 0.014084508} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1841214653 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1841214650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a7c649dfadf79df4a963190eded74b30, type: 3} - m_Name: - m_EditorClassIdentifier: - lineGradient: - serializedVersion: 2 - key0: {r: 0.7941176, g: 0.21604672, b: 0.21604672, a: 1} - key1: {r: 0.069582626, g: 0.8602941, b: 0.27135026, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} - key4: {r: 0, g: 0, b: 0, a: 0} - key5: {r: 0, g: 0, b: 0, a: 0} - key6: {r: 0, g: 0, b: 0, a: 0} - key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_Mode: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 ---- !u!1 &1927994641 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1927994644} - - component: {fileID: 1927994643} - - component: {fileID: 1927994642} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1927994642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1927994641} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1927994643 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1927994641} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1927994644 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1927994641} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity.meta deleted file mode 100644 index eeb6f13..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 97fd62303685de449a991eaa58a92cd5 -DefaultImporter: - userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity deleted file mode 100644 index b34a459..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 1 - m_BakeResolution: 10 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &45526437 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 45526438} - - component: {fileID: 45526440} - - component: {fileID: 45526439} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &45526438 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 45526437} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!81 &45526439 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 45526437} - m_Enabled: 1 ---- !u!20 &45526440 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 45526437} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!1 &1193612053 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1193612055} - - component: {fileID: 1193612054} - - component: {fileID: 1193612056} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1193612054 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1193612053} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Bag - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Bag - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1193612055 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1193612053} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1193612056 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1193612053} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 72adad54c37cc25499988e9b785d5b90, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1918973540 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1918973543} - - component: {fileID: 1918973542} - - component: {fileID: 1918973541} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1918973541 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1918973540} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1918973542 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1918973540} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1918973543 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1918973540} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2134384559 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 2134384562} - - component: {fileID: 2134384563} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2134384562 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2134384559} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2134384563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2134384559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity.meta deleted file mode 100644 index 7fe0958..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7bb0881047732e549a389bf881da507b -timeCreated: 1446193142 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity deleted file mode 100644 index d41929a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 1 - m_BakeResolution: 10 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &117386828 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 117386830} - - component: {fileID: 117386829} - - component: {fileID: 117386831} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &117386829 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 117386828} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Cooldown - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/CoolDown - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &117386830 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 117386828} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &117386831 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 117386828} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c59a131f345dd4e4895409b111e0c434, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &490692173 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 490692175} - - component: {fileID: 490692177} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &490692175 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 490692173} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &490692177 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 490692173} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1398945596 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1398945599} - - component: {fileID: 1398945598} - - component: {fileID: 1398945597} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1398945597 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1398945596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1398945598 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1398945596} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1398945599 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1398945596} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1457713335 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1457713336} - - component: {fileID: 1457713338} - - component: {fileID: 1457713337} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1457713336 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1457713335} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!81 &1457713337 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1457713335} - m_Enabled: 1 ---- !u!20 &1457713338 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1457713335} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity.meta deleted file mode 100644 index a974eaf..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 385f5f841a2b93449bc0a7d72f1034e0 -timeCreated: 1446194671 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity deleted file mode 100644 index 734e9d3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 1 - m_BakeResolution: 10 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &99975389 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 99975391} - - component: {fileID: 99975390} - - component: {fileID: 99975392} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &99975390 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 99975389} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Emoji - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Emoji - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &99975391 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 99975389} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &99975392 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 99975389} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4953851686ef2ed4d90f67c5fe144849, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &608649424 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 608649427} - - component: {fileID: 608649426} - - component: {fileID: 608649425} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &608649425 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 608649424} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &608649426 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 608649424} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &608649427 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 608649424} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &661498341 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 661498343} - - component: {fileID: 661498345} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &661498343 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 661498341} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &661498345 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 661498341} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1897786052 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1897786053} - - component: {fileID: 1897786055} - - component: {fileID: 1897786054} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1897786053 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1897786052} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!81 &1897786054 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1897786052} - m_Enabled: 1 ---- !u!20 &1897786055 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1897786052} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity.meta deleted file mode 100644 index 150a776..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3231025ce71198b4fabbaa7c03b429d8 -timeCreated: 1446194671 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity deleted file mode 100644 index f65d456..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity +++ /dev/null @@ -1,447 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 1 - m_BakeResolution: 10 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 0aebb3a802b964f409058bff053096c2, - type: 2} ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &5885049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5885052} - - component: {fileID: 5885051} - - component: {fileID: 5885050} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &5885050 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5885049} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &5885051 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5885049} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &5885052 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5885049} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 9.105556, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &392768408 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 392768413} - - component: {fileID: 392768412} - - component: {fileID: 392768409} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &392768409 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 392768408} - m_Enabled: 1 ---- !u!20 &392768412 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 392768408} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 32.9 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &392768413 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 392768408} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 1.8, z: 300} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &871184436 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 871184437} - - component: {fileID: 871184440} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &871184437 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 871184436} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &871184440 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 871184436} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1423413459 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1423413462} - - component: {fileID: 1423413461} - - component: {fileID: 1423413460} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1423413460 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1423413459} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 09cf2c20abdf7ea428bd3f1c68941949, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1423413461 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1423413459} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Joystick - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Joystick - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1423413462 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1423413459} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 871184437} - - {fileID: 1423413462} - - {fileID: 392768413} - - {fileID: 5885052} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity.meta deleted file mode 100644 index 836e21c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 716b6afb6abbcdd4297021a99ac3795f -timeCreated: 1446193142 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity deleted file mode 100644 index c71bc1e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity +++ /dev/null @@ -1,6728 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44745964, g: 0.4974082, b: 0.5752875, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 8e3ccb58ee41f47ebbbb7e2333027555, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &8026480 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8026481} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8026481 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8026480} - serializedVersion: 2 - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1597156954} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &9235254 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9235255} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9235255 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9235254} - serializedVersion: 2 - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 136750823} - m_Father: {fileID: 371607150} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &24949879 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 24949880} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &24949880 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 24949879} - serializedVersion: 2 - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 604023225} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &38476557 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 38476558} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &38476558 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 38476557} - serializedVersion: 2 - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1854384073} - m_Father: {fileID: 706385179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &42026052 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 42026053} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &42026053 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 42026052} - serializedVersion: 2 - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 165461687} - m_Father: {fileID: 1126811421} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &46044536 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 46044537} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &46044537 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 46044536} - serializedVersion: 2 - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1683487132} - m_Father: {fileID: 1783272050} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &46311997 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 46311998} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &46311998 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 46311997} - serializedVersion: 2 - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 205846879} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &57203413 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 57203414} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &57203414 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 57203413} - serializedVersion: 2 - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1626688692} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &68195041 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 68195042} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &68195042 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 68195041} - serializedVersion: 2 - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 991242639} - m_Father: {fileID: 998862636} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &74036653 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 74036654} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &74036654 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 74036653} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 217420212} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &95200554 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 95200555} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &95200555 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 95200554} - serializedVersion: 2 - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1687218885} - m_Father: {fileID: 580123258} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &97297040 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 97297041} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &97297041 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97297040} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 813419576} - m_Father: {fileID: 457834452} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &114428769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 114428770} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &114428770 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 114428769} - serializedVersion: 2 - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2059659452} - m_Father: {fileID: 2033428167} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &119741639 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 119741640} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &119741640 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 119741639} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1615731042} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &134573548 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 134573549} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &134573549 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 134573548} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1818267082} - m_Father: {fileID: 1232298640} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &135814318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 135814319} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &135814319 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 135814318} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 829452683} - m_Father: {fileID: 1456111964} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &136750822 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 136750823} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &136750823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 136750822} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1726253866} - m_Father: {fileID: 9235255} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &138086933 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 138086934} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &138086934 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 138086933} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1072460526} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &149689137 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 149689138} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &149689138 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 149689137} - serializedVersion: 2 - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1417686770} - m_Father: {fileID: 829452683} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &154354286 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 154354287} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &154354287 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 154354286} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 205846879} - m_Father: {fileID: 158306131} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &158306130 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 158306131} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &158306131 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 158306130} - serializedVersion: 2 - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 154354287} - m_Father: {fileID: 580123258} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &165461686 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 165461687} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &165461687 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 165461686} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1845262357} - m_Father: {fileID: 42026053} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &179016198 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 179016199} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &179016199 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 179016198} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1785339272} - m_Father: {fileID: 1273850663} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &188167694 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 188167695} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &188167695 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 188167694} - serializedVersion: 2 - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 658372416} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &189811238 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 189811239} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &189811239 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 189811238} - serializedVersion: 2 - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 771109981} - m_Father: {fileID: 404520935} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &196781247 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 196781248} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &196781248 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 196781247} - serializedVersion: 2 - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1473934251} - m_Father: {fileID: 1899068845} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &205846878 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 205846879} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &205846879 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 205846878} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 46311998} - m_Father: {fileID: 154354287} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &212022623 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 212022624} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &212022624 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 212022623} - serializedVersion: 2 - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 658372416} - m_Father: {fileID: 500637370} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &217420211 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 217420212} - - component: {fileID: 217420213} - m_Layer: 0 - m_Name: npc2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &217420212 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 217420211} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} - m_LocalPosition: {x: 252, y: 0, z: 306} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 434386591} - - {fileID: 1435058301} - - {fileID: 987352116} - - {fileID: 74036654} - - {fileID: 445166254} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!111 &217420213 -Animation: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 217420211} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!1 &240332827 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 240332828} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &240332828 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 240332827} - serializedVersion: 2 - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 987352116} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &257393200 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 257393201} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &257393201 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 257393200} - serializedVersion: 2 - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 922170558} - m_Father: {fileID: 1765977908} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &274310896 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 274310897} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &274310897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274310896} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1615731042} - m_Father: {fileID: 801423770} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &298011153 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 298011154} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &298011154 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 298011153} - serializedVersion: 2 - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1305918813} - - {fileID: 1624528395} - - {fileID: 1732835091} - - {fileID: 1055996319} - - {fileID: 1641890755} - m_Father: {fileID: 771109981} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &324152166 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 324152167} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &324152167 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 324152166} - serializedVersion: 2 - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2033428167} - m_Father: {fileID: 1202926684} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &338062899 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 338062900} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &338062900 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 338062899} - serializedVersion: 2 - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 395013118} - m_Father: {fileID: 1623921071} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &371607149 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 371607150} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &371607150 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 371607149} - serializedVersion: 2 - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 801423770} - - {fileID: 9235255} - - {fileID: 1108666173} - - {fileID: 2130665635} - - {fileID: 760443869} - m_Father: {fileID: 1729301266} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &372805547 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 372805548} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &372805548 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 372805547} - serializedVersion: 2 - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1508742174} - m_Father: {fileID: 777325323} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &381286659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 381286660} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &381286660 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 381286659} - serializedVersion: 2 - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2070392242} - m_Father: {fileID: 1732835091} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &386811204 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 386811205} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &386811205 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386811204} - serializedVersion: 2 - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 556768418} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &395013117 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 395013118} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &395013118 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 395013117} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 437347497} - m_Father: {fileID: 338062900} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &404520934 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 404520935} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &404520935 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 404520934} - serializedVersion: 2 - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 189811239} - m_Father: {fileID: 2033428167} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &408109125 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 408109126} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &408109126 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 408109125} - serializedVersion: 2 - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1534725961} - m_Father: {fileID: 1255856681} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &434386590 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 434386591} - - component: {fileID: 434386592} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &434386591 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 434386590} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 217420212} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!137 &434386592 -SkinnedMeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 434386590} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 3 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 324152167} - - {fileID: 1202926684} - - {fileID: 404520935} - - {fileID: 114428770} - - {fileID: 1899068845} - - {fileID: 1273850663} - - {fileID: 1941594535} - - {fileID: 1120665551} - - {fileID: 189811239} - - {fileID: 196781248} - - {fileID: 537665993} - - {fileID: 682091242} - - {fileID: 500637370} - - {fileID: 1308184864} - - {fileID: 675859161} - - {fileID: 1376923168} - - {fileID: 212022624} - - {fileID: 2033428167} - - {fileID: 1473934251} - - {fileID: 1754969252} - - {fileID: 1176946112} - - {fileID: 556768418} - - {fileID: 1456111964} - - {fileID: 683578792} - - {fileID: 880517438} - - {fileID: 1436829388} - - {fileID: 135814319} - - {fileID: 458793805} - - {fileID: 829452683} - - {fileID: 721671422} - - {fileID: 955440361} - - {fileID: 1897887745} - - {fileID: 953908362} - - {fileID: 725918770} - - {fileID: 814978601} - - {fileID: 607641931} - - {fileID: 1987049189} - - {fileID: 149689138} - - {fileID: 2032185436} - - {fileID: 991242639} - - {fileID: 68195042} - - {fileID: 998862636} - - {fileID: 386811205} - - {fileID: 732619709} - - {fileID: 2115796942} - - {fileID: 771109981} - - {fileID: 298011154} - - {fileID: 1305918813} - - {fileID: 457834452} - - {fileID: 1055996319} - - {fileID: 1641890755} - - {fileID: 1484246807} - - {fileID: 1232298640} - - {fileID: 1732835091} - - {fileID: 381286660} - - {fileID: 97297041} - - {fileID: 1624528395} - - {fileID: 2055053893} - - {fileID: 2070392242} - - {fileID: 597592370} - - {fileID: 1717505090} - - {fileID: 134573549} - - {fileID: 1785339272} - - {fileID: 1624225105} - - {fileID: 179016199} - - {fileID: 1623921071} - - {fileID: 658372416} - - {fileID: 188167695} - - {fileID: 338062900} - - {fileID: 395013118} - - {fileID: 437347497} - - {fileID: 1185950259} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 1941594535} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!1 &437347496 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 437347497} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &437347497 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 437347496} - serializedVersion: 2 - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1185950259} - m_Father: {fileID: 395013118} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &442567364 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 442567365} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &442567365 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 442567364} - serializedVersion: 2 - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 814978601} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &443119864 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 443119865} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &443119865 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443119864} - serializedVersion: 2 - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1765977908} - m_Father: {fileID: 1255856681} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &445166253 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 445166254} - - component: {fileID: 445166255} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &445166254 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445166253} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 217420212} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &445166255 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445166253} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!1 &453408380 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 453408381} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &453408381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 453408380} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 604023225} - m_Father: {fileID: 760443869} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &457834451 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 457834452} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &457834452 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 457834451} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 97297041} - m_Father: {fileID: 1305918813} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &458793804 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 458793805} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &458793805 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458793804} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1987049189} - m_Father: {fileID: 1436829388} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &500637369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 500637370} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &500637370 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 500637369} - serializedVersion: 2 - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 212022624} - m_Father: {fileID: 1941594535} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &500830115 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 500830116} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &500830116 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 500830115} - serializedVersion: 2 - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 730871987} - m_Father: {fileID: 580123258} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &537665992 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 537665993} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &537665993 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 537665992} - serializedVersion: 2 - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1754969252} - m_Father: {fileID: 1941594535} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &548668697 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 548668698} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &548668698 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 548668697} - serializedVersion: 2 - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1719406336} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &556768417 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 556768418} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &556768418 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 556768417} - serializedVersion: 2 - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 386811205} - m_Father: {fileID: 1754969252} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &575458936 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 575458937} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &575458937 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 575458936} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 597592370} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &580123257 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 580123258} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &580123258 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 580123257} - serializedVersion: 2 - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 158306131} - - {fileID: 936597944} - - {fileID: 866953093} - - {fileID: 500830116} - - {fileID: 95200555} - m_Father: {fileID: 1683487132} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &597592369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 597592370} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &597592370 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597592369} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 575458937} - m_Father: {fileID: 2055053893} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &604023224 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 604023225} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &604023225 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 604023224} - serializedVersion: 2 - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 24949880} - m_Father: {fileID: 453408381} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &607641930 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 607641931} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &607641931 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 607641930} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1851034960} - m_Father: {fileID: 955440361} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &622121875 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 622121876} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &622121876 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 622121875} - serializedVersion: 2 - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1726253866} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &658372415 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658372416} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658372416 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658372415} - serializedVersion: 2 - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 188167695} - m_Father: {fileID: 212022624} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &668590587 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 668590588} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &668590588 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 668590587} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1597156954} - m_Father: {fileID: 1108666173} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &675859160 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 675859161} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &675859161 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 675859160} - serializedVersion: 2 - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1308184864} - m_Father: {fileID: 1941594535} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &682091241 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 682091242} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &682091242 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 682091241} - serializedVersion: 2 - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1376923168} - m_Father: {fileID: 1941594535} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &683578791 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 683578792} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &683578792 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 683578791} - serializedVersion: 2 - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 880517438} - m_Father: {fileID: 1456111964} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &686251910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 686251911} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &686251911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686251910} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1412897040} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &689964215 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 689964216} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &689964216 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 689964215} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1087916989} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &706385178 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 706385179} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &706385179 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 706385178} - serializedVersion: 2 - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 915895223} - - {fileID: 38476558} - - {fileID: 1783272050} - m_Father: {fileID: 769881371} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &721671421 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 721671422} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &721671422 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 721671421} - serializedVersion: 2 - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 955440361} - m_Father: {fileID: 1456111964} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &725918769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 725918770} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &725918770 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 725918769} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1681448511} - m_Father: {fileID: 880517438} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &730847545 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 730847546} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &730847546 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 730847545} - serializedVersion: 2 - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1805010958} - m_Father: {fileID: 1259619146} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &730871986 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 730871987} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &730871987 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 730871986} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 846617211} - m_Father: {fileID: 500830116} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &731324603 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 731324604} - - component: {fileID: 731324605} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &731324604 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 731324603} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1412897040} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &731324605 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 731324603} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!1 &732619708 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 732619709} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &732619709 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 732619708} - serializedVersion: 2 - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2115796942} - m_Father: {fileID: 1376923168} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &760443868 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 760443869} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &760443869 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760443868} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 453408381} - m_Father: {fileID: 371607150} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &769881370 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 769881371} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &769881371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 769881370} - serializedVersion: 2 - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 706385179} - m_Father: {fileID: 860044083} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &771109980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 771109981} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &771109981 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 771109980} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 298011154} - m_Father: {fileID: 189811239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &777325322 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 777325323} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &777325323 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 777325322} - serializedVersion: 2 - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 372805548} - m_Father: {fileID: 1019351139} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &785937531 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 785937532} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &785937532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 785937531} - serializedVersion: 2 - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1717505090} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &801423769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 801423770} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &801423770 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 801423769} - serializedVersion: 2 - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 274310897} - m_Father: {fileID: 371607150} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &803839621 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 803839622} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &803839622 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 803839621} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2019397985} - m_Father: {fileID: 2130665635} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &813419575 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 813419576} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &813419576 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 813419575} - serializedVersion: 2 - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 97297041} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &814978600 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 814978601} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &814978601 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 814978600} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 442567365} - m_Father: {fileID: 953908362} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &829452682 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 829452683} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &829452683 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 829452682} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 149689138} - m_Father: {fileID: 135814319} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &835047215 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 835047216} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &835047216 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 835047215} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1641838338} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &845860363 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 845860366} - - component: {fileID: 845860365} - - component: {fileID: 845860364} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &845860364 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845860363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &845860365 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845860363} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &845860366 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845860363} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 10.449827, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &846617210 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 846617211} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &846617211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 846617210} - serializedVersion: 2 - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1068629830} - m_Father: {fileID: 730871987} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &860044082 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 860044083} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &860044083 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 860044082} - serializedVersion: 2 - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1151460205} - - {fileID: 1735401710} - - {fileID: 769881371} - m_Father: {fileID: 1255856681} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &866953092 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 866953093} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &866953093 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 866953092} - serializedVersion: 2 - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1260427640} - m_Father: {fileID: 580123258} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &880517437 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 880517438} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &880517438 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 880517437} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 725918770} - m_Father: {fileID: 683578792} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &915895222 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 915895223} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &915895223 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 915895222} - serializedVersion: 2 - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1445961687} - m_Father: {fileID: 706385179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &922170557 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 922170558} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &922170558 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 922170557} - serializedVersion: 2 - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 257393201} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &935269762 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 935269763} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &935269763 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 935269762} - serializedVersion: 2 - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1019351139} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &936597943 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 936597944} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &936597944 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936597943} - serializedVersion: 2 - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1078307844} - m_Father: {fileID: 580123258} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &953908361 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 953908362} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &953908362 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 953908361} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 814978601} - m_Father: {fileID: 1897887745} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &955440360 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 955440361} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &955440361 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 955440360} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 607641931} - m_Father: {fileID: 721671422} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &987352115 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 987352116} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &987352116 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 987352115} - serializedVersion: 2 - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 240332828} - - {fileID: 1941594535} - - {fileID: 1623921071} - m_Father: {fileID: 217420212} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &991242638 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 991242639} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &991242639 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 991242638} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1735034889} - m_Father: {fileID: 68195042} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &993389079 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 993389080} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &993389080 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 993389079} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2097573778} - m_Father: {fileID: 1151460205} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &994131360 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 994131361} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &994131361 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 994131360} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1412897040} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &998862635 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 998862636} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &998862636 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 998862635} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 68195042} - m_Father: {fileID: 1120665551} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1019351138 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1019351139} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1019351139 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1019351138} - serializedVersion: 2 - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 935269763} - - {fileID: 1255856681} - - {fileID: 777325323} - m_Father: {fileID: 1412897040} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1032824738 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1032824739} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1032824739 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1032824738} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1120524651} - m_Father: {fileID: 2097573778} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1055996318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1055996319} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1055996319 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1055996318} - serializedVersion: 2 - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1484246807} - m_Father: {fileID: 298011154} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1068629829 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1068629830} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1068629830 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1068629829} - serializedVersion: 2 - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 846617211} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1072460525 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1072460526} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1072460526 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1072460525} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 138086934} - m_Father: {fileID: 1687218885} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1078307843 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1078307844} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1078307844 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1078307843} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1087916989} - m_Father: {fileID: 936597944} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1087916988 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1087916989} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1087916989 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1087916988} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 689964216} - m_Father: {fileID: 1078307844} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1108666172 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1108666173} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1108666173 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1108666172} - serializedVersion: 2 - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 668590588} - m_Father: {fileID: 371607150} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1120524650 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1120524651} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1120524651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120524650} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1032824739} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1120665550 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1120665551} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1120665551 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120665550} - serializedVersion: 2 - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 998862636} - m_Father: {fileID: 1202926684} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1126811420 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1126811421} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1126811421 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1126811420} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 42026053} - m_Father: {fileID: 1735401710} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1151460204 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1151460205} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1151460205 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1151460204} - serializedVersion: 2 - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 993389080} - m_Father: {fileID: 860044083} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1176946111 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1176946112} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1176946112 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1176946111} - serializedVersion: 2 - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2032185436} - m_Father: {fileID: 1308184864} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1185950258 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1185950259} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1185950259 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1185950258} - serializedVersion: 2 - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 437347497} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1202926683 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1202926684} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1202926684 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1202926683} - serializedVersion: 2 - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1120665551} - - {fileID: 1273850663} - - {fileID: 324152167} - m_Father: {fileID: 1941594535} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1209927481 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1209927482} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1209927482 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1209927481} - serializedVersion: 2 - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1259619146} - m_Father: {fileID: 1255856681} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1232298639 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1232298640} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1232298640 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1232298639} - serializedVersion: 2 - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 134573549} - m_Father: {fileID: 1641890755} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1255856680 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1255856681} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1255856681 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1255856680} - serializedVersion: 2 - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 860044083} - - {fileID: 443119865} - - {fileID: 1507441566} - - {fileID: 408109126} - - {fileID: 1209927482} - m_Father: {fileID: 1019351139} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1259619145 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1259619146} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1259619146 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1259619145} - serializedVersion: 2 - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 730847546} - m_Father: {fileID: 1209927482} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1260427639 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1260427640} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1260427640 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1260427639} - serializedVersion: 2 - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1641838338} - m_Father: {fileID: 866953093} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1273850662 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1273850663} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1273850663 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1273850662} - serializedVersion: 2 - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 179016199} - m_Father: {fileID: 1202926684} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1287170476 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1287170477} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1287170477 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1287170476} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1987049189} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1305918812 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1305918813} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1305918813 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1305918812} - serializedVersion: 2 - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 457834452} - m_Father: {fileID: 298011154} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1308184863 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1308184864} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1308184864 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1308184863} - serializedVersion: 2 - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1176946112} - m_Father: {fileID: 675859161} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1313601295 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1313601296} - - component: {fileID: 1313601297} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1313601296 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1313601295} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1412897040} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!137 &1313601297 -SkinnedMeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1313601295} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 3 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 769881371} - - {fileID: 860044083} - - {fileID: 1783272050} - - {fileID: 915895223} - - {fileID: 38476558} - - {fileID: 1735401710} - - {fileID: 1255856681} - - {fileID: 1151460205} - - {fileID: 46044537} - - {fileID: 1854384073} - - {fileID: 443119865} - - {fileID: 1507441566} - - {fileID: 408109126} - - {fileID: 1259619146} - - {fileID: 1209927482} - - {fileID: 1333956611} - - {fileID: 1534725961} - - {fileID: 706385179} - - {fileID: 1729301266} - - {fileID: 1765977908} - - {fileID: 730847546} - - {fileID: 257393201} - - {fileID: 371607150} - - {fileID: 801423770} - - {fileID: 274310897} - - {fileID: 2130665635} - - {fileID: 760443869} - - {fileID: 803839622} - - {fileID: 453408381} - - {fileID: 1108666173} - - {fileID: 668590588} - - {fileID: 9235255} - - {fileID: 136750823} - - {fileID: 1615731042} - - {fileID: 1726253866} - - {fileID: 1597156954} - - {fileID: 2019397985} - - {fileID: 604023225} - - {fileID: 1805010958} - - {fileID: 1032824739} - - {fileID: 2097573778} - - {fileID: 993389080} - - {fileID: 922170558} - - {fileID: 1719406336} - - {fileID: 548668698} - - {fileID: 1683487132} - - {fileID: 580123258} - - {fileID: 158306131} - - {fileID: 154354287} - - {fileID: 500830116} - - {fileID: 95200555} - - {fileID: 730871987} - - {fileID: 1687218885} - - {fileID: 866953093} - - {fileID: 1260427640} - - {fileID: 205846879} - - {fileID: 936597944} - - {fileID: 1078307844} - - {fileID: 1641838338} - - {fileID: 1087916989} - - {fileID: 846617211} - - {fileID: 1072460526} - - {fileID: 42026053} - - {fileID: 165461687} - - {fileID: 1126811421} - - {fileID: 777325323} - - {fileID: 1626688692} - - {fileID: 57203414} - - {fileID: 372805548} - - {fileID: 1508742174} - - {fileID: 1591871508} - - {fileID: 1925075508} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 1255856681} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!1 &1333956610 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1333956611} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1333956611 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333956610} - serializedVersion: 2 - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1719406336} - m_Father: {fileID: 1507441566} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1376923167 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1376923168} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1376923168 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1376923167} - serializedVersion: 2 - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 732619709} - m_Father: {fileID: 682091242} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1412897039 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1412897040} - - component: {fileID: 1412897041} - m_Layer: 0 - m_Name: npc1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1412897040 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1412897039} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} - m_LocalPosition: {x: 250, y: 0, z: 305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1313601296} - - {fileID: 994131361} - - {fileID: 1019351139} - - {fileID: 686251911} - - {fileID: 731324604} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!111 &1412897041 -Animation: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1412897039} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!1 &1417686769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1417686770} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1417686770 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1417686769} - serializedVersion: 2 - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 149689138} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1435058300 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1435058301} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1435058301 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1435058300} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 217420212} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1436829387 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1436829388} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1436829388 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1436829387} - serializedVersion: 2 - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 458793805} - m_Father: {fileID: 1456111964} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1437675034 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1437675035} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1437675035 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1437675034} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2070392242} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1445961686 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1445961687} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1445961687 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1445961686} - serializedVersion: 2 - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 915895223} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1456111963 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1456111964} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1456111964 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1456111963} - serializedVersion: 2 - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 683578792} - - {fileID: 1897887745} - - {fileID: 721671422} - - {fileID: 1436829388} - - {fileID: 135814319} - m_Father: {fileID: 1473934251} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1473934250 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1473934251} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1473934251 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1473934250} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1456111964} - m_Father: {fileID: 196781248} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1484246806 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1484246807} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1484246807 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1484246806} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1717505090} - m_Father: {fileID: 1055996319} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1486169810 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1486169811} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1486169811 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1486169810} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1624225105} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1507441565 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1507441566} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1507441566 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1507441565} - serializedVersion: 2 - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1333956611} - m_Father: {fileID: 1255856681} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1508742173 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1508742174} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1508742174 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1508742173} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1591871508} - m_Father: {fileID: 372805548} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1534725960 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1534725961} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1534725961 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1534725960} - serializedVersion: 2 - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1626688692} - m_Father: {fileID: 408109126} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1571658180 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1571658181} - - component: {fileID: 1571658182} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1571658181 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571658180} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1571658182 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571658180} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f24b49a96743734c8d2ef9ba2c9b32d, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1591871507 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1591871508} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1591871508 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1591871507} - serializedVersion: 2 - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1925075508} - m_Father: {fileID: 1508742174} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1597156953 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1597156954} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1597156954 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1597156953} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8026481} - m_Father: {fileID: 668590588} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1615731041 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1615731042} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1615731042 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1615731041} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 119741640} - m_Father: {fileID: 274310897} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1623921070 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1623921071} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1623921071 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1623921070} - serializedVersion: 2 - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 338062900} - m_Father: {fileID: 987352116} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1624225104 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1624225105} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1624225105 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1624225104} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1486169811} - m_Father: {fileID: 1785339272} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1624528394 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1624528395} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1624528395 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1624528394} - serializedVersion: 2 - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2055053893} - m_Father: {fileID: 298011154} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1626688691 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1626688692} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1626688692 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1626688691} - serializedVersion: 2 - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 57203414} - m_Father: {fileID: 1534725961} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1641838337 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1641838338} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1641838338 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1641838337} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 835047216} - m_Father: {fileID: 1260427640} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1641890754 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1641890755} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1641890755 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1641890754} - serializedVersion: 2 - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1232298640} - m_Father: {fileID: 298011154} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1681448510 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1681448511} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1681448511 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1681448510} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 725918770} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1683487131 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1683487132} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1683487132 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1683487131} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 580123258} - m_Father: {fileID: 46044537} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1687218884 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1687218885} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1687218885 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1687218884} - serializedVersion: 2 - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1072460526} - m_Father: {fileID: 95200555} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1717505089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1717505090} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1717505090 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1717505089} - serializedVersion: 2 - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 785937532} - m_Father: {fileID: 1484246807} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1719406335 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1719406336} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1719406336 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1719406335} - serializedVersion: 2 - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 548668698} - m_Father: {fileID: 1333956611} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1726253865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1726253866} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1726253866 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1726253865} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 622121876} - m_Father: {fileID: 136750823} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1729301265 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1729301266} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1729301266 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1729301265} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 371607150} - m_Father: {fileID: 1854384073} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1732835090 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1732835091} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1732835091 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1732835090} - serializedVersion: 2 - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 381286660} - m_Father: {fileID: 298011154} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1735034888 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1735034889} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1735034889 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1735034888} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 991242639} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1735401709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1735401710} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1735401710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1735401709} - serializedVersion: 2 - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1126811421} - m_Father: {fileID: 860044083} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1753761744 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1753761750} - - component: {fileID: 1753761749} - - component: {fileID: 1753761748} - - component: {fileID: 1753761746} - - component: {fileID: 1753761745} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!45 &1753761745 -Skybox: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753761744} - m_Enabled: 1 - m_CustomSkybox: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} ---- !u!81 &1753761746 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753761744} - m_Enabled: 1 ---- !u!124 &1753761748 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753761744} - m_Enabled: 1 ---- !u!20 &1753761749 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753761744} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 58.5 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1753761750 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753761744} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 1.8, z: 300} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1754969251 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1754969252} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1754969252 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1754969251} - serializedVersion: 2 - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 556768418} - m_Father: {fileID: 537665993} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1765977907 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1765977908} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1765977908 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1765977907} - serializedVersion: 2 - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 257393201} - m_Father: {fileID: 443119865} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1783272049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1783272050} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1783272050 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1783272049} - serializedVersion: 2 - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 46044537} - m_Father: {fileID: 706385179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1784465171 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1784465173} - - component: {fileID: 1784465172} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &1784465172 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1784465171} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294965503 - m_RenderingLayerMask: 1 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &1784465173 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1784465171} - serializedVersion: 2 - m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} - m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1785339271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1785339272} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1785339272 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1785339271} - serializedVersion: 2 - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1624225105} - m_Father: {fileID: 179016199} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1805010957 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1805010958} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1805010958 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1805010957} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 730847546} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1818267081 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1818267082} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1818267082 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1818267081} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 134573549} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1845262356 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1845262357} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1845262357 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1845262356} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 165461687} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1851034959 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1851034960} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1851034960 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1851034959} - serializedVersion: 2 - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 607641931} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1854384072 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1854384073} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1854384073 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1854384072} - serializedVersion: 2 - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1729301266} - m_Father: {fileID: 38476558} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1897887744 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1897887745} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1897887745 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1897887744} - serializedVersion: 2 - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 953908362} - m_Father: {fileID: 1456111964} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1899068844 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1899068845} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1899068845 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1899068844} - serializedVersion: 2 - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 196781248} - m_Father: {fileID: 2033428167} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1903620620 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1903620621} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1903620621 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1903620620} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2019397985} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1925075507 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1925075508} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1925075508 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1925075507} - serializedVersion: 2 - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1591871508} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1941594534 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1941594535} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1941594535 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1941594534} - serializedVersion: 2 - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1202926684} - - {fileID: 537665993} - - {fileID: 682091242} - - {fileID: 500637370} - - {fileID: 675859161} - m_Father: {fileID: 987352116} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1987049188 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1987049189} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1987049189 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987049188} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1287170477} - m_Father: {fileID: 458793805} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2019397984 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2019397985} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2019397985 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019397984} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1903620621} - m_Father: {fileID: 803839622} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2032185435 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2032185436} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2032185436 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2032185435} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1176946112} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2033428166 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2033428167} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2033428167 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2033428166} - serializedVersion: 2 - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 114428770} - - {fileID: 1899068845} - - {fileID: 404520935} - m_Father: {fileID: 324152167} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2055053892 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2055053893} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2055053893 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2055053892} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 597592370} - m_Father: {fileID: 1624528395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2059659451 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2059659452} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2059659452 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2059659451} - serializedVersion: 2 - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 114428770} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2070392241 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2070392242} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2070392242 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2070392241} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1437675035} - m_Father: {fileID: 381286660} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2097573777 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2097573778} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2097573778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2097573777} - serializedVersion: 2 - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1032824739} - m_Father: {fileID: 993389080} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2115796941 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2115796942} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2115796942 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2115796941} - serializedVersion: 2 - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 732619709} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2130665634 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2130665635} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2130665635 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2130665634} - serializedVersion: 2 - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 803839622} - m_Father: {fileID: 371607150} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 1571658181} - - {fileID: 1784465173} - - {fileID: 1412897040} - - {fileID: 1753761750} - - {fileID: 217420212} - - {fileID: 845860366} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity.meta deleted file mode 100644 index 83788e2..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8a076ecd25050714ab2eda1d84dfa532 -timeCreated: 1446540639 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity deleted file mode 100644 index dfc2817..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity +++ /dev/null @@ -1,6871 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44745916, g: 0.49740785, b: 0.57528687, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 2dc21c4bdbd6b4258b510d3ebeb1c9fc, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &451005637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 451005638} - - component: {fileID: 451005639} - - component: {fileID: 451005641} - - component: {fileID: 451005640} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &451005638 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451005637} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &451005639 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451005637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3ee84d8c960d2404893a09cb4009bee8, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &451005640 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451005637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ace51c3cbb5309547a7029cadaaa20ca, type: 3} - m_Name: - m_EditorClassIdentifier: - Items: [] - PreloadPackages: - - UI/EmitNumbers ---- !u!114 &451005641 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451005637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!114 &741969889 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748012009} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!111 &742273939 -Animation: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747977697} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!137 &742837355 -SkinnedMeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748043937} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 3 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 747685541} - - {fileID: 747694353} - - {fileID: 747765327} - - {fileID: 747658005} - - {fileID: 747653049} - - {fileID: 747745649} - - {fileID: 747676755} - - {fileID: 747745119} - - {fileID: 747668097} - - {fileID: 747676565} - - {fileID: 747761859} - - {fileID: 747762985} - - {fileID: 747695507} - - {fileID: 747708435} - - {fileID: 747680275} - - {fileID: 747701773} - - {fileID: 747747209} - - {fileID: 747697007} - - {fileID: 747688459} - - {fileID: 747727965} - - {fileID: 747734853} - - {fileID: 747763735} - - {fileID: 747671683} - - {fileID: 747737039} - - {fileID: 747718761} - - {fileID: 747692027} - - {fileID: 747761059} - - {fileID: 747715121} - - {fileID: 747726437} - - {fileID: 747715051} - - {fileID: 747726121} - - {fileID: 747712245} - - {fileID: 747697395} - - {fileID: 747669167} - - {fileID: 747710837} - - {fileID: 747739641} - - {fileID: 747697887} - - {fileID: 747764169} - - {fileID: 747689805} - - {fileID: 747709257} - - {fileID: 747715213} - - {fileID: 747743861} - - {fileID: 747757751} - - {fileID: 747689433} - - {fileID: 747691967} - - {fileID: 747720817} - - {fileID: 747674597} - - {fileID: 747671695} - - {fileID: 747656379} - - {fileID: 747730023} - - {fileID: 747747327} - - {fileID: 747669641} - - {fileID: 747744777} - - {fileID: 747759565} - - {fileID: 747705793} - - {fileID: 747718789} - - {fileID: 747670377} - - {fileID: 747714493} - - {fileID: 747678655} - - {fileID: 747735445} - - {fileID: 747720239} - - {fileID: 747696107} - - {fileID: 747763849} - - {fileID: 747699587} - - {fileID: 747746651} - - {fileID: 747720217} - - {fileID: 747676421} - - {fileID: 747707791} - - {fileID: 747748823} - - {fileID: 747667509} - - {fileID: 747677235} - - {fileID: 747669843} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 747676755} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!4 &747653049 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748001455} - serializedVersion: 2 - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747676565} - m_Father: {fileID: 747697007} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747656379 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748011971} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747718789} - m_Father: {fileID: 747671695} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747658005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747977499} - serializedVersion: 2 - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747732607} - m_Father: {fileID: 747697007} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747667509 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747999313} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747677235} - m_Father: {fileID: 747748823} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747668097 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747999325} - serializedVersion: 2 - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747720817} - m_Father: {fileID: 747765327} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747668581 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747995489} - serializedVersion: 2 - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747739641} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747669167 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748039089} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747699837} - m_Father: {fileID: 747718761} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747669381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748043937} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747739077} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747669641 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748005503} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747720239} - m_Father: {fileID: 747730023} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747669843 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747997303} - serializedVersion: 2 - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747677235} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747670377 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748021851} - serializedVersion: 2 - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747714493} - m_Father: {fileID: 747674597} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747671475 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747990293} - serializedVersion: 2 - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747744551} - - {fileID: 747676755} - - {fileID: 747720217} - m_Father: {fileID: 747739077} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747671683 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748055205} - serializedVersion: 2 - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747737039} - - {fileID: 747712245} - - {fileID: 747715051} - - {fileID: 747692027} - - {fileID: 747761059} - m_Father: {fileID: 747688459} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747671695 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747976201} - serializedVersion: 2 - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747656379} - m_Father: {fileID: 747674597} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747674597 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748030713} - serializedVersion: 2 - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747671695} - - {fileID: 747670377} - - {fileID: 747759565} - - {fileID: 747730023} - - {fileID: 747747327} - m_Father: {fileID: 747720817} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747676421 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748046791} - serializedVersion: 2 - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747707791} - m_Father: {fileID: 747747209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747676565 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748037893} - serializedVersion: 2 - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747688459} - m_Father: {fileID: 747653049} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747676755 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747989589} - serializedVersion: 2 - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747694353} - - {fileID: 747761859} - - {fileID: 747762985} - - {fileID: 747695507} - - {fileID: 747680275} - m_Father: {fileID: 747671475} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747677235 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747969751} - serializedVersion: 2 - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747669843} - m_Father: {fileID: 747667509} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747678655 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748026567} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747694829} - m_Father: {fileID: 747705793} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747679097 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748005625} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747696107} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747679889 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748049095} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747699587} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747680275 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747950271} - serializedVersion: 2 - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747708435} - m_Father: {fileID: 747676755} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747685541 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747968275} - serializedVersion: 2 - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747697007} - m_Father: {fileID: 747694353} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747686381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748012009} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747739077} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747687051 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748019781} - serializedVersion: 2 - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747710837} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747688459 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748009121} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747671683} - m_Father: {fileID: 747676565} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747689433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747972211} - serializedVersion: 2 - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747691967} - m_Father: {fileID: 747701773} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747689805 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748040323} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747734853} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747691967 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747971061} - serializedVersion: 2 - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747689433} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747692027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747967315} - serializedVersion: 2 - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747715121} - m_Father: {fileID: 747671683} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747694353 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748039393} - serializedVersion: 2 - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747745119} - - {fileID: 747745649} - - {fileID: 747685541} - m_Father: {fileID: 747676755} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747694829 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747998205} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747678655} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747695507 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748017485} - serializedVersion: 2 - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747747209} - m_Father: {fileID: 747676755} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747696107 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747970635} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747679097} - m_Father: {fileID: 747744777} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747697007 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748059501} - serializedVersion: 2 - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747658005} - - {fileID: 747653049} - - {fileID: 747765327} - m_Father: {fileID: 747685541} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747697395 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748030961} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747710837} - m_Father: {fileID: 747712245} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747697887 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748030095} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747713395} - m_Father: {fileID: 747715121} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747699587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748037469} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747679889} - m_Father: {fileID: 747763849} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747699837 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748003027} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747669167} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747701773 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748024999} - serializedVersion: 2 - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747689433} - m_Father: {fileID: 747762985} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747704433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747986915} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747709257} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747705793 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747973429} - serializedVersion: 2 - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747678655} - m_Father: {fileID: 747759565} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747707791 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747998177} - serializedVersion: 2 - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747676421} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747708003 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748042173} - serializedVersion: 2 - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747720239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747708435 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747972121} - serializedVersion: 2 - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747734853} - m_Father: {fileID: 747680275} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747709257 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747964151} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747704433} - m_Father: {fileID: 747715213} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747710837 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748010693} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747687051} - m_Father: {fileID: 747697395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747712245 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748027897} - serializedVersion: 2 - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747697395} - m_Father: {fileID: 747671683} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747713395 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748006059} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747697887} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747714493 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747971149} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747735445} - m_Father: {fileID: 747670377} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747715051 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748012367} - serializedVersion: 2 - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747726121} - m_Father: {fileID: 747671683} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747715121 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748030139} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747697887} - m_Father: {fileID: 747692027} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747715213 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748029345} - serializedVersion: 2 - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747709257} - m_Father: {fileID: 747743861} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747718761 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747971737} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747669167} - m_Father: {fileID: 747737039} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747718789 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748009705} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747764773} - m_Father: {fileID: 747656379} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747720217 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747970509} - serializedVersion: 2 - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747748823} - m_Father: {fileID: 747671475} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747720239 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748035393} - serializedVersion: 2 - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747708003} - m_Father: {fileID: 747669641} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747720817 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748045839} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747674597} - m_Father: {fileID: 747668097} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747726121 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748049713} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747739641} - m_Father: {fileID: 747715051} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747726347 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748049975} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747735445} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747726437 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747971807} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747764169} - m_Father: {fileID: 747761059} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747727965 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748059835} - serializedVersion: 2 - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747763735} - m_Father: {fileID: 747761859} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747730023 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748011237} - serializedVersion: 2 - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747669641} - m_Father: {fileID: 747674597} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747732607 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748041977} - serializedVersion: 2 - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747658005} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747734853 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748047647} - serializedVersion: 2 - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747689805} - m_Father: {fileID: 747708435} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747735445 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748024901} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747726347} - m_Father: {fileID: 747714493} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747737039 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748034719} - serializedVersion: 2 - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747718761} - m_Father: {fileID: 747671683} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747738619 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748046591} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747739077} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747739077 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747977697} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} - m_LocalPosition: {x: 251, y: 0, z: 305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747669381} - - {fileID: 747738619} - - {fileID: 747671475} - - {fileID: 747745695} - - {fileID: 747686381} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747739641 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748015179} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747668581} - m_Father: {fileID: 747726121} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747741871 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747996779} - serializedVersion: 2 - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747764169} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747743861 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747977753} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747715213} - m_Father: {fileID: 747745119} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747744551 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748023197} - serializedVersion: 2 - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747671475} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747744777 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747966687} - serializedVersion: 2 - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747696107} - m_Father: {fileID: 747747327} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747745119 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747993473} - serializedVersion: 2 - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747743861} - m_Father: {fileID: 747694353} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747745649 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748019947} - serializedVersion: 2 - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747746651} - m_Father: {fileID: 747694353} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747745695 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747951567} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747739077} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747746651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748054235} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747763849} - m_Father: {fileID: 747745649} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747747209 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748036221} - serializedVersion: 2 - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747676421} - m_Father: {fileID: 747695507} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747747327 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748055399} - serializedVersion: 2 - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747744777} - m_Father: {fileID: 747674597} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747748823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748026219} - serializedVersion: 2 - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747667509} - m_Father: {fileID: 747720217} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747757751 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748007477} - serializedVersion: 2 - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747763735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747759565 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748053139} - serializedVersion: 2 - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747705793} - m_Father: {fileID: 747674597} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747761059 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747966989} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747726437} - m_Father: {fileID: 747671683} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747761859 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747990879} - serializedVersion: 2 - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747727965} - m_Father: {fileID: 747676755} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747762985 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748038231} - serializedVersion: 2 - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747701773} - m_Father: {fileID: 747676755} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747763735 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747995573} - serializedVersion: 2 - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747757751} - m_Father: {fileID: 747727965} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747763849 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748001937} - serializedVersion: 2 - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747699587} - m_Father: {fileID: 747746651} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747764169 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748026319} - serializedVersion: 2 - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747741871} - m_Father: {fileID: 747726437} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747764773 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747996721} - serializedVersion: 2 - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 747718789} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &747765327 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748029365} - serializedVersion: 2 - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 747668097} - m_Father: {fileID: 747697007} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &747950271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747680275} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747951567 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747745695} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747964151 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747709257} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747966687 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747744777} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747966989 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747761059} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747967315 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747692027} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747968275 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747685541} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747969751 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747677235} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747970509 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747720217} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747970635 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747696107} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747971061 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747691967} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747971149 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747714493} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747971737 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747718761} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747971807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747726437} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747972121 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747708435} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747972211 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747689433} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747973429 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747705793} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747976201 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747671695} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747977499 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747658005} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747977697 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747739077} - - component: {fileID: 742273939} - m_Layer: 0 - m_Name: npc2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747977753 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747743861} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747986915 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747704433} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747989589 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747676755} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747990293 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747671475} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747990879 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747761859} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747993473 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747745119} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747995489 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747668581} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747995573 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747763735} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747996721 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747764773} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747996779 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747741871} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747997303 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747669843} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747998177 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747707791} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747998205 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747694829} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747999313 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747667509} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &747999325 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747668097} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748001455 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747653049} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748001937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747763849} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748003027 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747699837} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748005503 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747669641} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748005625 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747679097} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748006059 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747713395} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748007477 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747757751} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748009121 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747688459} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748009705 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747718789} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748010693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747710837} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748011237 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747730023} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748011971 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747656379} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748012009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747686381} - - component: {fileID: 741969889} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748012367 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747715051} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748015179 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747739641} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748017485 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747695507} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748019781 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747687051} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748019947 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747745649} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748021851 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747670377} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748023197 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747744551} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748024901 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747735445} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748024999 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747701773} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748026219 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747748823} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748026319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747764169} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748026567 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747678655} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748027897 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747712245} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748029345 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747715213} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748029365 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747765327} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748030095 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747697887} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748030139 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747715121} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748030713 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747674597} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748030961 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747697395} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748034719 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747737039} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748035393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747720239} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748036221 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747747209} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748037469 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747699587} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748037893 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747676565} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748038231 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747762985} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748039089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747669167} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748039393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747694353} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748040323 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747689805} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748041977 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747732607} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748042173 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747708003} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748043937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747669381} - - component: {fileID: 742837355} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748045839 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747720817} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748046591 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747738619} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748046791 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747676421} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748047647 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747734853} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748049095 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747679889} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748049713 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747726121} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748049975 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747726347} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748053139 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747759565} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748054235 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747746651} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748055205 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747671683} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748055399 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747747327} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748059501 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747697007} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &748059835 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747727965} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1287094003 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1287094004} - m_Layer: 0 - m_Name: Lights - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1287094004 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1287094003} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1479529857} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1479529856 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1479529857} - - component: {fileID: 1479529858} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1479529857 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479529856} - serializedVersion: 2 - m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} - m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1287094004} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!108 &1479529858 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479529856} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1.6 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294965503 - m_RenderingLayerMask: 1 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!1 &1753750257 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1753750260} - - component: {fileID: 1753750259} - - component: {fileID: 1753750258} - m_Layer: 0 - m_Name: Terrain - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!154 &1753750258 -TerrainCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753750257} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 2 - m_TerrainData: {fileID: 15600000, guid: 6f0d27f5a7a2d814dbef423c18fa3b40, type: 2} - m_EnableTreeColliders: 1 ---- !u!218 &1753750259 -Terrain: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753750257} - m_Enabled: 1 - serializedVersion: 6 - m_TerrainData: {fileID: 15600000, guid: 6f0d27f5a7a2d814dbef423c18fa3b40, type: 2} - m_TreeDistance: 5000 - m_TreeBillboardDistance: 50 - m_TreeCrossFadeLength: 5 - m_TreeMaximumFullLODCount: 50 - m_DetailObjectDistance: 80 - m_DetailObjectDensity: 1 - m_HeightmapPixelError: 5 - m_SplatMapDistance: 1000 - m_HeightmapMaximumLOD: 0 - m_ShadowCastingMode: 2 - m_DrawHeightmap: 1 - m_DrawInstanced: 0 - m_DrawTreesAndFoliage: 1 - m_StaticShadowCaster: 0 - m_IgnoreQualitySettings: 0 - m_ReflectionProbeUsage: 1 - m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0} - m_BakeLightProbesForTrees: 1 - m_PreserveTreePrototypeLayers: 0 - m_DeringLightProbesForTrees: 1 - m_ReceiveGI: 1 - m_ScaleInLightmap: 0.0512 - m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} - m_GroupingID: 0 - m_RenderingLayerMask: 1 - m_AllowAutoConnect: 0 - m_EnableHeightmapRayTracing: 1 - m_EnableTreesAndDetailsRayTracing: 0 - m_TreeMotionVectorModeOverride: 3 ---- !u!4 &1753750260 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753750257} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1948259025 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955355865} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!111 &1948757667 -Animation: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955374801} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!137 &1952403803 -SkinnedMeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955570577} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 3 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 1955158933} - - {fileID: 1955165217} - - {fileID: 1955095423} - - {fileID: 1955186213} - - {fileID: 1955191433} - - {fileID: 1955081281} - - {fileID: 1955150179} - - {fileID: 1955082863} - - {fileID: 1955143601} - - {fileID: 1955151525} - - {fileID: 1955098099} - - {fileID: 1955096601} - - {fileID: 1955164323} - - {fileID: 1955118371} - - {fileID: 1955147555} - - {fileID: 1955109693} - - {fileID: 1955080889} - - {fileID: 1955163743} - - {fileID: 1955155771} - - {fileID: 1955131757} - - {fileID: 1955076725} - - {fileID: 1955095847} - - {fileID: 1955138995} - - {fileID: 1955074815} - - {fileID: 1955124569} - - {fileID: 1955152587} - - {fileID: 1955098771} - - {fileID: 1955112705} - - {fileID: 1955134293} - - {fileID: 1955112155} - - {fileID: 1955133465} - - {fileID: 1955115973} - - {fileID: 1955162563} - - {fileID: 1955142559} - - {fileID: 1955116101} - - {fileID: 1955071177} - - {fileID: 1955163119} - - {fileID: 1955095801} - - {fileID: 1955154557} - - {fileID: 1955118713} - - {fileID: 1955112893} - - {fileID: 1955084101} - - {fileID: 1955102087} - - {fileID: 1955154153} - - {fileID: 1955152527} - - {fileID: 1955122497} - - {fileID: 1955137237} - - {fileID: 1955139007} - - {fileID: 1955187083} - - {fileID: 1955129687} - - {fileID: 1955080911} - - {fileID: 1955141049} - - {fileID: 1955083065} - - {fileID: 1955101437} - - {fileID: 1955105009} - - {fileID: 1955124661} - - {fileID: 1955141209} - - {fileID: 1955113613} - - {fileID: 1955149455} - - {fileID: 1955075237} - - {fileID: 1955123999} - - {fileID: 1955164891} - - {fileID: 1955095993} - - {fileID: 1955160243} - - {fileID: 1955080299} - - {fileID: 1955124009} - - {fileID: 1955151413} - - {fileID: 1955102911} - - {fileID: 1955078375} - - {fileID: 1955142917} - - {fileID: 1955150595} - - {fileID: 1955140707} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 1955150179} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!4 &1955071177 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955353467} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955141973} - m_Father: {fileID: 1955133465} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955072203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955583439} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955072757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955072757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955374801} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} - m_LocalPosition: {x: 248, y: 0, z: 305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955142325} - - {fileID: 1955072203} - - {fileID: 1955140227} - - {fileID: 1955081391} - - {fileID: 1955157213} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955074815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955563439} - serializedVersion: 2 - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955124569} - m_Father: {fileID: 1955138995} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955075237 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955359093} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955134267} - m_Father: {fileID: 1955113613} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955076725 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955581999} - serializedVersion: 2 - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955154557} - m_Father: {fileID: 1955118371} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955078375 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955357787} - serializedVersion: 2 - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955142917} - m_Father: {fileID: 1955124009} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955080299 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955593195} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955095993} - m_Father: {fileID: 1955081281} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955080889 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955577165} - serializedVersion: 2 - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955151413} - m_Father: {fileID: 1955164323} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955080911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955591767} - serializedVersion: 2 - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955083065} - m_Father: {fileID: 1955137237} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955081281 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955364315} - serializedVersion: 2 - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955080299} - m_Father: {fileID: 1955165217} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955081391 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955416319} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955072757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955082263 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955360941} - serializedVersion: 2 - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955140227} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955082863 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955390641} - serializedVersion: 2 - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955084101} - m_Father: {fileID: 1955165217} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955083065 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955368431} - serializedVersion: 2 - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955164891} - m_Father: {fileID: 1955080911} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955084101 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955373353} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955112893} - m_Father: {fileID: 1955082863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955086239 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955339099} - serializedVersion: 2 - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955095801} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955094805 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955339009} - serializedVersion: 2 - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955124661} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955095423 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955567749} - serializedVersion: 2 - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955143601} - m_Father: {fileID: 1955163743} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955095801 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955357951} - serializedVersion: 2 - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955086239} - m_Father: {fileID: 1955134293} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955095847 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955339397} - serializedVersion: 2 - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955102087} - m_Father: {fileID: 1955131757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955095993 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955334049} - serializedVersion: 2 - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955160243} - m_Father: {fileID: 1955080299} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955096601 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955575143} - serializedVersion: 2 - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955109693} - m_Father: {fileID: 1955150179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955098099 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955394159} - serializedVersion: 2 - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955131757} - m_Father: {fileID: 1955150179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955098771 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955368765} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955134293} - m_Father: {fileID: 1955138995} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955101437 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955594147} - serializedVersion: 2 - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955105009} - m_Father: {fileID: 1955137237} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955102087 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955343621} - serializedVersion: 2 - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955095847} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955102911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955337937} - serializedVersion: 2 - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955151413} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955103571 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955572365} - serializedVersion: 2 - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955123999} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955105009 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955378693} - serializedVersion: 2 - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955149455} - m_Father: {fileID: 1955101437} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955106113 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955381971} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955118713} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955109693 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955359127} - serializedVersion: 2 - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955154153} - m_Father: {fileID: 1955096601} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955112155 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955356287} - serializedVersion: 2 - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955133465} - m_Father: {fileID: 1955138995} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955112705 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955566987} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955163119} - m_Father: {fileID: 1955152587} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955112893 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955567761} - serializedVersion: 2 - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955118713} - m_Father: {fileID: 1955084101} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955113613 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955381117} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955075237} - m_Father: {fileID: 1955141209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955114563 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955346331} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955163119} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955115973 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955357385} - serializedVersion: 2 - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955162563} - m_Father: {fileID: 1955138995} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955116101 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955340789} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955156411} - m_Father: {fileID: 1955162563} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955118371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955380009} - serializedVersion: 2 - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955076725} - m_Father: {fileID: 1955147555} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955118713 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955371975} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955106113} - m_Father: {fileID: 1955112893} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955122497 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955584831} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955137237} - m_Father: {fileID: 1955143601} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955123999 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955561585} - serializedVersion: 2 - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955103571} - m_Father: {fileID: 1955141049} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955124009 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955365629} - serializedVersion: 2 - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955078375} - m_Father: {fileID: 1955140227} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955124569 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955379625} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955142559} - m_Father: {fileID: 1955074815} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955124661 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955341785} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955094805} - m_Father: {fileID: 1955187083} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955128143 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955572681} - serializedVersion: 2 - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955186213} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955129687 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955341269} - serializedVersion: 2 - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955141049} - m_Father: {fileID: 1955137237} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955131757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955586443} - serializedVersion: 2 - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955095847} - m_Father: {fileID: 1955098099} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955133465 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955579905} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955071177} - m_Father: {fileID: 1955112155} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955134267 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955580679} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955075237} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955134293 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955379695} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955095801} - m_Father: {fileID: 1955098771} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955137237 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955567561} - serializedVersion: 2 - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955139007} - - {fileID: 1955141209} - - {fileID: 1955101437} - - {fileID: 1955129687} - - {fileID: 1955080911} - m_Father: {fileID: 1955122497} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955138995 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955592085} - serializedVersion: 2 - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955074815} - - {fileID: 1955115973} - - {fileID: 1955112155} - - {fileID: 1955152587} - - {fileID: 1955098771} - m_Father: {fileID: 1955155771} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955139007 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955375929} - serializedVersion: 2 - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955187083} - m_Father: {fileID: 1955137237} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955140227 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955393573} - serializedVersion: 2 - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955082263} - - {fileID: 1955150179} - - {fileID: 1955124009} - m_Father: {fileID: 1955072757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955140707 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955337543} - serializedVersion: 2 - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955150595} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955141049 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955345743} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955123999} - m_Father: {fileID: 1955129687} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955141209 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955362155} - serializedVersion: 2 - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955113613} - m_Father: {fileID: 1955137237} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955141973 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955339345} - serializedVersion: 2 - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955071177} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955142325 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955570577} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955072757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955142559 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955575425} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955160909} - m_Father: {fileID: 1955124569} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955142917 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955335521} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955150595} - m_Father: {fileID: 1955078375} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955143601 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955335533} - serializedVersion: 2 - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955122497} - m_Father: {fileID: 1955095423} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955147169 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955581943} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955160243} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955147555 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955417487} - serializedVersion: 2 - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955118371} - m_Father: {fileID: 1955150179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955147849 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955345865} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955164891} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955149455 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955358711} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955166173} - m_Father: {fileID: 1955105009} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955150179 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955395429} - serializedVersion: 2 - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955165217} - - {fileID: 1955098099} - - {fileID: 1955096601} - - {fileID: 1955164323} - - {fileID: 1955147555} - m_Father: {fileID: 1955140227} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955150595 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955365351} - serializedVersion: 2 - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955140707} - m_Father: {fileID: 1955142917} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955151413 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955583223} - serializedVersion: 2 - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955102911} - m_Father: {fileID: 1955080889} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955151525 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955576373} - serializedVersion: 2 - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955155771} - m_Father: {fileID: 1955191433} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955152527 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955380421} - serializedVersion: 2 - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955154153} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955152587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955368547} - serializedVersion: 2 - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955112705} - m_Father: {fileID: 1955138995} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955154153 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955380035} - serializedVersion: 2 - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955152527} - m_Father: {fileID: 1955109693} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955154557 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955573171} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955076725} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955155771 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955343249} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955138995} - m_Father: {fileID: 1955151525} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955156411 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955364213} - serializedVersion: 2 - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955116101} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955157213 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955355865} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955072757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955158933 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955367459} - serializedVersion: 2 - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955163743} - m_Father: {fileID: 1955165217} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955160243 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955575917} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955147169} - m_Father: {fileID: 1955095993} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955160909 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955333091} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955142559} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955162563 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955567297} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955116101} - m_Father: {fileID: 1955115973} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955163119 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955567039} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955114563} - m_Father: {fileID: 1955112705} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955163743 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955587677} - serializedVersion: 2 - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955186213} - - {fileID: 1955191433} - - {fileID: 1955095423} - m_Father: {fileID: 1955158933} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955164323 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955351165} - serializedVersion: 2 - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955080889} - m_Father: {fileID: 1955150179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955164891 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955380603} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955147849} - m_Father: {fileID: 1955083065} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955165217 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955574225} - serializedVersion: 2 - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955082863} - - {fileID: 1955081281} - - {fileID: 1955158933} - m_Father: {fileID: 1955150179} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955166173 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955337933} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1955149455} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955186213 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955374635} - serializedVersion: 2 - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955128143} - m_Father: {fileID: 1955163743} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955187083 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955355891} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955124661} - m_Father: {fileID: 1955139007} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1955191433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1955333535} - serializedVersion: 2 - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1955151525} - m_Father: {fileID: 1955163743} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1955333091 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955160909} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955333535 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955191433} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955334049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955095993} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955335521 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955142917} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955335533 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955143601} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955337543 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955140707} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955337933 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955166173} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955337937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955102911} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955339009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955094805} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955339099 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955086239} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955339345 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955141973} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955339397 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955095847} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955340789 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955116101} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955341269 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955129687} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955341785 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955124661} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955343249 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955155771} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955343621 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955102087} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955345743 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955141049} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955345865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955147849} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955346331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955114563} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955351165 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955164323} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955353467 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955071177} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955355865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955157213} - - component: {fileID: 1948259025} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955355891 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955187083} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955356287 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955112155} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955357385 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955115973} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955357787 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955078375} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955357951 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955095801} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955358711 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955149455} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955359093 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955075237} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955359127 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955109693} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955360941 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955082263} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955362155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955141209} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955364213 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955156411} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955364315 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955081281} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955365351 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955150595} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955365629 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955124009} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955367459 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955158933} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955368431 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955083065} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955368547 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955152587} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955368765 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955098771} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955371975 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955118713} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955373353 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955084101} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955374635 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955186213} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955374801 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955072757} - - component: {fileID: 1948757667} - m_Layer: 0 - m_Name: npc1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955375929 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955139007} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955378693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955105009} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955379625 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955124569} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955379695 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955134293} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955380009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955118371} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955380035 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955154153} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955380421 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955152527} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955380603 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955164891} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955381117 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955113613} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955381971 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955106113} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955390641 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955082863} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955393573 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955140227} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955394159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955098099} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955395429 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955150179} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955416319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955081391} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955417487 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955147555} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955561585 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955123999} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955563439 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955074815} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955566987 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955112705} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955567039 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955163119} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955567297 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955162563} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955567561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955137237} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955567749 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955095423} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955567761 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955112893} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955570577 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955142325} - - component: {fileID: 1952403803} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955572365 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955103571} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955572681 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955128143} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955573171 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955154557} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955574225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955165217} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955575143 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955096601} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955575425 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955142559} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955575917 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955160243} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955576373 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955151525} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955577165 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955080889} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955579905 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955133465} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955580679 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955134267} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955581943 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955147169} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955581999 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955076725} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955583223 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955151413} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955583439 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955072203} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955584831 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955122497} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955586443 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955131757} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955587677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955163743} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955591767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955080911} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955592085 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955138995} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955593195 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955080299} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1955594147 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1955101437} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &2008426064 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2008426069} - - component: {fileID: 2008426068} - - component: {fileID: 2008426065} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &2008426065 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2008426064} - m_Enabled: 1 ---- !u!20 &2008426068 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2008426064} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 58.5 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &2008426069 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2008426064} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 1.8, z: 300} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2048358715 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2048358718} - - component: {fileID: 2048358717} - - component: {fileID: 2048358716} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2048358716 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2048358715} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &2048358717 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2048358715} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &2048358718 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2048358715} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 9.105556, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 451005638} - - {fileID: 1287094004} - - {fileID: 1955072757} - - {fileID: 2008426069} - - {fileID: 747739077} - - {fileID: 1753750260} - - {fileID: 2048358718} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity.meta deleted file mode 100644 index b037356..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ba9fecbe33a8173448d5c4e65809460f -timeCreated: 1446569181 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity deleted file mode 100644 index c402615..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &428553806 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 428553808} - - component: {fileID: 428553810} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &428553808 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 428553806} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &428553810 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 428553806} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &460405318 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 460405321} - - component: {fileID: 460405320} - - component: {fileID: 460405319} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &460405319 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 460405318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &460405320 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 460405318} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &460405321 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 460405318} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1454169315 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1454169318} - - component: {fileID: 1454169317} - - component: {fileID: 1454169316} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1454169316 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1454169315} - m_Enabled: 1 ---- !u!20 &1454169317 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1454169315} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1454169318 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1454169315} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1652253660 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1652253662} - - component: {fileID: 1652253661} - - component: {fileID: 1652253663} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1652253661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1652253660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Transition - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Transition - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1652253662 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1652253660} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1652253663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1652253660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ab67b9a9f47fd3343b5aeb1333ea0527, type: 3} - m_Name: - m_EditorClassIdentifier: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity.meta deleted file mode 100644 index 2b116a6..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: da16b4e6c83f4644091ac783878ae6ec -timeCreated: 1446602522 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity deleted file mode 100644 index 87d6933..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &559719747 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 559719750} - - component: {fileID: 559719749} - - component: {fileID: 559719748} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &559719748 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 559719747} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &559719749 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 559719747} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &559719750 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 559719747} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1775392814 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1775392817} - - component: {fileID: 1775392816} - - component: {fileID: 1775392815} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1775392815 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1775392814} - m_Enabled: 1 ---- !u!20 &1775392816 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1775392814} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1775392817 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1775392814} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1854972867 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1854972869} - - component: {fileID: 1854972871} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1854972869 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1854972867} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1854972871 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1854972867} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1871869241 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1871869243} - - component: {fileID: 1871869242} - - component: {fileID: 1871869244} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1871869242 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1871869241} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Extension - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Extension - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1871869243 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1871869241} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1871869244 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1871869241} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1b0647927cbff65449b89590caf97481, type: 3} - m_Name: - m_EditorClassIdentifier: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity.meta deleted file mode 100644 index 61de59e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3aa4363269faec8498ef949480f5e8b5 -timeCreated: 1446611222 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity deleted file mode 100644 index def653a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity +++ /dev/null @@ -1,447 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.37311924, g: 0.38073963, b: 0.3587269, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: bbef2d61aa59c4ee8867c3b33961ca9e, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &1676981388 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1676981391} - - component: {fileID: 1676981390} - - component: {fileID: 1676981389} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1676981389 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1676981388} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1676981390 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1676981388} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1676981391 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1676981388} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 9.105556, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1810466734 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1810466736} - - component: {fileID: 1810466735} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1810466735 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1810466734} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &1810466736 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1810466734} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1811797492 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1811797495} - - component: {fileID: 1811797494} - - component: {fileID: 1811797493} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1811797493 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1811797492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 81df70f0eca40f24eb4d6448b5e3ed22, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1811797494 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1811797492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: ModalWaiting - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/ModalWaiting - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1811797495 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1811797492} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2107738555 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2107738560} - - component: {fileID: 2107738559} - - component: {fileID: 2107738556} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &2107738556 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2107738555} - m_Enabled: 1 ---- !u!20 &2107738559 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2107738555} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &2107738560 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2107738555} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 1810466736} - - {fileID: 1811797495} - - {fileID: 2107738560} - - {fileID: 1676981391} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity.meta deleted file mode 100644 index 28df7a9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2708cf66c28ec534b9e230cbf277f9f7 -timeCreated: 1447054792 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity deleted file mode 100644 index 3a34a90..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity +++ /dev/null @@ -1,289 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.37311915, g: 0.3807396, b: 0.35872662, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: db780d76a4dfc49ac91d04035c2eee4c, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &952070760 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 952070765} - - component: {fileID: 952070764} - - component: {fileID: 952070761} - m_Layer: 0 - m_Name: Main Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &952070761 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 952070760} - m_Enabled: 1 ---- !u!20 &952070764 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 952070760} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 3000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &952070765 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 952070760} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -4.16, y: 1.09, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1291441921 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1291441923} - - component: {fileID: 1291441922} - - component: {fileID: 1291441924} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1291441922 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1291441921} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f0c05fcb4b735cf4587717a360b2a231, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1291441923 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1291441921} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1291441924 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1291441921} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 1291441923} - - {fileID: 952070765} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity.meta deleted file mode 100644 index 1a742ab..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4efea31a316b050439851afe65f4de37 -timeCreated: 1446611156 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity deleted file mode 100644 index 26d5896..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity +++ /dev/null @@ -1,447 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 1 - m_BakeResolution: 10 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: bcebafccb0da14c389e2ce237a9c7c8a, - type: 2} ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &392768408 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 392768413} - - component: {fileID: 392768412} - - component: {fileID: 392768409} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &392768409 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 392768408} - m_Enabled: 1 ---- !u!20 &392768412 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 392768408} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &392768413 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 392768408} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &871184436 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 871184437} - - component: {fileID: 871184440} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &871184437 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 871184436} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &871184440 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 871184436} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1446089695 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1446089698} - - component: {fileID: 1446089697} - - component: {fileID: 1446089696} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1446089696 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1446089695} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d029d4d78090c764a97f4497beff32e3, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1446089697 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1446089695} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: RenderTexture - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/RenderTexture - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1446089698 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1446089695} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2097587200 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2097587203} - - component: {fileID: 2097587202} - - component: {fileID: 2097587201} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2097587201 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2097587200} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &2097587202 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2097587200} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &2097587203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2097587200} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 9.105556, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 871184437} - - {fileID: 1446089698} - - {fileID: 392768413} - - {fileID: 2097587203} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity.meta deleted file mode 100644 index ce06e4c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6c830bc4febb89840805f5f6f21e8138 -timeCreated: 1446193142 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity deleted file mode 100644 index 119845b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity +++ /dev/null @@ -1,447 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.37311915, g: 0.3807396, b: 0.35872662, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: a38ce872dabee4f389f33808b08a6357, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &226058906 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 226058911} - - component: {fileID: 226058910} - - component: {fileID: 226058907} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &226058907 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226058906} - m_Enabled: 1 ---- !u!20 &226058910 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226058906} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &226058911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226058906} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &576010458 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 576010460} - - component: {fileID: 576010462} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &576010460 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 576010458} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &576010462 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 576010458} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1451674696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1451674699} - - component: {fileID: 1451674698} - - component: {fileID: 1451674697} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1451674697 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1451674696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1451674698 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1451674696} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1451674699 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1451674696} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 9.105556, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2028563588 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2028563591} - - component: {fileID: 2028563590} - - component: {fileID: 2028563589} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2028563589 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028563588} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1be113d23714dfb49819b314ffb3ffdc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &2028563590 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028563588} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Particles - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Particles - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &2028563591 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028563588} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 576010460} - - {fileID: 2028563591} - - {fileID: 1451674699} - - {fileID: 226058911} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity.meta deleted file mode 100644 index c32909c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7a9b321846468334dbd1f454f043c695 -timeCreated: 1446770031 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity deleted file mode 100644 index d77bcf4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity +++ /dev/null @@ -1,247 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &1940204561 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1940204563} - - component: {fileID: 1940204562} - - component: {fileID: 1940204564} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1940204562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1940204561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c34dde491ef252c49af798031b5a37de, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1940204563 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1940204561} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1940204564 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1940204561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &2070229389 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 2070229392} - - component: {fileID: 2070229391} - - component: {fileID: 2070229390} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &2070229390 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2070229389} - m_Enabled: 1 ---- !u!20 &2070229391 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2070229389} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &2070229392 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2070229389} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity.meta deleted file mode 100644 index d8ebc24..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f26c5ad5e95062042b887d68c717fa5e -timeCreated: 1446611044 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity deleted file mode 100644 index b5f8be9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &8781590 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 8781593} - - component: {fileID: 8781592} - - component: {fileID: 8781591} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &8781591 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 8781590} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &8781592 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 8781590} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &8781593 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 8781590} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &174876960 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 174876963} - - component: {fileID: 174876962} - - component: {fileID: 174876961} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &174876961 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 174876960} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfc2db50aaedb7843a486cc282c0ec02, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &174876962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 174876960} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: VirtualList - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/VirtualList - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &174876963 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 174876960} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &603571830 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 603571832} - - component: {fileID: 603571833} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &603571832 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 603571830} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &603571833 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 603571830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1169016405 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1169016408} - - component: {fileID: 1169016407} - - component: {fileID: 1169016406} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1169016406 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1169016405} - m_Enabled: 1 ---- !u!20 &1169016407 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1169016405} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1169016408 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1169016405} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity.meta deleted file mode 100644 index ba1d093..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b75df39b8fbcc7f469a7335938f54d7e -timeCreated: 1456387382 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity deleted file mode 100644 index d371ed0..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &953670264 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 953670266} - - component: {fileID: 953670267} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &953670266 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 953670264} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &953670267 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 953670264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &1804857624 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1804857627} - - component: {fileID: 1804857626} - - component: {fileID: 1804857625} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1804857625 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1804857624} - m_Enabled: 1 ---- !u!20 &1804857626 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1804857624} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1804857627 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1804857624} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1823051046 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1823051049} - - component: {fileID: 1823051048} - - component: {fileID: 1823051047} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1823051047 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1823051046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1823051048 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1823051046} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1823051049 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1823051046} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2006949992 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 2006949995} - - component: {fileID: 2006949994} - - component: {fileID: 2006949993} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2006949993 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2006949992} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: bab7cb69f587250498d0079f0e323fb0, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &2006949994 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2006949992} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: LoopList - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/LoopList - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &2006949995 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2006949992} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity.meta deleted file mode 100644 index 814a04c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bdd703e7d454b1441a6f90bb1dccd3d6 -timeCreated: 1456388435 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity deleted file mode 100644 index 3d0a89c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &675548327 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 675548329} - - component: {fileID: 675548330} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &675548329 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 675548327} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &675548330 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 675548327} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!1 &903576102 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 903576105} - - component: {fileID: 903576104} - - component: {fileID: 903576103} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &903576103 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 903576102} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: eabf5f06c048be84cbc8226659385e1f, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &903576104 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 903576102} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Model - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Model - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &903576105 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 903576102} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1110108826 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1110108829} - - component: {fileID: 1110108828} - - component: {fileID: 1110108827} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1110108827 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1110108826} - m_Enabled: 1 ---- !u!20 &1110108828 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1110108826} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741791 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1110108829 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1110108826} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2137835166 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 2137835169} - - component: {fileID: 2137835168} - - component: {fileID: 2137835167} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2137835167 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2137835166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &2137835168 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2137835166} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &2137835169 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2137835166} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity.meta deleted file mode 100644 index ec81e09..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 729de84eb637f4f4f9ac755b3914d8fc -timeCreated: 1456390922 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity deleted file mode 100644 index 58d3a6e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity +++ /dev/null @@ -1,447 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.37311924, g: 0.38073963, b: 0.3587269, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: df16360bf5632475ea9ac4b3fea8f011, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &109839784 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 109839787} - - component: {fileID: 109839786} - - component: {fileID: 109839785} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &109839785 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 109839784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &109839786 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 109839784} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &109839787 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 109839784} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 9.105556, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &223106906 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 223106908} - - component: {fileID: 223106907} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &223106907 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 223106906} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &223106908 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 223106906} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &950943749 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 950943754} - - component: {fileID: 950943753} - - component: {fileID: 950943750} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &950943750 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 950943749} - m_Enabled: 1 ---- !u!20 &950943753 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 950943749} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 536869343 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &950943754 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 950943749} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1798063796 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1798063799} - - component: {fileID: 1798063798} - - component: {fileID: 1798063797} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1798063797 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1798063796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 917e86e515017db488b38e836ed52634, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1798063798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1798063796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Guide - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Guide - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1798063799 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1798063796} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 223106908} - - {fileID: 1798063799} - - {fileID: 950943754} - - {fileID: 109839787} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity.meta deleted file mode 100644 index 6471160..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 085f754b1b575534b91305d7c18a92a4 -timeCreated: 1456392160 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity deleted file mode 100644 index f41896a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity +++ /dev/null @@ -1,648 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481676, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: c080f2192574c41de884825dba7dbd84, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &340315424 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 340315427} - - component: {fileID: 340315426} - - component: {fileID: 340315425} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &340315425 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 340315424} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &340315426 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 340315424} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &340315427 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 340315424} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 9.105556, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &568737677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 568737679} - - component: {fileID: 568737678} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &568737678 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568737677} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &568737679 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568737677} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &995477573 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 995477578} - - component: {fileID: 995477577} - - component: {fileID: 995477574} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &995477574 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 995477573} - m_Enabled: 1 ---- !u!20 &995477577 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 995477573} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 536869343 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &995477578 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 995477573} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 1.8, z: 300} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1799657441 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1799657444} - - component: {fileID: 1799657443} - - component: {fileID: 1799657442} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1799657442 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1799657441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 12542fe68a883624ea477c953ae0cf52, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1799657443 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1799657441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HitTest - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/HitTest - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1799657444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1799657441} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1867794689 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1867794693} - - component: {fileID: 1867794692} - - component: {fileID: 1867794691} - - component: {fileID: 1867794690} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &1867794690 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1867794689} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!65 &1867794691 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1867794689} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &1867794692 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1867794689} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1867794693 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1867794689} - serializedVersion: 2 - m_LocalRotation: {x: -0.15300491, y: -0.16397955, z: 0.025648758, w: 0.9741881} - m_LocalPosition: {x: 252.602, y: 1.958, z: 306.869} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1958141061 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1958141063} - - component: {fileID: 1958141062} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &1958141062 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1958141061} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &1958141063 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1958141061} - serializedVersion: 2 - m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.109381676, w: 0.87542605} - m_LocalPosition: {x: 11.367566, y: -7.7512474, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 568737679} - - {fileID: 1799657444} - - {fileID: 995477578} - - {fileID: 1867794693} - - {fileID: 340315427} - - {fileID: 1958141063} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity.meta deleted file mode 100644 index 3ca7e05..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cf0fd7d55aa59c44a92b1e6248258bfe -timeCreated: 1456392929 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity deleted file mode 100644 index b114ca1..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity +++ /dev/null @@ -1,581 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44745964, g: 0.4974082, b: 0.5752875, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: c5c5377ab53e742a5ae680f5a50952f4, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &204995357 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 204995359} - - component: {fileID: 204995358} - m_Layer: 0 - m_Name: UIPanel1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &204995358 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204995357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Perspective - componentName: Panel - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/Perspective - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 650, y: 260} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &204995359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204995357} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.34202018, z: 0, w: 0.9396926} - m_LocalPosition: {x: 250.07, y: 4.8, z: 313.9} - m_LocalScale: {x: 0.014347202, y: 0.014347202, z: 0.014347202} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &568737677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 568737679} - - component: {fileID: 568737678} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &568737678 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568737677} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ccbee12c33459e546bf698dc4ca46bea, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &568737679 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568737677} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &820935328 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 820935331} - - component: {fileID: 820935330} - - component: {fileID: 820935329} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &820935329 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820935328} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &820935330 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820935328} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &820935331 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820935328} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.888889, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &979631918 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 979631919} - - component: {fileID: 979631920} - m_Layer: 0 - m_Name: UIPanel2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &979631919 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 979631918} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.3459605, z: 0, w: 0.9382491} - m_LocalPosition: {x: 239.64, y: 9, z: 313.24} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &979631920 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 979631918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Perspective - componentName: Panel2 - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/Perspective - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 442, y: 601} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!1 &995477573 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 995477578} - - component: {fileID: 995477577} - - component: {fileID: 995477574} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &995477574 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 995477573} - m_Enabled: 1 ---- !u!20 &995477577 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 995477573} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &995477578 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 995477573} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 1.8, z: 300} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1434776251 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1434776253} - - component: {fileID: 1434776252} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &1434776252 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1434776251} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294965503 - m_RenderingLayerMask: 1 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &1434776253 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1434776251} - serializedVersion: 2 - m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} - m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 568737679} - - {fileID: 1434776253} - - {fileID: 995477578} - - {fileID: 204995359} - - {fileID: 979631919} - - {fileID: 820935331} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity.meta deleted file mode 100644 index 3b487eb..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a4bc350cbb6a15d40a15aef7979eaa5e -timeCreated: 1456411647 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity deleted file mode 100644 index 2d37ac2..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity +++ /dev/null @@ -1,426 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &298758265 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 298758267} - - component: {fileID: 298758266} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &298758266 -Light: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 298758265} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 4 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &298758267 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 298758265} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &681395388 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 681395393} - - component: {fileID: 681395392} - - component: {fileID: 681395389} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &681395389 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 681395388} - m_Enabled: 1 ---- !u!20 &681395392 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 681395388} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.6102941, g: 0.6102941, b: 0.6102941, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 65 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073741023 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &681395393 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 681395388} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 8, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &681573944 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - m_PrefabInternal: {fileID: 1973186790} - serializedVersion: 5 - m_Component: - - component: {fileID: 681573949} - - component: {fileID: 681573948} - - component: {fileID: 681573947} - - component: {fileID: 681573946} - - component: {fileID: 681573945} - - component: {fileID: 681573950} - m_Layer: 0 - m_Name: aomian - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &681573945 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 681573944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2ca66c39de4dce2499306801170a139f, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Curve - componentName: Main - sortingOrder: 0 - packagePath: UI/Curve - renderCamera: {fileID: 0} - fairyBatching: 0 - touchDisabled: 0 ---- !u!64 &681573946 -MeshCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 681573944} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Convex: 0 - m_InflateMesh: 0 - m_SkinWidth: 0.01 - m_Mesh: {fileID: 4300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} ---- !u!23 &681573947 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, - type: 3} - m_PrefabInternal: {fileID: 1973186790} - m_GameObject: {fileID: 681573944} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: ec52002c32d42344f96be9a0561d52f8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &681573948 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, - type: 3} - m_PrefabInternal: {fileID: 1973186790} - m_GameObject: {fileID: 681573944} - m_Mesh: {fileID: 4300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} ---- !u!4 &681573949 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - m_PrefabInternal: {fileID: 1973186790} - m_GameObject: {fileID: 681573944} - m_LocalRotation: {x: 0, y: 1, z: 0, w: -0.00000016292068} - m_LocalPosition: {x: 250, y: 8, z: 10} - m_LocalScale: {x: 1.3, y: 1.3, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &681573950 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 681573944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d30b14c0ce756e2428ef9db93b692b69, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &1973186790 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalPosition.x - value: 250 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalPosition.y - value: 8 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalPosition.z - value: 10 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalRotation.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalRotation.w - value: -1.62920685e-07 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalScale.x - value: 1.29999995 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_LocalScale.y - value: 1.29999995 - objectReference: {fileID: 0} - - target: {fileID: 2300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - propertyPath: m_Materials.Array.data[0] - value: - objectReference: {fileID: 2100000, guid: ec52002c32d42344f96be9a0561d52f8, type: 2} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} - m_RootGameObject: {fileID: 681573944} - m_IsPrefabParent: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity.meta deleted file mode 100644 index 0e8477c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 537f052b9bcb3274ca109d206e7b1f71 -timeCreated: 1461431245 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity deleted file mode 100644 index a571eec..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity +++ /dev/null @@ -1,515 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &38190412 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 38190415} - - component: {fileID: 38190414} - - component: {fileID: 38190413} - m_Layer: 0 - m_Name: Globe - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &38190413 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 38190412} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: aa9cae01e1843384686010036f374ee2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &38190414 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 38190412} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &38190415 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 38190412} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -8} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &401163756 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 401163759} - - component: {fileID: 401163758} - - component: {fileID: 401163757} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &401163757 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 401163756} - m_Enabled: 1 ---- !u!20 &401163758 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 401163756} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 536870879 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &401163759 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 401163756} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &495606784 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 495606787} - - component: {fileID: 495606786} - - component: {fileID: 495606785} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &495606785 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 495606784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &495606786 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 495606784} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &495606787 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 495606784} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &531468966 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 531468968} - - component: {fileID: 531468967} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &531468967 -Light: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 531468966} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 2 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 4 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &531468968 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 531468966} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1321678497 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1321678499} - - component: {fileID: 1321678498} - - component: {fileID: 1321678500} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1321678498 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1321678497} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Gesture - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Gesture - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1321678499 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1321678497} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1321678500 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1321678497} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dffc58029aa66074287bfe11db08a102, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1858196917 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1858196921} - - component: {fileID: 1858196918} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1858196918 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1858196917} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &1858196921 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1858196917} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity.meta deleted file mode 100644 index 49d754f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 99d5d7fbdec0c8249885740dfe14ad8f -timeCreated: 1464336759 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity deleted file mode 100644 index 80e2923..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &479063064 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 479063067} - - component: {fileID: 479063066} - - component: {fileID: 479063065} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &479063065 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 479063064} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78878c40447242843aa913ef50cce606, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &479063066 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 479063064} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: Filter - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/Filter - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &479063067 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 479063064} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1140707663 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1140707667} - - component: {fileID: 1140707664} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1140707664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1140707663} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &1140707667 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1140707663} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1352869606 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1352869609} - - component: {fileID: 1352869608} - - component: {fileID: 1352869607} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1352869607 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1352869606} - m_Enabled: 1 ---- !u!20 &1352869608 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1352869606} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 536870879 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1352869609 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1352869606} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1679237723 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1679237726} - - component: {fileID: 1679237725} - - component: {fileID: 1679237724} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1679237724 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1679237723} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1679237725 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1679237723} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1679237726 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1679237723} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity.meta deleted file mode 100644 index c0c603e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c7133508ce19e514ab0fb73a52a2cdf1 -timeCreated: 1465403020 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity deleted file mode 100644 index d180a0e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &902009683 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 902009686} - - component: {fileID: 902009685} - - component: {fileID: 902009684} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &902009684 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 902009683} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f30e9532e25d54e4789a3b737b33f79e, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &902009685 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 902009683} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: TurnCard - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/TurnCard - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &902009686 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 902009683} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1093699821 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1093699824} - - component: {fileID: 1093699823} - - component: {fileID: 1093699822} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1093699822 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1093699821} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1093699823 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1093699821} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1093699824 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1093699821} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1398533359 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1398533362} - - component: {fileID: 1398533361} - - component: {fileID: 1398533360} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1398533360 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1398533359} - m_Enabled: 1 ---- !u!20 &1398533361 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1398533359} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 536870879 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1398533362 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1398533359} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1894282122 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1894282126} - - component: {fileID: 1894282123} - m_Layer: 0 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1894282123 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1894282122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &1894282126 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1894282122} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity.meta deleted file mode 100644 index 18603d8..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e0f565de6d6d7e64da7c0688e65d565d -timeCreated: 1465455953 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity deleted file mode 100644 index f4edeb5..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &581431957 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 581431961} - - component: {fileID: 581431958} - m_Layer: 5 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &581431958 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &581431961 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &744711559 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 744711561} - - component: {fileID: 744711560} - - component: {fileID: 744711562} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &744711560 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: TreeView - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/TreeView - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &744711561 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.008802817, y: 0.008802817, z: 0.008802817} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &744711562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a8846401629fd134dbc0abfb115b498b, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1200630629 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1200630632} - - component: {fileID: 1200630631} - - component: {fileID: 1200630630} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1200630630 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 ---- !u!20 &1200630631 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 2684354527 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1200630632 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1777378358 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1777378361} - - component: {fileID: 1777378360} - - component: {fileID: 1777378359} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1777378359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1777378360 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1777378361 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 3.3351648, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity.meta deleted file mode 100644 index 60f7f19..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0bc596d82327941479fad22a23c339ee -timeCreated: 1466782562 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity deleted file mode 100644 index 3f24b2f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &959293110 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 959293113} - - component: {fileID: 959293112} - - component: {fileID: 959293111} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &959293111 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 959293110} - m_Enabled: 1 ---- !u!20 &959293112 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 959293110} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 2684354527 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &959293113 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 959293110} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1299316600 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1299316604} - - component: {fileID: 1299316601} - m_Layer: 5 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1299316601 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1299316600} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &1299316604 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1299316600} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1874263660 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1874263662} - - component: {fileID: 1874263661} - - component: {fileID: 1874263663} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1874263661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1874263660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: PullToRefresh - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/PullToRefresh - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &1874263662 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1874263660} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1874263663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1874263660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cc11ef8b3e553814d83688351418d0cf, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1991189706 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1991189709} - - component: {fileID: 1991189708} - - component: {fileID: 1991189707} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1991189707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1991189706} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1991189708 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1991189706} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1991189709 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1991189706} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity.meta deleted file mode 100644 index 6198ce1..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cc85150c2ddfaec43bcfa322713d27f8 -timeCreated: 1470303075 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity deleted file mode 100644 index e485bdc..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &581431957 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 581431961} - - component: {fileID: 581431958} - m_Layer: 5 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &581431958 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 640 - designResolutionY: 960 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &581431961 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &744711559 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 744711561} - - component: {fileID: 744711560} - - component: {fileID: 744711562} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &744711560 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: ScrollPane - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/ScrollPane - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &744711561 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &744711562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 33e449f584dc08845b990406509de039, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1200630629 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1200630632} - - component: {fileID: 1200630631} - - component: {fileID: 1200630630} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1200630630 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 ---- !u!20 &1200630631 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 2684354527 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1200630632 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1777378358 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1777378361} - - component: {fileID: 1777378360} - - component: {fileID: 1777378359} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1777378359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1777378360 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1777378361 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.889717, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity.meta deleted file mode 100644 index ac3ce0d..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 867859be40bfae045a2669a57b1e6601 -timeCreated: 1476970857 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity deleted file mode 100644 index fc0b238..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &581431957 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 581431961} - - component: {fileID: 581431958} - m_Layer: 5 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &581431958 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &581431961 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &744711559 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 744711561} - - component: {fileID: 744711560} - - component: {fileID: 744711562} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &744711560 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: TypingEffect - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/TypingEffect - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &744711561 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &744711562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2686886b98b45764893ae635e5b76d89, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1200630629 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1200630632} - - component: {fileID: 1200630631} - - component: {fileID: 1200630630} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1200630630 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 ---- !u!20 &1200630631 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 2684354527 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1200630632 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1777378358 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1777378361} - - component: {fileID: 1777378360} - - component: {fileID: 1777378359} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1777378359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1777378360 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1777378361 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity.meta deleted file mode 100644 index e2ea11f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5e6a75b5a71cbe240b1cc2d14cdc5a3d -timeCreated: 1477472028 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity deleted file mode 100644 index 0a42694..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity +++ /dev/null @@ -1,379 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 0 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &581431957 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 581431961} - - component: {fileID: 581431958} - m_Layer: 5 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &581431958 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &581431961 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &744711559 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 744711561} - - component: {fileID: 744711560} - - component: {fileID: 744711562} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &744711560 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: TurnPage - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/TurnPage - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &744711561 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &744711562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0246af0692f804e419764f96010083e0, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1200630629 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1200630632} - - component: {fileID: 1200630631} - - component: {fileID: 1200630630} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1200630630 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 ---- !u!20 &1200630631 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 536870879 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1200630632 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1777378358 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1777378361} - - component: {fileID: 1777378360} - - component: {fileID: 1777378359} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1777378359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1777378360 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1777378361 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.875, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity.meta deleted file mode 100644 index 45c5531..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 9258ae47c8374554f9c0e7d9b7e61df1 -timeCreated: 1547395694 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity deleted file mode 100644 index bd101b0..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity +++ /dev/null @@ -1,510 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.37311924, g: 0.38073963, b: 0.3587269, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 679030288} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &581431957 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 581431961} - - component: {fileID: 581431958} - m_Layer: 5 - m_Name: Example - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &581431958 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 581431957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} - m_Name: - m_EditorClassIdentifier: - scaleMode: 1 - screenMatchMode: 0 - designResolutionX: 1136 - designResolutionY: 640 - fallbackScreenDPI: 96 - defaultSpriteDPI: 96 - constantScaleFactor: 1 - ignoreOrientation: 0 ---- !u!4 &581431961 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 581431957} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!850595691 &679030288 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Settings.lighting - serializedVersion: 6 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 0 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_LightmapCompression: 3 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 1 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVREnvironmentSampleCount: 512 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentImportanceSampling: 0 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_PVRTiledBaking: 0 - m_NumRaysToShootPerTexel: -1 - m_RespectSceneVisibilityWhenBakingGI: 0 ---- !u!1 &744711559 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 744711561} - - component: {fileID: 744711560} - - component: {fileID: 744711562} - m_Layer: 5 - m_Name: UIPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &744711560 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: TextMeshPro - componentName: Main - fitScreen: 1 - sortingOrder: 0 - packagePath: UI/TextMeshPro - renderMode: 0 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 1 - touchDisabled: 0 - cachedUISize: {x: 1136, y: 640} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!4 &744711561 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 744711559} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &744711562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 744711559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 16519a7b1af254640a93412fae4bd9be, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1200630629 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1200630632} - - component: {fileID: 1200630631} - - component: {fileID: 1200630630} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1200630630 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 ---- !u!20 &1200630631 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1200630629} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 2684354527 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1200630632 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1200630629} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1777378358 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1777378361} - - component: {fileID: 1777378360} - - component: {fileID: 1777378359} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1777378359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &1777378360 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1777378358} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1777378361 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1777378358} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 8.888889, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 581431961} - - {fileID: 744711561} - - {fileID: 1777378361} - - {fileID: 1200630632} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity.meta deleted file mode 100644 index bd1eacd..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 80c3912e6b42b40619898246e8b4ee26 -timeCreated: 1477472028 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity deleted file mode 100644 index 8c54451..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity +++ /dev/null @@ -1,6757 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44745964, g: 0.4974082, b: 0.5752875, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 8b5a15e521a7d4c84b477c4508d3e600, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &5036419 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5036420} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5036420 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5036419} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2079800125} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8244350 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8244351} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8244351 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8244350} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 16865924} - m_Father: {fileID: 124523146} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &10342370 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 10342371} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &10342371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 10342370} - serializedVersion: 2 - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 890592555} - m_Father: {fileID: 1660272298} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &16865923 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 16865924} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &16865924 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 16865923} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8244351} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &29972413 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 29972414} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &29972414 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 29972413} - serializedVersion: 2 - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 382534005} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &33533795 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 33533796} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &33533796 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33533795} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 196546666} - m_Father: {fileID: 388786820} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &46704612 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 46704613} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &46704613 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 46704612} - serializedVersion: 2 - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 652247988} - - {fileID: 304956530} - - {fileID: 185726998} - m_Father: {fileID: 419218095} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &60996235 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 60996236} - - component: {fileID: 60996237} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &60996236 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 60996235} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2079800125} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &60996237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 60996235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!1 &64498699 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 64498700} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &64498700 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 64498699} - serializedVersion: 2 - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 681416381} - m_Father: {fileID: 723111075} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &71067424 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 71067425} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &71067425 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 71067424} - serializedVersion: 2 - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 581922888} - - {fileID: 1377559287} - - {fileID: 961039522} - - {fileID: 1101670942} - - {fileID: 105021824} - m_Father: {fileID: 1601170548} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &84785414 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 84785415} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &84785415 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 84785414} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 269854298} - m_Father: {fileID: 723111075} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &99807783 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 99807784} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &99807784 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 99807783} - serializedVersion: 2 - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1100917135} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &105021823 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 105021824} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &105021824 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 105021823} - serializedVersion: 2 - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 540512983} - m_Father: {fileID: 71067425} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &124523145 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 124523146} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &124523146 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 124523145} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8244351} - m_Father: {fileID: 1377559287} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &124999956 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 124999957} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &124999957 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 124999956} - serializedVersion: 2 - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 311668860} - m_Father: {fileID: 1610934284} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &136935965 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 136935966} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &136935966 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 136935965} - serializedVersion: 2 - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1558064592} - m_Father: {fileID: 304956530} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &141835723 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 141835724} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &141835724 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 141835723} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1536537271} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &141837797 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 141837798} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &141837798 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 141837797} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 310503870} - m_Father: {fileID: 640344375} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &178338294 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 178338295} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &178338295 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 178338294} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1403374041} - m_Father: {fileID: 540512983} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &182203586 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 182203587} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &182203587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 182203586} - serializedVersion: 2 - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1918447119} - m_Father: {fileID: 723111075} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &185726997 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 185726998} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &185726998 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 185726997} - serializedVersion: 2 - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1391249524} - m_Father: {fileID: 46704613} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &196546665 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 196546666} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &196546666 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 196546665} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 33533796} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &200112765 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 200112766} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &200112766 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 200112765} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 562522279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &201122037 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 201122038} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &201122038 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 201122037} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1776529100} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &210188097 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 210188098} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &210188098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 210188097} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1085792356} - m_Father: {fileID: 2090325103} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &265171338 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 265171339} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &265171339 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 265171338} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 724892307} - m_Father: {fileID: 471461010} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &266676499 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 266676500} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &266676500 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 266676499} - serializedVersion: 2 - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1040498778} - m_Father: {fileID: 886801879} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &269382426 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 269382427} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &269382427 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 269382426} - serializedVersion: 2 - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1575296827} - m_Father: {fileID: 1439776395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &269854297 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 269854298} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &269854298 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 269854297} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2066001520} - m_Father: {fileID: 84785415} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &281554412 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 281554413} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &281554413 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 281554412} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1541416887} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &283656532 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 283656534} - - component: {fileID: 283656533} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &283656533 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 283656532} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1.6 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294965503 - m_RenderingLayerMask: 1 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &283656534 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 283656532} - serializedVersion: 2 - m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} - m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &296495358 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 296495359} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &296495359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 296495358} - serializedVersion: 2 - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1579824420} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &304956529 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 304956530} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &304956530 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304956529} - serializedVersion: 2 - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 136935966} - m_Father: {fileID: 46704613} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &310503869 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 310503870} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &310503870 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 310503869} - serializedVersion: 2 - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2056506721} - m_Father: {fileID: 141837798} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &311668859 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 311668860} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &311668860 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 311668859} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 522174631} - m_Father: {fileID: 124999957} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &320279271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 320279272} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &320279272 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320279271} - serializedVersion: 2 - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1735343271} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &362199494 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 362199495} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &362199495 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 362199494} - serializedVersion: 2 - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1849938685} - m_Father: {fileID: 1660272298} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &362404530 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 362404531} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &362404531 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 362404530} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1699059572} - m_Father: {fileID: 1918447119} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &371764069 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 371764070} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &371764070 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 371764069} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 472469749} - m_Father: {fileID: 1994621439} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &382534004 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 382534005} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &382534005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 382534004} - serializedVersion: 2 - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 29972414} - m_Father: {fileID: 1622701630} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &388786819 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 388786820} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &388786820 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 388786819} - serializedVersion: 2 - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 33533796} - m_Father: {fileID: 961039522} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &389821416 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 389821417} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &389821417 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 389821416} - serializedVersion: 2 - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1118303294} - m_Father: {fileID: 449647728} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &404196632 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 404196633} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &404196633 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 404196632} - serializedVersion: 2 - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 471461010} - - {fileID: 688154556} - - {fileID: 1668246616} - m_Father: {fileID: 764294705} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &408504071 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 408504072} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &408504072 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 408504071} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1695770105} - m_Father: {fileID: 854551342} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &419218094 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 419218095} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &419218095 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 419218094} - serializedVersion: 2 - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 46704613} - m_Father: {fileID: 1063386138} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &433657617 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 433657618} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &433657618 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 433657617} - serializedVersion: 2 - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 640344375} - m_Father: {fileID: 1960716673} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &449647727 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 449647728} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &449647728 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449647727} - serializedVersion: 2 - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1063386138} - - {fileID: 389821417} - - {fileID: 1692720590} - - {fileID: 1841998838} - - {fileID: 1979202748} - m_Father: {fileID: 1100917135} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &452112782 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 452112783} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &452112783 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452112782} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1340922722} - m_Father: {fileID: 1063554055} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &471461009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 471461010} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &471461010 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 471461009} - serializedVersion: 2 - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 265171339} - m_Father: {fileID: 404196633} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &472469748 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 472469749} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &472469749 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 472469748} - serializedVersion: 2 - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1209350543} - m_Father: {fileID: 371764070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &484426596 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 484426597} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &484426597 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 484426596} - serializedVersion: 2 - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2059191264} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &496251865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 496251870} - - component: {fileID: 496251869} - - component: {fileID: 496251866} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &496251866 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 496251865} - m_Enabled: 1 ---- !u!20 &496251869 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 496251865} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 58.5 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &496251870 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 496251865} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 1.8, z: 300} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &516850680 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 516850681} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &516850681 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 516850680} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1379554746} - m_Father: {fileID: 581922888} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &522174630 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 522174631} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &522174631 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 522174630} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 311668860} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &540512982 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 540512983} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &540512983 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 540512982} - serializedVersion: 2 - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 178338295} - m_Father: {fileID: 105021824} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &562522278 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 562522279} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &562522279 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 562522278} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 200112766} - m_Father: {fileID: 1849938685} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &563181349 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 563181350} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &563181350 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 563181349} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1935173623} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &581922887 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 581922888} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &581922888 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 581922887} - serializedVersion: 2 - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 516850681} - m_Father: {fileID: 71067425} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &597323086 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 597323087} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &597323087 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597323086} - serializedVersion: 2 - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1366695883} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &612473350 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 612473353} - - component: {fileID: 612473352} - - component: {fileID: 612473351} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &612473351 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612473350} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &612473352 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612473350} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &612473353 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612473350} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 7.5321693, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &623410476 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 623410477} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &623410477 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 623410476} - serializedVersion: 2 - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1654971423} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &625686888 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 625686889} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &625686889 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 625686888} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2079800125} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &640344374 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 640344375} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &640344375 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640344374} - serializedVersion: 2 - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 141837798} - m_Father: {fileID: 433657618} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &646268139 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 646268140} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &646268140 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 646268139} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1437107419} - m_Father: {fileID: 1040498778} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &652247987 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 652247988} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &652247988 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 652247987} - serializedVersion: 2 - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1883865716} - m_Father: {fileID: 46704613} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &671199785 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 671199786} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &671199786 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 671199785} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2146512411} - m_Father: {fileID: 1057800475} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &681416380 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 681416381} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &681416381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 681416380} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 767644321} - m_Father: {fileID: 64498700} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &688154555 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 688154556} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &688154556 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 688154555} - serializedVersion: 2 - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1610934284} - m_Father: {fileID: 404196633} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &696351200 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 696351201} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &696351201 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 696351200} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 767644321} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &700233631 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 700233632} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &700233632 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 700233631} - serializedVersion: 2 - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1749708711} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &723111074 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 723111075} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &723111075 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 723111074} - serializedVersion: 2 - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 878120660} - - {fileID: 1072575093} - - {fileID: 182203587} - - {fileID: 64498700} - - {fileID: 84785415} - m_Father: {fileID: 1558064592} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &724892306 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 724892307} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &724892307 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 724892306} - serializedVersion: 2 - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2049875416} - m_Father: {fileID: 265171339} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &764294704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 764294705} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &764294705 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 764294704} - serializedVersion: 2 - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 404196633} - - {fileID: 1004345614} - - {fileID: 824471989} - - {fileID: 1909629311} - - {fileID: 1485252299} - m_Father: {fileID: 1960716673} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &767644320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 767644321} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &767644321 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 767644320} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 696351201} - m_Father: {fileID: 681416381} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &790087695 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 790087696} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &790087696 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 790087695} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 816475217} - m_Father: {fileID: 1816919435} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &805521474 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 805521475} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &805521475 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 805521474} - serializedVersion: 2 - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1654971423} - m_Father: {fileID: 1004345614} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &812822684 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 812822685} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &812822685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 812822684} - serializedVersion: 2 - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1676684126} - m_Father: {fileID: 1063386138} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &816475216 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 816475217} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &816475217 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 816475216} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 790087696} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &824471988 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 824471989} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &824471989 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 824471988} - serializedVersion: 2 - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1622701630} - m_Father: {fileID: 764294705} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &835608755 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 835608758} - - component: {fileID: 835608757} - - component: {fileID: 835608756} - m_Layer: 0 - m_Name: Terrain - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!154 &835608756 -TerrainCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 835608755} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 2 - m_TerrainData: {fileID: 15600000, guid: 82e50d0f43b868748b87d9050400e11a, type: 2} - m_EnableTreeColliders: 1 ---- !u!218 &835608757 -Terrain: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 835608755} - m_Enabled: 1 - serializedVersion: 6 - m_TerrainData: {fileID: 15600000, guid: 82e50d0f43b868748b87d9050400e11a, type: 2} - m_TreeDistance: 5000 - m_TreeBillboardDistance: 50 - m_TreeCrossFadeLength: 5 - m_TreeMaximumFullLODCount: 50 - m_DetailObjectDistance: 80 - m_DetailObjectDensity: 1 - m_HeightmapPixelError: 5 - m_SplatMapDistance: 1000 - m_HeightmapMaximumLOD: 0 - m_ShadowCastingMode: 2 - m_DrawHeightmap: 1 - m_DrawInstanced: 0 - m_DrawTreesAndFoliage: 1 - m_StaticShadowCaster: 0 - m_IgnoreQualitySettings: 0 - m_ReflectionProbeUsage: 1 - m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0} - m_BakeLightProbesForTrees: 1 - m_PreserveTreePrototypeLayers: 0 - m_DeringLightProbesForTrees: 1 - m_ReceiveGI: 1 - m_ScaleInLightmap: 0.0512 - m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} - m_GroupingID: 0 - m_RenderingLayerMask: 1 - m_AllowAutoConnect: 0 - m_EnableHeightmapRayTracing: 1 - m_EnableTreesAndDetailsRayTracing: 0 - m_TreeMotionVectorModeOverride: 3 ---- !u!4 &835608758 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 835608755} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &839143940 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 839143941} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &839143941 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 839143940} - serializedVersion: 2 - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1091565651} - m_Father: {fileID: 952781891} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &841096869 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 841096870} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &841096870 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 841096869} - serializedVersion: 2 - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1994728501} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &854551341 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 854551342} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &854551342 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 854551341} - serializedVersion: 2 - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 408504072} - m_Father: {fileID: 886801879} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &859168846 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 859168847} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &859168847 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 859168846} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1552450422} - m_Father: {fileID: 1807796255} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &878120659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 878120660} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &878120660 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 878120659} - serializedVersion: 2 - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1816919435} - m_Father: {fileID: 723111075} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &886801878 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 886801879} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &886801879 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 886801878} - serializedVersion: 2 - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 266676500} - - {fileID: 1807796255} - - {fileID: 854551342} - - {fileID: 1759515010} - - {fileID: 1047911623} - m_Father: {fileID: 1416540639} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &890592554 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 890592555} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &890592555 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 890592554} - serializedVersion: 2 - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1935173623} - m_Father: {fileID: 10342371} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &893931755 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 893931756} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &893931756 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 893931755} - serializedVersion: 2 - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1493358181} - m_Father: {fileID: 1660272298} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &904349544 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 904349545} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &904349545 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 904349544} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2049875416} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &920497110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 920497111} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &920497111 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 920497110} - serializedVersion: 2 - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1275721354} - m_Father: {fileID: 1287402386} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &939129881 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 939129882} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &939129882 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 939129881} - serializedVersion: 2 - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2083958133} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &952781890 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 952781891} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &952781891 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 952781890} - serializedVersion: 2 - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 839143941} - m_Father: {fileID: 1409439575} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &956014011 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 956014012} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &956014012 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 956014011} - serializedVersion: 2 - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2085661087} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &961039521 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 961039522} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &961039522 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 961039521} - serializedVersion: 2 - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 388786820} - m_Father: {fileID: 71067425} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1004345613 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1004345614} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1004345614 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1004345613} - serializedVersion: 2 - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 805521475} - m_Father: {fileID: 764294705} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1037583218 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1037583219} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1037583219 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037583218} - serializedVersion: 2 - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1063554055} - m_Father: {fileID: 1660272298} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1040498777 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1040498778} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1040498778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040498777} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 646268140} - m_Father: {fileID: 266676500} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1047911622 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1047911623} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1047911623 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1047911622} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2041486138} - m_Father: {fileID: 886801879} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1057800474 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1057800475} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1057800475 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1057800474} - serializedVersion: 2 - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 671199786} - m_Father: {fileID: 1676684126} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1063386137 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1063386138} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1063386138 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1063386137} - serializedVersion: 2 - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2090325103} - - {fileID: 812822685} - - {fileID: 419218095} - m_Father: {fileID: 449647728} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1063554054 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1063554055} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1063554055 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1063554054} - serializedVersion: 2 - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 452112783} - m_Father: {fileID: 1037583219} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1072575092 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1072575093} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1072575093 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1072575092} - serializedVersion: 2 - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1104598794} - m_Father: {fileID: 723111075} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1080709910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1080709911} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1080709911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1080709910} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1749708711} - m_Father: {fileID: 1101670942} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1085792355 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1085792356} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1085792356 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1085792355} - serializedVersion: 2 - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1887606359} - m_Father: {fileID: 210188098} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1091565650 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1091565651} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1091565651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1091565650} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1660272298} - m_Father: {fileID: 839143941} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1100917134 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1100917135} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1100917135 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1100917134} - serializedVersion: 2 - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 99807784} - - {fileID: 449647728} - - {fileID: 1439776395} - m_Father: {fileID: 1536537271} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1101670941 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1101670942} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1101670942 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1101670941} - serializedVersion: 2 - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1080709911} - m_Father: {fileID: 71067425} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1104598793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1104598794} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1104598794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1104598793} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1994728501} - m_Father: {fileID: 1072575093} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1118303293 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1118303294} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1118303294 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1118303293} - serializedVersion: 2 - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1483089920} - m_Father: {fileID: 389821417} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1209350542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1209350543} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1209350543 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1209350542} - serializedVersion: 2 - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472469749} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1275721353 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1275721354} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1275721354 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275721353} - serializedVersion: 2 - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 920497111} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1286947837 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1286947838} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1286947838 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1286947837} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1776529100} - m_Father: {fileID: 1759515010} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1287402385 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1287402386} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1287402386 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1287402385} - serializedVersion: 2 - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 920497111} - m_Father: {fileID: 1909629311} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1326549445 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1326549446} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1326549446 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1326549445} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1887606359} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1340922721 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1340922722} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1340922722 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340922721} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 452112783} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1366695882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1366695883} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1366695883 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1366695882} - serializedVersion: 2 - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 597323087} - m_Father: {fileID: 1493363724} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1377559286 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1377559287} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1377559287 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1377559286} - serializedVersion: 2 - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 124523146} - m_Father: {fileID: 71067425} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1379554745 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1379554746} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1379554746 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1379554745} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1582896583} - m_Father: {fileID: 516850681} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1381831530 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1381831531} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1381831531 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381831530} - serializedVersion: 2 - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1416540639} - m_Father: {fileID: 2090313843} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1391249523 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1391249524} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1391249524 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1391249523} - serializedVersion: 2 - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1601170548} - m_Father: {fileID: 185726998} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1392945909 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1392945910} - - component: {fileID: 1392945911} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1392945910 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1392945909} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1536537271} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!137 &1392945911 -SkinnedMeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1392945909} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 3 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 419218095} - - {fileID: 1063386138} - - {fileID: 185726998} - - {fileID: 652247988} - - {fileID: 304956530} - - {fileID: 812822685} - - {fileID: 449647728} - - {fileID: 2090325103} - - {fileID: 1391249524} - - {fileID: 136935966} - - {fileID: 389821417} - - {fileID: 1692720590} - - {fileID: 1841998838} - - {fileID: 2020153047} - - {fileID: 1979202748} - - {fileID: 1493363724} - - {fileID: 1747274113} - - {fileID: 46704613} - - {fileID: 1558064592} - - {fileID: 1118303294} - - {fileID: 1903010123} - - {fileID: 1483089920} - - {fileID: 723111075} - - {fileID: 878120660} - - {fileID: 1816919435} - - {fileID: 64498700} - - {fileID: 84785415} - - {fileID: 681416381} - - {fileID: 269854298} - - {fileID: 182203587} - - {fileID: 1918447119} - - {fileID: 1072575093} - - {fileID: 1104598794} - - {fileID: 790087696} - - {fileID: 1994728501} - - {fileID: 362404531} - - {fileID: 767644321} - - {fileID: 2066001520} - - {fileID: 1584622593} - - {fileID: 1887606359} - - {fileID: 1085792356} - - {fileID: 210188098} - - {fileID: 1563877873} - - {fileID: 1366695883} - - {fileID: 597323087} - - {fileID: 1601170548} - - {fileID: 71067425} - - {fileID: 581922888} - - {fileID: 516850681} - - {fileID: 1101670942} - - {fileID: 105021824} - - {fileID: 1080709911} - - {fileID: 540512983} - - {fileID: 961039522} - - {fileID: 388786820} - - {fileID: 1379554746} - - {fileID: 1377559287} - - {fileID: 124523146} - - {fileID: 33533796} - - {fileID: 8244351} - - {fileID: 1749708711} - - {fileID: 178338295} - - {fileID: 1057800475} - - {fileID: 671199786} - - {fileID: 1676684126} - - {fileID: 1439776395} - - {fileID: 2059191264} - - {fileID: 484426597} - - {fileID: 269382427} - - {fileID: 1575296827} - - {fileID: 2083958133} - - {fileID: 939129882} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 449647728} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!1 &1403374040 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1403374041} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1403374041 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1403374040} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 178338295} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1409439574 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1409439575} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1409439575 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1409439574} - serializedVersion: 2 - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1735343271} - - {fileID: 2090313843} - - {fileID: 952781891} - m_Father: {fileID: 1668246616} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1416540638 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1416540639} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1416540639 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1416540638} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 886801879} - m_Father: {fileID: 1381831531} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1437107418 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1437107419} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1437107419 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1437107418} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 646268140} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1439776394 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1439776395} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1439776395 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1439776394} - serializedVersion: 2 - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 269382427} - m_Father: {fileID: 1100917135} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1483089919 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1483089920} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1483089920 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1483089919} - serializedVersion: 2 - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1563877873} - m_Father: {fileID: 1118303294} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1485252298 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1485252299} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1485252299 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1485252298} - serializedVersion: 2 - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2119835651} - m_Father: {fileID: 764294705} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1493358180 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1493358181} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1493358181 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1493358180} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2085661087} - m_Father: {fileID: 893931756} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1493363723 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1493363724} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1493363724 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1493363723} - serializedVersion: 2 - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1366695883} - m_Father: {fileID: 1692720590} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1536537270 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1536537271} - - component: {fileID: 1536537272} - m_Layer: 0 - m_Name: npc2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1536537271 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1536537270} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} - m_LocalPosition: {x: 252, y: 0, z: 306} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1392945910} - - {fileID: 141835724} - - {fileID: 1100917135} - - {fileID: 2029917184} - - {fileID: 1969043988} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!111 &1536537272 -Animation: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1536537270} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!1 &1541416886 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1541416887} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1541416887 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1541416886} - serializedVersion: 2 - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 281554413} - m_Father: {fileID: 2119835651} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1552450421 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1552450422} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1552450422 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1552450421} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1847474416} - m_Father: {fileID: 859168847} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1558064591 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1558064592} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1558064592 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1558064591} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 723111075} - m_Father: {fileID: 136935966} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1563877872 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1563877873} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1563877873 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1563877872} - serializedVersion: 2 - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1483089920} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1564631249 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1564631250} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1564631250 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564631249} - serializedVersion: 2 - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2066001520} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1575296826 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1575296827} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1575296827 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1575296826} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2083958133} - m_Father: {fileID: 269382427} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1579824419 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1579824420} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1579824420 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1579824419} - serializedVersion: 2 - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 296495359} - m_Father: {fileID: 2041486138} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1582896582 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1582896583} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1582896583 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1582896582} - serializedVersion: 2 - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1379554746} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1584622592 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1584622593} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1584622593 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1584622592} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1903010123} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1601170547 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1601170548} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1601170548 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1601170547} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 71067425} - m_Father: {fileID: 1391249524} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1610934283 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1610934284} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1610934284 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1610934283} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 124999957} - m_Father: {fileID: 688154556} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1622701629 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1622701630} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1622701630 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1622701629} - serializedVersion: 2 - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 382534005} - m_Father: {fileID: 824471989} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1654971422 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1654971423} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1654971423 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1654971422} - serializedVersion: 2 - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 623410477} - m_Father: {fileID: 805521475} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1660272297 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1660272298} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1660272298 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1660272297} - serializedVersion: 2 - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 893931756} - - {fileID: 362199495} - - {fileID: 1037583219} - - {fileID: 1994621439} - - {fileID: 10342371} - m_Father: {fileID: 1091565651} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1668246615 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1668246616} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1668246616 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1668246615} - serializedVersion: 2 - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1409439575} - m_Father: {fileID: 404196633} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1676684125 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1676684126} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1676684126 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1676684125} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1057800475} - m_Father: {fileID: 812822685} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1692720589 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1692720590} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1692720590 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1692720589} - serializedVersion: 2 - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1493363724} - m_Father: {fileID: 449647728} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1695770104 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1695770105} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1695770105 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1695770104} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2051479725} - m_Father: {fileID: 408504072} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1699059571 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1699059572} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1699059572 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1699059571} - serializedVersion: 2 - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 362404531} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1735343270 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1735343271} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1735343271 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1735343270} - serializedVersion: 2 - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 320279272} - m_Father: {fileID: 1409439575} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1747274112 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1747274113} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1747274113 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1747274112} - serializedVersion: 2 - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2059191264} - m_Father: {fileID: 1841998838} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1749708710 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1749708711} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1749708711 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1749708710} - serializedVersion: 2 - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 700233632} - m_Father: {fileID: 1080709911} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1759515009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1759515010} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1759515010 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1759515009} - serializedVersion: 2 - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1286947838} - m_Father: {fileID: 886801879} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1776529099 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1776529100} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1776529100 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1776529099} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 201122038} - m_Father: {fileID: 1286947838} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1807796254 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1807796255} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1807796255 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1807796254} - serializedVersion: 2 - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 859168847} - m_Father: {fileID: 886801879} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1816919434 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1816919435} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1816919435 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1816919434} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 790087696} - m_Father: {fileID: 878120660} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1841998837 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1841998838} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1841998838 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1841998837} - serializedVersion: 2 - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1747274113} - m_Father: {fileID: 449647728} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1847474415 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1847474416} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1847474416 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1847474415} - serializedVersion: 2 - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1552450422} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1849938684 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1849938685} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1849938685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1849938684} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 562522279} - m_Father: {fileID: 362199495} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1883865715 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1883865716} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1883865716 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1883865715} - serializedVersion: 2 - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 652247988} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1887606358 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1887606359} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1887606359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1887606358} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1326549446} - m_Father: {fileID: 1085792356} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1903010122 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1903010123} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1903010123 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1903010122} - serializedVersion: 2 - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1584622593} - m_Father: {fileID: 2020153047} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1909629310 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1909629311} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1909629311 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1909629310} - serializedVersion: 2 - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1287402386} - m_Father: {fileID: 764294705} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1918447118 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1918447119} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1918447119 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1918447118} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 362404531} - m_Father: {fileID: 182203587} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1935173622 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1935173623} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1935173623 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1935173622} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 563181350} - m_Father: {fileID: 890592555} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1960716672 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1960716673} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1960716673 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1960716672} - serializedVersion: 2 - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2030544095} - - {fileID: 764294705} - - {fileID: 433657618} - m_Father: {fileID: 2079800125} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1969043987 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1969043988} - - component: {fileID: 1969043989} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1969043988 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1969043987} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1536537271} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1969043989 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1969043987} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!1 &1979202747 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1979202748} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1979202748 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1979202747} - serializedVersion: 2 - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2020153047} - m_Father: {fileID: 449647728} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1994621438 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1994621439} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1994621439 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994621438} - serializedVersion: 2 - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 371764070} - m_Father: {fileID: 1660272298} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1994728500 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1994728501} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1994728501 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994728500} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 841096870} - m_Father: {fileID: 1104598794} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2020153046 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2020153047} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2020153047 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2020153046} - serializedVersion: 2 - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1903010123} - m_Father: {fileID: 1979202748} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2029917183 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2029917184} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2029917184 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2029917183} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1536537271} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2030544094 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2030544095} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2030544095 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2030544094} - serializedVersion: 2 - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960716673} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2041486137 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2041486138} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2041486138 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2041486137} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1579824420} - m_Father: {fileID: 1047911623} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2049875415 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2049875416} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2049875416 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2049875415} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 904349545} - m_Father: {fileID: 724892307} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2051479724 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2051479725} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2051479725 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2051479724} - serializedVersion: 2 - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1695770105} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2056506720 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2056506721} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2056506721 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2056506720} - serializedVersion: 2 - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 310503870} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2059191263 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2059191264} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2059191264 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2059191263} - serializedVersion: 2 - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 484426597} - m_Father: {fileID: 1747274113} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2066001519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2066001520} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2066001520 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2066001519} - serializedVersion: 2 - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1564631250} - m_Father: {fileID: 269854298} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2079800124 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2079800125} - - component: {fileID: 2079800126} - m_Layer: 0 - m_Name: npc1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2079800125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2079800124} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} - m_LocalPosition: {x: 250, y: 0, z: 305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2091424559} - - {fileID: 5036420} - - {fileID: 1960716673} - - {fileID: 625686889} - - {fileID: 60996236} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!111 &2079800126 -Animation: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2079800124} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!1 &2083958132 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2083958133} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2083958133 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2083958132} - serializedVersion: 2 - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 939129882} - m_Father: {fileID: 1575296827} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2085661086 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2085661087} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2085661087 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2085661086} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 956014012} - m_Father: {fileID: 1493358181} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2090313842 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2090313843} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2090313843 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2090313842} - serializedVersion: 2 - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1381831531} - m_Father: {fileID: 1409439575} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2090325102 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2090325103} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2090325103 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2090325102} - serializedVersion: 2 - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 210188098} - m_Father: {fileID: 1063386138} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2091424558 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2091424559} - - component: {fileID: 2091424560} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2091424559 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2091424558} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2079800125} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!137 &2091424560 -SkinnedMeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2091424558} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 3 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 1668246616} - - {fileID: 404196633} - - {fileID: 952781891} - - {fileID: 1735343271} - - {fileID: 2090313843} - - {fileID: 688154556} - - {fileID: 764294705} - - {fileID: 471461010} - - {fileID: 839143941} - - {fileID: 1381831531} - - {fileID: 1004345614} - - {fileID: 824471989} - - {fileID: 1909629311} - - {fileID: 2119835651} - - {fileID: 1485252299} - - {fileID: 1622701630} - - {fileID: 1287402386} - - {fileID: 1409439575} - - {fileID: 1416540639} - - {fileID: 805521475} - - {fileID: 1541416887} - - {fileID: 1654971423} - - {fileID: 886801879} - - {fileID: 266676500} - - {fileID: 1040498778} - - {fileID: 1759515010} - - {fileID: 1047911623} - - {fileID: 1286947838} - - {fileID: 2041486138} - - {fileID: 854551342} - - {fileID: 408504072} - - {fileID: 1807796255} - - {fileID: 859168847} - - {fileID: 646268140} - - {fileID: 1552450422} - - {fileID: 1695770105} - - {fileID: 1776529100} - - {fileID: 1579824420} - - {fileID: 281554413} - - {fileID: 2049875416} - - {fileID: 724892307} - - {fileID: 265171339} - - {fileID: 623410477} - - {fileID: 382534005} - - {fileID: 29972414} - - {fileID: 1091565651} - - {fileID: 1660272298} - - {fileID: 893931756} - - {fileID: 1493358181} - - {fileID: 1994621439} - - {fileID: 10342371} - - {fileID: 371764070} - - {fileID: 890592555} - - {fileID: 1037583219} - - {fileID: 1063554055} - - {fileID: 2085661087} - - {fileID: 362199495} - - {fileID: 1849938685} - - {fileID: 452112783} - - {fileID: 562522279} - - {fileID: 472469749} - - {fileID: 1935173623} - - {fileID: 124999957} - - {fileID: 311668860} - - {fileID: 1610934284} - - {fileID: 433657618} - - {fileID: 920497111} - - {fileID: 1275721354} - - {fileID: 640344375} - - {fileID: 141837798} - - {fileID: 310503870} - - {fileID: 2056506721} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 764294705} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!1 &2119835650 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2119835651} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2119835651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2119835650} - serializedVersion: 2 - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1541416887} - m_Father: {fileID: 1485252299} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2146512410 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2146512411} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2146512411 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2146512410} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 671199786} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 283656534} - - {fileID: 2079800125} - - {fileID: 1536537271} - - {fileID: 496251870} - - {fileID: 835608758} - - {fileID: 612473353} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity.meta deleted file mode 100644 index 45dd5f6..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6940e9cae0b012148b4848f1c72c314a -timeCreated: 1446629259 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity deleted file mode 100644 index 99640df..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity +++ /dev/null @@ -1,3633 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44745964, g: 0.4974082, b: 0.5752875, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 50e14c8ab7287483884436c4d85a8b88, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &15108207 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 15108208} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &15108208 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 15108207} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1276711109} - m_Father: {fileID: 1270272204} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &38393142 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 38393143} - m_Layer: 0 - m_Name: BoneU1NPC0040_05 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &38393143 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 38393142} - serializedVersion: 2 - m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} - m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1055505314} - m_Father: {fileID: 1236509726} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &50436171 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 50436172} - m_Layer: 0 - m_Name: BoneU1NPC0040_02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &50436172 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 50436171} - serializedVersion: 2 - m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} - m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 146033428} - m_Father: {fileID: 568012397} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &56372223 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 56372224} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &56372224 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 56372223} - serializedVersion: 2 - m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1249745429} - m_Father: {fileID: 1126435719} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &65522053 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 65522054} - - component: {fileID: 65522055} - m_Layer: 0 - m_Name: U1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &65522054 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 65522053} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 183723516} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!137 &65522055 -SkinnedMeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 65522053} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 3 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - serializedVersion: 2 - m_Quality: 0 - m_UpdateWhenOffscreen: 0 - m_SkinnedMotionVectors: 1 - m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Bones: - - {fileID: 1332128444} - - {fileID: 1627784586} - - {fileID: 101316489} - - {fileID: 1638205040} - - {fileID: 1612671940} - - {fileID: 893508721} - - {fileID: 2110957757} - - {fileID: 380881373} - - {fileID: 1958496163} - - {fileID: 1898038932} - - {fileID: 2022197835} - - {fileID: 1236509726} - - {fileID: 551206772} - - {fileID: 1690705630} - - {fileID: 1566393274} - - {fileID: 38393143} - - {fileID: 1899411947} - - {fileID: 886260541} - - {fileID: 1763339584} - - {fileID: 568012397} - - {fileID: 1718624333} - - {fileID: 50436172} - - {fileID: 1303055814} - - {fileID: 229874027} - - {fileID: 1266631015} - - {fileID: 1044781005} - - {fileID: 1783049931} - - {fileID: 1270272204} - - {fileID: 1126435719} - - {fileID: 1615562991} - - {fileID: 1768862463} - - {fileID: 408660465} - - {fileID: 375531438} - - {fileID: 246022164} - - {fileID: 1201261629} - - {fileID: 881011152} - - {fileID: 15108208} - - {fileID: 56372224} - - {fileID: 781901569} - - {fileID: 1011722394} - - {fileID: 1253581289} - - {fileID: 384836653} - - {fileID: 146033428} - - {fileID: 1055505314} - - {fileID: 1719008872} - - {fileID: 2106303110} - - {fileID: 2001438911} - - {fileID: 1957960954} - - {fileID: 1379388956} - - {fileID: 795697302} - - {fileID: 833038440} - - {fileID: 2143453734} - - {fileID: 1548476278} - - {fileID: 1564743254} - - {fileID: 1421624883} - - {fileID: 542731910} - - {fileID: 2041868843} - - {fileID: 1627072381} - - {fileID: 483292745} - - {fileID: 1050763595} - - {fileID: 422349262} - - {fileID: 1986527229} - - {fileID: 1638789809} - - {fileID: 1091579117} - - {fileID: 951537747} - - {fileID: 1353184211} - - {fileID: 1974196522} - - {fileID: 1712308676} - - {fileID: 1713518042} - - {fileID: 149774030} - - {fileID: 491581709} - - {fileID: 995291859} - m_BlendShapeWeights: [] - m_RootBone: {fileID: 2110957757} - m_AABB: - m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} - m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} - m_DirtyAABB: 0 ---- !u!1 &79565531 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 79565532} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &79565532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 79565531} - serializedVersion: 2 - m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} - m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} - m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 422349262} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &101316488 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 101316489} - m_Layer: 0 - m_Name: BipU1NPC0040 R Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &101316489 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 101316488} - serializedVersion: 2 - m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} - m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1958496163} - m_Father: {fileID: 886260541} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &146033427 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 146033428} - m_Layer: 0 - m_Name: BoneU1NPC0040_03 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &146033428 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 146033427} - serializedVersion: 2 - m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} - m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 50436172} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &149774029 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 149774030} - m_Layer: 0 - m_Name: BoneU1NPC0040_17 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &149774030 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 149774029} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} - m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 491581709} - m_Father: {fileID: 1713518042} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &183723515 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 183723516} - - component: {fileID: 183723517} - m_Layer: 0 - m_Name: npc1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &183723516 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 183723515} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7291566, z: 0, w: 0.68434685} - m_LocalPosition: {x: 250, y: 0, z: 305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 65522054} - - {fileID: 710289621} - - {fileID: 1730598360} - - {fileID: 253452406} - - {fileID: 1681726023} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!111 &183723517 -Animation: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 183723515} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_Animations: - - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 1 ---- !u!1 &229874026 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 229874027} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &229874027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 229874026} - serializedVersion: 2 - m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} - m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1266631015} - m_Father: {fileID: 1303055814} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &246022163 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 246022164} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &246022164 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 246022163} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, - w: 0.9932022} - m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1989016381} - m_Father: {fileID: 1266631015} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &251485423 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 251485424} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &251485424 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 251485423} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} - m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} - m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1011722394} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &253452405 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 253452406} - m_Layer: 0 - m_Name: Particle View 01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &253452406 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 253452405} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 183723516} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &375531437 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 375531438} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &375531438 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 375531437} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1201261629} - m_Father: {fileID: 408660465} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &380881372 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 380881373} - m_Layer: 0 - m_Name: BipU1NPC0040 L Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &380881373 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 380881372} - serializedVersion: 2 - m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} - m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 384836653} - m_Father: {fileID: 1627784586} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &384836652 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 384836653} - m_Layer: 0 - m_Name: BipU1NPC0040 L Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &384836653 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 384836652} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, - w: 0.99840397} - m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1253581289} - m_Father: {fileID: 380881373} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &392747478 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 392747479} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &392747479 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 392747478} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1050763595} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &408660464 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 408660465} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &408660465 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 408660464} - serializedVersion: 2 - m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} - m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 375531438} - m_Father: {fileID: 1303055814} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &422349261 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 422349262} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger32 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &422349262 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422349261} - serializedVersion: 2 - m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.047542095, y: 0, z: 0} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 79565532} - m_Father: {fileID: 2143453734} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &483292744 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 483292745} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &483292745 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 483292744} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 511351800} - m_Father: {fileID: 1421624883} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &491581708 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 491581709} - m_Layer: 0 - m_Name: BoneU1NPC0040_18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &491581709 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 491581708} - serializedVersion: 2 - m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} - m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} - m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 995291859} - m_Father: {fileID: 149774030} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &511351799 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 511351800} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &511351800 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 511351799} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} - m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} - m_LocalScale: {x: -1, y: -1, z: -1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 483292745} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &542731909 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 542731910} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger02 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &542731910 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 542731909} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} - m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1458321673} - m_Father: {fileID: 1379388956} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &551206771 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 551206772} - m_Layer: 0 - m_Name: BoneU1NPC0040_08 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &551206772 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 551206771} - serializedVersion: 2 - m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} - m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1899411947} - m_Father: {fileID: 2110957757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &568012396 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 568012397} - m_Layer: 0 - m_Name: BoneU1NPC0040_01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &568012397 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568012396} - serializedVersion: 2 - m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} - m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 50436172} - m_Father: {fileID: 2022197835} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &710289620 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 710289621} - m_Layer: 0 - m_Name: Particle View 01 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &710289621 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 710289620} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 183723516} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &781901568 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 781901569} - m_Layer: 0 - m_Name: BoneU1NPC0040_15 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &781901569 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 781901568} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} - m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1718624333} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &795697301 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 795697302} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &795697302 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 795697301} - serializedVersion: 2 - m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} - m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2143453734} - m_Father: {fileID: 2001438911} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &833038439 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 833038440} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &833038440 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 833038439} - serializedVersion: 2 - m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1548476278} - m_Father: {fileID: 2001438911} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &881011151 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 881011152} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &881011152 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 881011151} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1574205442} - m_Father: {fileID: 1768862463} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &886260540 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 886260541} - m_Layer: 0 - m_Name: BipU1NPC0040 Neck - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &886260541 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 886260540} - serializedVersion: 2 - m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} - m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1638205040} - - {fileID: 1612671940} - - {fileID: 101316489} - m_Father: {fileID: 1332128444} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &893508720 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 893508721} - m_Layer: 0 - m_Name: BipU1NPC0040 R Thigh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &893508721 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 893508720} - serializedVersion: 2 - m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} - m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 951537747} - m_Father: {fileID: 1627784586} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &951537746 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 951537747} - m_Layer: 0 - m_Name: BipU1NPC0040 R Calf - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &951537747 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 951537746} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, - w: 0.9975652} - m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1638789809} - m_Father: {fileID: 893508721} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &995291858 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 995291859} - m_Layer: 0 - m_Name: BoneU1NPC0040_19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &995291859 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 995291858} - serializedVersion: 2 - m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} - m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 491581709} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1011722393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1011722394} - m_Layer: 0 - m_Name: BipU1NPC0040 L Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1011722394 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1011722393} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} - m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 251485424} - m_Father: {fileID: 1253581289} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1044781004 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1044781005} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1044781005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1044781004} - serializedVersion: 2 - m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} - m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1270272204} - m_Father: {fileID: 1303055814} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1050763594 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1050763595} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1050763595 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1050763594} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} - m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 392747479} - m_Father: {fileID: 1627072381} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1055505313 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1055505314} - m_Layer: 0 - m_Name: BoneU1NPC0040_06 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1055505314 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1055505313} - serializedVersion: 2 - m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} - m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1719008872} - m_Father: {fileID: 38393143} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1091579116 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1091579117} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1091579117 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1091579116} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1341468857} - m_Father: {fileID: 1638789809} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1126435718 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1126435719} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1126435719 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1126435718} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 56372224} - m_Father: {fileID: 1783049931} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1201261628 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1201261629} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1201261629 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1201261628} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} - m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1876102361} - m_Father: {fileID: 375531438} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1236509725 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1236509726} - m_Layer: 0 - m_Name: BoneU1NPC0040_04 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1236509726 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1236509725} - serializedVersion: 2 - m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} - m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 38393143} - m_Father: {fileID: 2110957757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1249745428 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1249745429} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1249745429 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1249745428} - serializedVersion: 2 - m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 56372224} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1253581288 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1253581289} - m_Layer: 0 - m_Name: BipU1NPC0040 L Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1253581289 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1253581288} - serializedVersion: 2 - m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} - m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} - m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1011722394} - m_Father: {fileID: 384836653} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1266631014 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1266631015} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1266631015 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266631014} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 1.0000002} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 246022164} - m_Father: {fileID: 229874027} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1270272203 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1270272204} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1270272204 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1270272203} - serializedVersion: 2 - m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, - w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 15108208} - m_Father: {fileID: 1044781005} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1270295776 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1270295781} - - component: {fileID: 1270295780} - - component: {fileID: 1270295777} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1270295777 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1270295776} - m_Enabled: 1 ---- !u!20 &1270295780 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1270295776} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 300 - field of view: 58.5 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 1073740255 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1270295781 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1270295776} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 250, y: 1.8, z: 300} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1276711108 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1276711109} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger3Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1276711109 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1276711108} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} - m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 15108208} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1303055813 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1303055814} - m_Layer: 0 - m_Name: BipU1NPC0040 L Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1303055814 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1303055813} - serializedVersion: 2 - m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} - m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 229874027} - - {fileID: 408660465} - - {fileID: 1615562991} - - {fileID: 1044781005} - - {fileID: 1783049931} - m_Father: {fileID: 1763339584} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1332128443 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1332128444} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1332128444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1332128443} - serializedVersion: 2 - m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} - m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 886260541} - m_Father: {fileID: 1627784586} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1341468856 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1341468857} - m_Layer: 0 - m_Name: BipU1NPC0040 R Toe0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1341468857 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1341468856} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} - m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1091579117} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1353184210 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1353184211} - m_Layer: 0 - m_Name: BipU1NPC0040 Prop1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1353184211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1353184210} - serializedVersion: 2 - m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} - m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} - m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1713518042} - m_Father: {fileID: 1730598360} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1379388955 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1379388956} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger01 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1379388956 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1379388955} - serializedVersion: 2 - m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, - w: 0.99064213} - m_LocalPosition: {x: -0.060612142, y: 0, z: 0} - m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 542731910} - m_Father: {fileID: 1957960954} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1421624882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1421624883} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1421624883 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1421624882} - serializedVersion: 2 - m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} - m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 483292745} - m_Father: {fileID: 1564743254} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1444526371 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1444526374} - - component: {fileID: 1444526373} - - component: {fileID: 1444526372} - m_Layer: 0 - m_Name: Terrain - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!154 &1444526372 -TerrainCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1444526371} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 2 - m_TerrainData: {fileID: 15600000, guid: 0a0d4f18f253a0149b2f98725610c8db, type: 2} - m_EnableTreeColliders: 1 ---- !u!218 &1444526373 -Terrain: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1444526371} - m_Enabled: 1 - serializedVersion: 6 - m_TerrainData: {fileID: 15600000, guid: 0a0d4f18f253a0149b2f98725610c8db, type: 2} - m_TreeDistance: 5000 - m_TreeBillboardDistance: 50 - m_TreeCrossFadeLength: 5 - m_TreeMaximumFullLODCount: 50 - m_DetailObjectDistance: 80 - m_DetailObjectDensity: 1 - m_HeightmapPixelError: 5 - m_SplatMapDistance: 1000 - m_HeightmapMaximumLOD: 0 - m_ShadowCastingMode: 2 - m_DrawHeightmap: 1 - m_DrawInstanced: 0 - m_DrawTreesAndFoliage: 1 - m_StaticShadowCaster: 0 - m_IgnoreQualitySettings: 0 - m_ReflectionProbeUsage: 1 - m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0} - m_BakeLightProbesForTrees: 1 - m_PreserveTreePrototypeLayers: 0 - m_DeringLightProbesForTrees: 1 - m_ReceiveGI: 1 - m_ScaleInLightmap: 0.0512 - m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} - m_GroupingID: 0 - m_RenderingLayerMask: 1 - m_AllowAutoConnect: 0 - m_EnableHeightmapRayTracing: 1 - m_EnableTreesAndDetailsRayTracing: 0 - m_TreeMotionVectorModeOverride: 3 ---- !u!4 &1444526374 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1444526371} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1458321672 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1458321673} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1458321673 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1458321672} - serializedVersion: 2 - m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} - m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} - m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 542731910} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1548476277 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1548476278} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger41 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1548476278 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1548476277} - serializedVersion: 2 - m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} - m_LocalPosition: {x: -0.032068193, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1986527229} - m_Father: {fileID: 833038440} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1564743253 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1564743254} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1564743254 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564743253} - serializedVersion: 2 - m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1421624883} - m_Father: {fileID: 2001438911} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1566393273 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1566393274} - m_Layer: 0 - m_Name: BoneU1NPC0040_12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1566393274 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566393273} - serializedVersion: 2 - m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} - m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1690705630} - m_Father: {fileID: 2110957757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1574205441 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1574205442} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1574205442 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1574205441} - serializedVersion: 2 - m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.03385985, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 881011152} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1612671939 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1612671940} - m_Layer: 0 - m_Name: BipU1NPC0040 L Clavicle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1612671940 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1612671939} - serializedVersion: 2 - m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} - m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1898038932} - m_Father: {fileID: 886260541} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1615562990 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1615562991} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1615562991 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1615562990} - serializedVersion: 2 - m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} - m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1768862463} - m_Father: {fileID: 1303055814} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1627072380 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1627072381} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1627072381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1627072380} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, - w: 0.94104224} - m_LocalPosition: {x: -0.03848189, y: 0, z: 0} - m_LocalScale: {x: 1.0000001, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1050763595} - m_Father: {fileID: 2041868843} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1627784585 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1627784586} - m_Layer: 0 - m_Name: BipU1NPC0040 Spine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1627784586 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1627784585} - serializedVersion: 2 - m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} - m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 380881373} - - {fileID: 893508721} - - {fileID: 1332128444} - m_Father: {fileID: 2110957757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1638205039 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1638205040} - m_Layer: 0 - m_Name: BipU1NPC0040 Head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1638205040 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1638205039} - serializedVersion: 2 - m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} - m_LocalPosition: {x: -0.07696378, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1.0000001} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2070960968} - m_Father: {fileID: 886260541} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1638789808 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1638789809} - m_Layer: 0 - m_Name: BipU1NPC0040 R Foot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1638789809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1638789808} - serializedVersion: 2 - m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} - m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1091579117} - m_Father: {fileID: 951537747} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1681726022 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1681726023} - - component: {fileID: 1681726024} - m_Layer: 0 - m_Name: HeadBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1681726023 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1681726022} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} - m_LocalPosition: {x: 0, y: 2.3, z: 0} - m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 183723516} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1681726024 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1681726022} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} - m_Name: - m_EditorClassIdentifier: - packageName: HeadBar - componentName: HeadBar - fitScreen: 0 - sortingOrder: 0 - packagePath: UI/HeadBar - renderMode: 2 - renderCamera: {fileID: 0} - position: {x: 0, y: 0, z: 0} - scale: {x: 1, y: 1, z: 1} - rotation: {x: 0, y: 0, z: 0} - fairyBatching: 0 - touchDisabled: 0 - cachedUISize: {x: 145, y: 106} - hitTestMode: 0 - setNativeChildrenOrder: 0 ---- !u!1 &1690705629 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1690705630} - m_Layer: 0 - m_Name: BoneU1NPC0040_13 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1690705630 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1690705629} - serializedVersion: 2 - m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} - m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1718624333} - m_Father: {fileID: 1566393274} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1712308675 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1712308676} - m_Layer: 0 - m_Name: BoneU1NPC0040_11 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1712308676 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1712308675} - serializedVersion: 2 - m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} - m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1974196522} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1713518041 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1713518042} - m_Layer: 0 - m_Name: BoneU1NPC0040_16 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1713518042 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1713518041} - serializedVersion: 2 - m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} - m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 149774030} - m_Father: {fileID: 1353184211} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1718624332 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1718624333} - m_Layer: 0 - m_Name: BoneU1NPC0040_14 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1718624333 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1718624332} - serializedVersion: 2 - m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} - m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} - m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 781901569} - m_Father: {fileID: 1690705630} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1719008871 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1719008872} - m_Layer: 0 - m_Name: BoneU1NPC0040_07 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1719008872 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1719008871} - serializedVersion: 2 - m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} - m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1055505314} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1730598359 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1730598360} - m_Layer: 0 - m_Name: BipU1NPC0040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1730598360 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1730598359} - serializedVersion: 2 - m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} - m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1873921414} - - {fileID: 2110957757} - - {fileID: 1353184211} - m_Father: {fileID: 183723516} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1739148838 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1739148839} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger4Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1739148839 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1739148838} - serializedVersion: 2 - m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} - m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} - m_LocalScale: {x: -1, y: -1, z: -0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1986527229} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1755567097 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1755567098} - - component: {fileID: 1755567099} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1755567098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1755567097} - serializedVersion: 2 - m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} - m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!108 &1755567099 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1755567097} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1.19 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294965503 - m_RenderingLayerMask: 1 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!1 &1763339583 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1763339584} - m_Layer: 0 - m_Name: BipU1NPC0040 L Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1763339584 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1763339583} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} - m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1303055814} - m_Father: {fileID: 1898038932} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1768862462 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1768862463} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1768862463 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1768862462} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} - m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 881011152} - m_Father: {fileID: 1615562991} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1783049930 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1783049931} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1783049931 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1783049930} - serializedVersion: 2 - m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} - m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} - m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1126435719} - m_Father: {fileID: 1303055814} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1873921413 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1873921414} - m_Layer: 0 - m_Name: BipU1NPC0040 Footsteps - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1873921414 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1873921413} - serializedVersion: 2 - m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} - m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1730598360} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1876102360 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1876102361} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger1Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1876102361 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1876102360} - serializedVersion: 2 - m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, - w: 1} - m_LocalPosition: {x: -0.029265404, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1201261629} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1898038931 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1898038932} - m_Layer: 0 - m_Name: BipU1NPC0040 L UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1898038932 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898038931} - serializedVersion: 2 - m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} - m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1763339584} - m_Father: {fileID: 1612671940} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1899411946 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1899411947} - m_Layer: 0 - m_Name: BoneU1NPC0040_09 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1899411947 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1899411946} - serializedVersion: 2 - m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} - m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1974196522} - m_Father: {fileID: 551206772} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1957960953 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1957960954} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1957960954 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1957960953} - serializedVersion: 2 - m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} - m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} - m_LocalScale: {x: 1, y: 1.0000001, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1379388956} - m_Father: {fileID: 2001438911} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1958496162 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1958496163} - m_Layer: 0 - m_Name: BipU1NPC0040 R UpperArm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1958496163 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1958496162} - serializedVersion: 2 - m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} - m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} - m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2106303110} - m_Father: {fileID: 101316489} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1974196521 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1974196522} - m_Layer: 0 - m_Name: BoneU1NPC0040_10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1974196522 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1974196521} - serializedVersion: 2 - m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} - m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1712308676} - m_Father: {fileID: 1899411947} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1986527228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1986527229} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger42 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1986527229 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1986527228} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} - m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} - m_LocalScale: {x: 1, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1739148839} - m_Father: {fileID: 1548476278} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1989016380 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1989016381} - m_Layer: 0 - m_Name: BipU1NPC0040 L Finger0Nub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1989016381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1989016380} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} - m_LocalPosition: {x: -0.02751398, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 246022164} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2001438910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2001438911} - m_Layer: 0 - m_Name: BipU1NPC0040 R Hand - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2001438911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2001438910} - serializedVersion: 2 - m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} - m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1957960954} - - {fileID: 2041868843} - - {fileID: 1564743254} - - {fileID: 795697302} - - {fileID: 833038440} - m_Father: {fileID: 2106303110} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2022197834 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2022197835} - m_Layer: 0 - m_Name: BoneU1NPC0040_00 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2022197835 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2022197834} - serializedVersion: 2 - m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} - m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 568012397} - m_Father: {fileID: 2110957757} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2041868842 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2041868843} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2041868843 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2041868842} - serializedVersion: 2 - m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} - m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} - m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1627072381} - m_Father: {fileID: 2001438911} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2070960967 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2070960968} - m_Layer: 0 - m_Name: BipU1NPC0040 HeadNub - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2070960968 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2070960967} - serializedVersion: 2 - m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} - m_LocalPosition: {x: -0.24115324, y: 0, z: 0} - m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1638205040} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2091270998 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2091271001} - - component: {fileID: 2091271000} - - component: {fileID: 2091270999} - m_Layer: 0 - m_Name: Stage Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2091270999 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2091270998} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} - m_Name: - m_EditorClassIdentifier: - constantSize: 1 ---- !u!20 &2091271000 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2091270998} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: -30 - far clip plane: 30 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 32 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &2091271001 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2091270998} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 7.5321693, y: -5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2106303109 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2106303110} - m_Layer: 0 - m_Name: BipU1NPC0040 R Forearm - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2106303110 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2106303109} - serializedVersion: 2 - m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} - m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} - m_LocalScale: {x: 0.9999999, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2001438911} - m_Father: {fileID: 1958496163} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2110957756 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2110957757} - m_Layer: 0 - m_Name: BipU1NPC0040 Pelvis - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2110957757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2110957756} - serializedVersion: 2 - m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1627784586} - - {fileID: 2022197835} - - {fileID: 1236509726} - - {fileID: 551206772} - - {fileID: 1566393274} - m_Father: {fileID: 1730598360} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2143453733 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2143453734} - m_Layer: 0 - m_Name: BipU1NPC0040 R Finger31 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2143453734 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2143453733} - serializedVersion: 2 - m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} - m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 422349262} - m_Father: {fileID: 795697302} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 1755567098} - - {fileID: 1270295781} - - {fileID: 183723516} - - {fileID: 1444526374} - - {fileID: 2091271001} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity.meta deleted file mode 100644 index ea2d5f4..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 44b386c5d0d35be45b1a3f0e55977f62 -timeCreated: 1446629280 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ScrollPane.meta b/Assets/Plugins/FairyGUI/Examples/ScrollPane.meta deleted file mode 100644 index ab07c55..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ScrollPane.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 988df54331278a444888cd30353fa8fb -folderAsset: yes -timeCreated: 1476976370 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs b/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs deleted file mode 100644 index ee947d9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs +++ /dev/null @@ -1,113 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class ScrollPaneMain : MonoBehaviour -{ - GComponent _mainView; - GList _list; - - void Awake() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - } - - void Start() - { - _mainView = this.GetComponent().ui; - - _list = _mainView.GetChild("list").asList; - _list.itemRenderer = RenderListItem; - _list.SetVirtual(); - _list.numItems = 1000; - _list.onTouchBegin.Add(OnClickList); - - _mainView.GetChild("box").asCom.onDrop.Add(OnDrop); - - LongPressGesture gesture = new LongPressGesture(_list); - gesture.once = true; - gesture.trigger = 1f; - gesture.onAction.Add(OnLongPress); - } - - void RenderListItem(int index, GObject obj) - { - GButton item = obj.asButton; - item.title = "Item " + index; - item.scrollPane.posX = 0; //reset scroll pos - - //Be carefull, RenderListItem is calling repeatedly, dont call 'Add' here! - //请注意,RenderListItem是重复调用的,不要使用Add增加侦听! - item.GetChild("b0").onClick.Set(OnClickStick); - item.GetChild("b1").onClick.Set(OnClickDelete); - } - - void OnClickList(EventContext context) - { - //find out if there is an item in edit status - //查找是否有项目处于编辑状态 - int cnt = _list.numChildren; - for (int i = 0; i < cnt; i++) - { - GButton item = _list.GetChildAt(i).asButton; - if (item.scrollPane.posX != 0) - { - //Check if clicked on the button - if (item.GetChild("b0").asButton.IsAncestorOf(GRoot.inst.touchTarget) - || item.GetChild("b1").asButton.IsAncestorOf(GRoot.inst.touchTarget)) - { - return; - } - item.scrollPane.SetPosX(0, true); - //avoid scroll pane default behavior - //取消滚动面板可能发生的拉动。 - item.scrollPane.CancelDragging(); - _list.scrollPane.CancelDragging(); - break; - } - } - } - - void OnLongPress(EventContext context) - { - //find out which item is under finger - //逐层往上知道查到点击了那个item - GObject obj = GRoot.inst.touchTarget; - GObject p = obj.parent; - while (p != null) - { - if (p == _list) - break; - - p = p.parent; - } - - if (p == null) - return; - Debug.Log(obj.text); - DragDropManager.inst.StartDrag(obj, obj.icon, obj.text); - } - - void OnDrop(EventContext context) - { - _mainView.GetChild("txt").text = "Drop " + (string)context.data; - } - - void OnClickStick(EventContext context) - { - _mainView.GetChild("txt").text = "Stick " + (((GObject)context.sender).parent).text; - } - - void OnClickDelete(EventContext context) - { - _mainView.GetChild("txt").text = "Delete " + (((GObject)context.sender).parent).text; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs.meta deleted file mode 100644 index 7d72193..0000000 --- a/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 33e449f584dc08845b990406509de039 -timeCreated: 1476970858 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TextMeshPro.meta b/Assets/Plugins/FairyGUI/Examples/TextMeshPro.meta deleted file mode 100644 index 985c648..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TextMeshPro.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d4ac09deb76ae42c8a3c62e19e2029f9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs b/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs deleted file mode 100644 index b547d9b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class TextMeshProMain : MonoBehaviour -{ - void Awake() - { - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs.meta deleted file mode 100644 index 2bf4ff5..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 16519a7b1af254640a93412fae4bd9be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Transition.meta b/Assets/Plugins/FairyGUI/Examples/Transition.meta deleted file mode 100644 index 55d1037..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Transition.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 9df2e7826734a4f47b0f45e7b7f3d65b -folderAsset: yes -timeCreated: 1446571749 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs b/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs deleted file mode 100644 index cd4fdf3..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs +++ /dev/null @@ -1,105 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class TransitionMain : MonoBehaviour -{ - GComponent _mainView; - GGroup _btnGroup; - GComponent _g1; - GComponent _g2; - GComponent _g3; - GComponent _g4; - GComponent _g5; - GComponent _g6; - - float _startValue; - float _endValue; - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _btnGroup = _mainView.GetChild("g0").asGroup; - - _g1 = UIPackage.CreateObject("Transition", "BOSS").asCom; - _g2 = UIPackage.CreateObject("Transition", "BOSS_SKILL").asCom; - _g3 = UIPackage.CreateObject("Transition", "TRAP").asCom; - - _g4 = UIPackage.CreateObject("Transition", "GoodHit").asCom; - _g5 = UIPackage.CreateObject("Transition", "PowerUp").asCom; - _g5.GetTransition("t0").SetHook("play_num_now", __playNum); - - _g6 = UIPackage.CreateObject("Transition", "PathDemo").asCom; - - _mainView.GetChild("btn0").onClick.Add(() => { __play(_g1); }); - _mainView.GetChild("btn1").onClick.Add(() => { __play(_g2); }); - _mainView.GetChild("btn2").onClick.Add(() => { __play(_g3); }); - _mainView.GetChild("btn3").onClick.Add(__play4); - _mainView.GetChild("btn4").onClick.Add(__play5); - _mainView.GetChild("btn5").onClick.Add(() => { __play(_g6); }); - } - - void __play(GComponent target) - { - _btnGroup.visible = false; - GRoot.inst.AddChild(target); - Transition t = target.GetTransition("t0"); - - t.Play(() => - { - _btnGroup.visible = true; - GRoot.inst.RemoveChild(target); - }); - } - - void __play4() - { - _btnGroup.visible = false; - _g4.x = GRoot.inst.width - _g4.width - 20; - _g4.y = 100; - GRoot.inst.AddChild(_g4); - Transition t = _g4.GetTransition("t0"); - t.Play(3, 0, () => - { - _btnGroup.visible = true; - GRoot.inst.RemoveChild(_g4); - }); - } - - void __play5() - { - _btnGroup.visible = false; - _g5.x = 20; - _g5.y = GRoot.inst.height - _g5.height - 100; - GRoot.inst.AddChild(_g5); - Transition t = _g5.GetTransition("t0"); - _startValue = 10000; - int add = UnityEngine.Random.Range(1000, 3000); - _endValue = _startValue + add; - _g5.GetChild("value").text = "" + _startValue; - _g5.GetChild("add_value").text = "" + add; - t.Play(() => - { - _btnGroup.visible = true; - GRoot.inst.RemoveChild(_g5); - }); - } - - void __playNum() - { - GTween.To(_startValue, _endValue, 0.3f).SetEase(EaseType.Linear) - .OnUpdate((GTweener tweener) => { _g5.GetChild("value").text = "" + Mathf.Floor(tweener.value.x); }); - - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs.meta deleted file mode 100644 index 3f5330a..0000000 --- a/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ab67b9a9f47fd3343b5aeb1333ea0527 -timeCreated: 1446571752 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TreeView.meta b/Assets/Plugins/FairyGUI/Examples/TreeView.meta deleted file mode 100644 index d0c6596..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TreeView.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 75789bcea4b63b64eb37ccf5f091eec0 -folderAsset: yes -timeCreated: 1467555752 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs b/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs deleted file mode 100644 index 02959d9..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs +++ /dev/null @@ -1,92 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class TreeViewMain : MonoBehaviour -{ - GComponent _mainView; - GTree _tree1; - GTree _tree2; - string _fileURL; - - void Awake() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - } - - void Start() - { - _mainView = this.GetComponent().ui; - - _fileURL = "ui://TreeView/file"; - - _tree1 = _mainView.GetChild("tree").asTree; - _tree1.onClickItem.Add(__clickNode); - _tree2 = _mainView.GetChild("tree2").asTree; - _tree2.onClickItem.Add(__clickNode); - _tree2.treeNodeRender = RenderTreeNode; - - GTreeNode topNode = new GTreeNode(true); - topNode.data = "I'm a top node"; - _tree2.rootNode.AddChild(topNode); - for (int i = 0; i < 5; i++) - { - GTreeNode node = new GTreeNode(false); - node.data = "Hello " + i; - topNode.AddChild(node); - } - - GTreeNode aFolderNode = new GTreeNode(true); - aFolderNode.data = "A folder node"; - topNode.AddChild(aFolderNode); - for (int i = 0; i < 5; i++) - { - GTreeNode node = new GTreeNode(false); - node.data = "Good " + i; - aFolderNode.AddChild(node); - } - - for (int i = 0; i < 3; i++) - { - GTreeNode node = new GTreeNode(false); - node.data = "World " + i; - topNode.AddChild(node); - } - - GTreeNode anotherTopNode = new GTreeNode(false); - anotherTopNode.data = new string[] { "I'm a top node too", "ui://TreeView/heart" }; - _tree2.rootNode.AddChild(anotherTopNode); - } - - void RenderTreeNode(GTreeNode node, GComponent obj) - { - if (node.isFolder) - { - obj.text = (string)node.data; - } - else if (node.data is string[]) - { - obj.icon = ((string[])node.data)[1]; - obj.text = ((string[])node.data)[0]; - } - else - { - obj.icon = _fileURL; - obj.text = (string)node.data; - } - } - - void __clickNode(EventContext context) - { - GTreeNode node = ((GObject)context.data).treeNode; - Debug.Log(node.text); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs.meta deleted file mode 100644 index 8ed092c..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a8846401629fd134dbc0abfb115b498b -timeCreated: 1466782335 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard.meta b/Assets/Plugins/FairyGUI/Examples/TurnCard.meta deleted file mode 100644 index 657ad61..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnCard.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: e7fb2d8438b95bb4594057499bfaf527 -folderAsset: yes -timeCreated: 1465459098 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs b/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs deleted file mode 100644 index 508a20b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs +++ /dev/null @@ -1,73 +0,0 @@ -using FairyGUI; - -public class Card : GButton -{ - GObject _back; - GObject _front; - - public override void ConstructFromXML(FairyGUI.Utils.XML xml) - { - base.ConstructFromXML(xml); - - _back = GetChild("n0"); - _front = GetChild("icon"); - _front.visible = false; - } - - public bool opened - { - get - { - return _front.visible; - } - - set - { - GTween.Kill(this); - - _front.visible = value; - _back.visible = !value; - } - } - - public void SetPerspective() - { - _front.displayObject.perspective = true; - _back.displayObject.perspective = true; - } - - public void Turn() - { - if (GTween.IsTweening(this)) - return; - - bool toOpen = !_front.visible; - GTween.To(0, 180, 0.8f).SetTarget(this).SetEase(EaseType.QuadOut).OnUpdate(TurnInTween).SetUserData(toOpen); - } - - void TurnInTween(GTweener tweener) - { - bool toOpen = (bool)tweener.userData; - float v = tweener.value.x; - if (toOpen) - { - _back.rotationY = v; - _front.rotationY = -180 + v; - if (v > 90) - { - _front.visible = true; - _back.visible = false; - } - } - else - { - _back.rotationY = -180 + v; - _front.rotationY = v; - if (v > 90) - { - _front.visible = false; - _back.visible = true; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs.meta deleted file mode 100644 index 6a2aa2e..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f508880d965b60742b34521caee31d63 -timeCreated: 1465454889 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs b/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs deleted file mode 100644 index 6cba921..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs +++ /dev/null @@ -1,45 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class TurnCardMain : MonoBehaviour -{ - GComponent _mainView; - Card _c0; - Card _c1; - - void Awake() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - UIPackage.AddPackage("UI/TurnCard"); - UIObjectFactory.SetPackageItemExtension("ui://TurnCard/CardComponent", typeof(Card)); - } - - void Start() - { - _mainView = this.GetComponent().ui; - - _c0 = (Card)_mainView.GetChild("c0"); - - _c1 = (Card)_mainView.GetChild("c1"); - _c1.SetPerspective(); - - _c0.onClick.Add(__clickCard); - _c1.onClick.Add(__clickCard); - } - - void __clickCard(EventContext context) - { - Card card = (Card)context.sender; - card.Turn(); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs.meta deleted file mode 100644 index 493cf51..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f30e9532e25d54e4789a3b737b33f79e -timeCreated: 1465453409 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage.meta deleted file mode 100644 index b9b72fc..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnPage.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b583937d058c54d4b86d41aca1848f04 -folderAsset: yes -timeCreated: 1547288041 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs b/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs deleted file mode 100644 index f975e84..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs +++ /dev/null @@ -1,46 +0,0 @@ -using UnityEngine; -using FairyGUI; - -class BookPage : GComponent -{ - Controller _style; - GoWrapper _modelWrapper; - GObject _pageNumber; - - public override void ConstructFromXML(FairyGUI.Utils.XML xml) - { - base.ConstructFromXML(xml); - - _style = GetController("style"); - - _pageNumber = GetChild("pn"); - - _modelWrapper = new GoWrapper(); - GetChild("model").asGraph.SetNativeObject(_modelWrapper); - } - - public void render(int pageIndex) - { - _pageNumber.text = (pageIndex + 1).ToString(); - - if (pageIndex == 0) - _style.selectedIndex = 0; //pic page - else if (pageIndex == 2) - { - if (_modelWrapper.wrapTarget == null) - { - Object prefab = Resources.Load("Role/npc3"); - GameObject go = (GameObject)Object.Instantiate(prefab); - go.transform.localPosition = new Vector3(0, 0, 1000); - go.transform.localScale = new Vector3(120, 120, 120); - go.transform.localEulerAngles = new Vector3(0, 100, 0); - - _modelWrapper.SetWrapTarget(go, true); - } - - _style.selectedIndex = 2; //show a model - } - else - _style.selectedIndex = 1; //empty page - } -} diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs.meta deleted file mode 100644 index da75661..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c00a31b8a6395734980ed760747cb0c4 -timeCreated: 1547975855 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs b/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs deleted file mode 100644 index 7bb6348..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs +++ /dev/null @@ -1,1225 +0,0 @@ -using System; -using FairyGUI; -using FairyGUI.Utils; -using UnityEngine; - -/// -/// Achieving the effect of turning over books. Use virtual mechanism to support unlimited pages. Support covers. -/// -public class FairyBook : GComponent -{ - /// - /// - /// - /// - /// - public delegate void PageRenderer(int index, GComponent page); - - /// - /// - /// - public PageRenderer pageRenderer; - - /// - /// - /// - public static float EffectDuration = 0.5f; - - /// - /// - /// - public enum Paper - { - Soft, - Hard - } - - public enum CoverType - { - Front, - Back - } - - enum CoverStatus - { - Hidden, - ShowingFront, - ShowingBack - } - - enum CoverTurningOp - { - None, - ShowFront, - HideFront, - ShowBack, - HideBack - } - - enum Corner - { - INVALID, - TL, - BL, - TR, - BR - } - - GComponent _pagesContainer; - string _pageResource; - int _pageWidth; - int _pageHeight; - - int _pageCount; - int _currentPage; - Paper _paper; - - int _turningTarget; - float _turningAmount; - CoverTurningOp _coverTurningOp; - GPath _turningPath; - - GComponent[] _objects; - GGraph _mask1; - GGraph _mask2; - GObject _softShadow; - int[] _objectIndice; - int[] _objectNewIndice; - - Corner _draggingCorner; - Vector2 _dragPoint; - float _touchDownTime; - - GComponent _frontCover; - GComponent _backCover; - Vector2 _frontCoverPos; - Vector2 _backCoverPos; - CoverStatus _coverStatus; - - EventListener _onTurnComplete; - - public override void ConstructFromXML(XML xml) - { - base.ConstructFromXML(xml); - - _pagesContainer = GetChild("pages").asCom; - if (_pagesContainer == null) - { - Debug.LogError("Not a valid book resource"); - return; - } - - GComponent obj1 = _pagesContainer.GetChild("left").asCom; - GComponent obj2 = _pagesContainer.GetChild("right").asCom; - if (obj1 == null || obj2 == null || obj1.resourceURL != obj2.resourceURL - || obj1.width != obj2.width || obj2.x != obj1.x + obj1.width) - { - Debug.LogError("Not a valid book resource"); - return; - } - - obj1.displayObject.home = this.displayObject.cachedTransform; - obj2.displayObject.home = this.displayObject.cachedTransform; - _pagesContainer.RemoveChild(obj1); - _pagesContainer.RemoveChild(obj2); - - _frontCover = GetChild("frontCover") as GComponent; - if (_frontCover != null) - _frontCoverPos = _frontCover.position; - _backCover = GetChild("backCover") as GComponent; - if (_backCover != null) - _backCoverPos = _backCover.position; - - _objects = new GComponent[4] { obj1, obj2, null, null }; - _objectIndice = new int[4] { -1, -1, -1, -1 }; - _objectNewIndice = new int[4]; - _turningTarget = -1; - _currentPage = -1; - - _pageWidth = (int)obj1.width; - _pageHeight = (int)obj1.height; - _pageResource = obj1.resourceURL; - - _mask1 = new GGraph(); - _mask1.displayObject.home = this.displayObject.cachedTransform; - _mask1.SetSize(_pageWidth, _pageHeight); - - _mask2 = new GGraph(); - _mask2.displayObject.home = this.displayObject.cachedTransform; - _mask2.SetSize(_pageWidth, _pageHeight); - - SetupHotspot(GetChild("hotspot_tl"), Corner.TL); - SetupHotspot(GetChild("hotspot_bl"), Corner.BL); - SetupHotspot(GetChild("hotspot_tr"), Corner.TR); - SetupHotspot(GetChild("hotspot_br"), Corner.BR); - } - - public override void Dispose() - { - for (int i = 0; i < 4; i++) - { - if (_objects[i] != null) - _objects[i].Dispose(); - - } - _mask1.Dispose(); - _mask2.Dispose(); - if (_softShadow != null) - _softShadow.Dispose(); - - base.Dispose(); - } - - /// - /// - /// - public EventListener onTurnComplete - { - get { return _onTurnComplete ?? (_onTurnComplete = new EventListener(this, "onTurnComplete")); } - } - - /// - /// - /// - /// - public void SetSoftShadowResource(string res) - { - _softShadow = UIPackage.CreateObjectFromURL(res); - _softShadow.height = Mathf.Sqrt(Mathf.Pow(_pageWidth, 2) + Mathf.Pow(_pageHeight, 2)) + 60; - _softShadow.displayObject.home = this.displayObject.cachedTransform; - _softShadow.sortingOrder = int.MaxValue; - } - - /// - /// - /// - public Paper pageSoftness - { - get { return _paper; } - set { _paper = value; } - } - - /// - /// - /// - public int pageCount - { - get { return _pageCount; } - set - { - if (_pageCount % 2 != 0) - throw new System.Exception("Page count must be even!"); - - _pageCount = value; - } - } - - /// - /// - /// - public int currentPage - { - get { return _currentPage; } - set - { - if (value < 0 || value > _pageCount - 1) - throw new Exception("Page index out of bounds: " + value); - - if (_currentPage != value) - { - GTween.Kill(this, true); - - _currentPage = value; - _coverStatus = CoverStatus.Hidden; - - RenderPages(); - } - } - } - - /// - /// - /// - /// - public void TurnTo(int pageIndex) - { - if (pageIndex < 0 || pageIndex > _pageCount - 1) - throw new Exception("Page index out of bounds: " + pageIndex); - - GTween.Kill(this, true); - - if (_coverStatus == CoverStatus.ShowingFront) - { - _coverTurningOp = CoverTurningOp.HideFront; - _draggingCorner = Corner.BR; - } - else if (_coverStatus == CoverStatus.ShowingBack) - { - _coverTurningOp = CoverTurningOp.HideBack; - _draggingCorner = Corner.BL; - } - - int tt1 = _currentPage; - if (_currentPage % 2 == 0) - tt1--; - int tt2 = pageIndex; - if (pageIndex % 2 == 0) - tt2--; - if (tt1 == tt2) - { - _currentPage = pageIndex; - _turningTarget = -1; - } - else - { - _turningTarget = pageIndex; - if (_turningTarget < _currentPage) - _draggingCorner = Corner.BL; - else - _draggingCorner = Corner.BR; - } - - if (_draggingCorner == Corner.INVALID) - return; - - StartTween(); - } - - /// - /// - /// - public void TurnNext() - { - GTween.Kill(this, true); - - if (isCoverShowing(CoverType.Front)) - TurnTo(0); - else if (_currentPage == _pageCount - 1) - ShowCover(CoverType.Back, true); - else if (_currentPage % 2 == 0) - TurnTo(_currentPage + 1); - else - TurnTo(_currentPage + 2); - } - - /// - /// - /// - public void TurnPrevious() - { - GTween.Kill(this, true); - - if (isCoverShowing(CoverType.Back)) - TurnTo(_pageCount - 1); - else if (_currentPage == 0) - ShowCover(CoverType.Front, true); - else if (_currentPage % 2 == 0) - TurnTo(_currentPage - 2); - else - TurnTo(_currentPage - 1); - } - - /// - /// - /// - /// - /// - public void ShowCover(CoverType cover, bool turnEffect) - { - GTween.Kill(this, true); - - if (_frontCover == null) - return; - - if (turnEffect) - { - if (cover == CoverType.Front) - { - if (_coverStatus == CoverStatus.ShowingFront) - return; - - _coverTurningOp = CoverTurningOp.ShowFront; - _draggingCorner = Corner.BL; - _currentPage = 0; - } - else - { - if (_coverStatus == CoverStatus.ShowingBack) - return; - - _coverTurningOp = CoverTurningOp.ShowBack; - _draggingCorner = Corner.BR; - _currentPage = _pageCount - 1; - } - - StartTween(); - } - else - { - if (cover == CoverType.Front) - { - _currentPage = 0; - _coverStatus = CoverStatus.ShowingFront; - } - else - { - _currentPage = _pageCount - 1; - _coverStatus = CoverStatus.ShowingBack; - } - RenderPages(); - } - } - - /// - /// - /// - /// - /// - public bool isCoverShowing(CoverType cover) - { - return cover == CoverType.Front ? (_coverStatus == CoverStatus.ShowingFront) : (_coverStatus == CoverStatus.ShowingBack); - } - - void StartTween() - { - _turningAmount = 0; - RenderPages(); - Vector2 source = GetCornerPosition(_draggingCorner, _coverTurningOp != CoverTurningOp.None); - Vector2 target; - if (_draggingCorner == Corner.TL || _draggingCorner == Corner.BL) - target = GetCornerPosition(_draggingCorner + 2, _coverTurningOp != CoverTurningOp.None); - else - target = GetCornerPosition(_draggingCorner - 2, _coverTurningOp != CoverTurningOp.None); - - if (_turningPath == null) - _turningPath = new GPath(); - Vector2 mid = new Vector2(source.x + (target.x - source.x) / 2, target.y - 50); - _turningPath.Create(new GPathPoint(source), new GPathPoint(mid), new GPathPoint(target)); - GTween.To(source, target, EffectDuration).SetUserData(true).SetTarget(this) - .SetPath(_turningPath) - .OnUpdate(OnTurnUpdate).OnComplete(OnTurnComplete); - } - - void OnTurnUpdate(GTweener tweener) - { - _dragPoint = tweener.value.vec2; - _turningAmount = _dragPoint.x / (_coverTurningOp != CoverTurningOp.None ? _frontCover.width * 2 : _pageWidth * 2); - if (_draggingCorner == Corner.TR || _draggingCorner == Corner.BR) - _turningAmount = 1 - _turningAmount; - PlayTurnEffect(); - } - - void OnTurnComplete(GTweener tweener) - { - bool suc = (bool)tweener.userData; - _draggingCorner = Corner.INVALID; - if (suc && _turningTarget != -1) - _currentPage = _turningTarget; - if (suc && _coverTurningOp != CoverTurningOp.None) - { - if (_coverTurningOp == CoverTurningOp.ShowFront) - _coverStatus = CoverStatus.ShowingFront; - else if (_coverTurningOp == CoverTurningOp.ShowBack) - _coverStatus = CoverStatus.ShowingBack; - else - _coverStatus = CoverStatus.Hidden; - } - _coverTurningOp = CoverTurningOp.None; - _turningTarget = -1; - - RenderPages(); - - DispatchEvent("onTurnComplete"); - } - - void PlayTurnEffect() - { - if (_coverTurningOp != CoverTurningOp.None) - PlayCoverEffect(); - - if (_turningTarget != -1) - { - if (_paper == Paper.Hard) - PlayHardEffect(); - else - PlaySoftEffect(); - } - } - - void PlayCoverEffect() - { - float amount = Mathf.Clamp01(_turningAmount); - float ratio; - bool isLeft; - GComponent turningObj = (_coverTurningOp == CoverTurningOp.ShowFront || _coverTurningOp == CoverTurningOp.HideFront) ? _frontCover : _backCover; - PolygonMesh mesh = GetHardMesh(turningObj); - - if (amount < 0.5f) - { - ratio = 1 - amount * 2; - isLeft = _coverTurningOp == CoverTurningOp.ShowFront || _coverTurningOp == CoverTurningOp.HideBack; - } - else - { - ratio = (amount - 0.5f) * 2; - isLeft = _coverTurningOp == CoverTurningOp.HideFront || _coverTurningOp == CoverTurningOp.ShowBack; - } - - if (turningObj == _frontCover) - SetCoverStatus(turningObj, CoverType.Front, !isLeft); - else - SetCoverStatus(turningObj, CoverType.Back, isLeft); - - mesh.points.Clear(); - mesh.texcoords.Clear(); - if (isLeft) - { - float topOffset = 1f / 8 * (1 - ratio); - float xOffset = 1 - ratio; - mesh.Add(new Vector2(xOffset, 1 + topOffset)); - mesh.Add(new Vector2(xOffset, -topOffset)); - mesh.Add(new Vector2(1, 0)); - mesh.Add(new Vector2(1, 1)); - } - else - { - float topOffset = 1f / 8 * (1 - ratio); - mesh.Add(new Vector2(0, 1)); - mesh.Add(new Vector2(0, 0)); - mesh.Add(new Vector2(ratio, -topOffset)); - mesh.Add(new Vector2(ratio, 1 + topOffset)); - } - - mesh.texcoords.AddRange(VertexBuffer.NormalizedUV); - } - - void PlayHardEffect() - { - float amount = Mathf.Clamp01(_turningAmount); - float ratio; - bool isLeft; - GComponent turningObj; - PolygonMesh mesh; - if (amount < 0.5f) - { - ratio = 1 - amount * 2; - isLeft = _turningTarget < _currentPage; - - turningObj = _objects[2]; - mesh = GetHardMesh(turningObj); - GetHardMesh(_objects[3]).points.Clear(); - } - else - { - ratio = (amount - 0.5f) * 2; - isLeft = _turningTarget > _currentPage; - - turningObj = _objects[3]; - mesh = GetHardMesh(turningObj); - GetHardMesh(_objects[2]).points.Clear(); - } - - mesh.points.Clear(); - mesh.texcoords.Clear(); - if (isLeft) - { - turningObj.x = 0; - - float topOffset = 1f / 8 * (1 - ratio); - float xOffset = 1 - ratio; - mesh.Add(new Vector2(xOffset, 1 + topOffset)); - mesh.Add(new Vector2(xOffset, -topOffset)); - mesh.Add(new Vector2(1, 0)); - mesh.Add(new Vector2(1, 1)); - } - else - { - turningObj.x = _pageWidth; - - float topOffset = 1f / 8 * (1 - ratio); - mesh.Add(new Vector2(0, 1)); - mesh.Add(new Vector2(0, 0)); - mesh.Add(new Vector2(ratio, -topOffset)); - mesh.Add(new Vector2(ratio, 1 + topOffset)); - } - - mesh.texcoords.AddRange(VertexBuffer.NormalizedUV); - } - - void FlipPoint(ref Vector2 pt, float w, float h) - { - switch (_draggingCorner) - { - case Corner.TL: - pt.x = w - pt.x; - pt.y = h - pt.y; - break; - case Corner.BL: - pt.x = w - pt.x; - break; - case Corner.TR: - pt.y = h - pt.y; - break; - } - } - - void PlaySoftEffect() - { - GComponent turningObj1 = _objects[2]; - GComponent turningObj2 = _objects[3]; - PolygonMesh mesh1 = GetSoftMesh(turningObj1); - PolygonMesh mesh2 = GetSoftMesh(turningObj2); - - /** - * a - * / \ - * f(0,0)------/ b--g(w,0) - * | / / | - * | / / | - * | c / | - * | \ / | - * | \ / | - * e(0,h)-----d--------h(w,h) - */ - Vector2 pa, pb, pc, pd, pe, pf, pg, ph; - float k, angle; - bool threePoints = false; - - pc = _dragPoint; - pe = new Vector2(0, _pageHeight); - pf = Vector2.zero; - pg = new Vector2(_pageWidth, 0); - ph = new Vector2(_pageWidth, _pageHeight); - - FlipPoint(ref pc, _pageWidth * 2, _pageHeight); - pc.x -= _pageWidth; - if (pc.x >= _pageWidth) - return; - - k = (ph.y - pc.y) / (ph.x - pc.x); - float k2 = 1 + Mathf.Pow(k, 2); - float min; - min = ph.x - _pageWidth * 2 / k2; - if (pc.x < min) - { - pc.x = min; - if (pc.x >= _pageWidth) - return; - pc.y = ph.y - k * (ph.x - pc.x); - } - - min = ph.x - (_pageWidth + _pageHeight * k) * 2 / k2; - if (pc.x < min) - { - pc.x = min; - if (pc.x >= _pageWidth) - return; - pc.y = ph.y - k * (ph.x - pc.x); - } - - angle = Mathf.Atan(k) * Mathf.Rad2Deg; - pd = new Vector2(_pageWidth - k2 * (ph.x - pc.x) / 2, _pageHeight); - pb = new Vector2(pd.x + _pageHeight * k, 0); - pa = new Vector2(); - - if (pb.x > _pageWidth) - { - pb.x = _pageWidth; - pa = new Vector2(_pageWidth, _pageHeight - (_pageWidth - pd.x) / k); - threePoints = true; - } - - FlipPoint(ref pa, _pageWidth, _pageHeight); - FlipPoint(ref pb, _pageWidth, _pageHeight); - FlipPoint(ref pd, _pageWidth, _pageHeight); - FlipPoint(ref pc, _pageWidth, _pageHeight); - if (_draggingCorner == Corner.BL || _draggingCorner == Corner.TL) - angle = -angle; - - switch (_draggingCorner) - { - case Corner.BR: - { - turningObj1.SetPivot(0, 0, true); - turningObj1.position = new Vector2(_pageWidth, 0); - - turningObj2.SetPivot(0, 1, true); - turningObj2.position = new Vector2(_pageWidth + pc.x, pc.y); - turningObj2.rotation = 2 * angle; - - if (_softShadow != null) - { - _softShadow.SetPivot(1, (_softShadow.height - 30) / _softShadow.height, true); - _softShadow.position = new Vector2(Vector2.Distance(pc, pd), _pageHeight); - _softShadow.rotation = -angle; - if (_softShadow.x > _pageWidth - 20) - _softShadow.alpha = (_pageWidth - _softShadow.x) / 20; - else - _softShadow.alpha = 1; - } - - mesh1.points.Clear(); - mesh1.Add(pe); - mesh1.Add(pf); - mesh1.Add(pb); - if (threePoints) - mesh1.Add(pa); - mesh1.Add(pd); - - mesh2.points.Clear(); - mesh2.Add(new Vector2(Vector2.Distance(pc, pd), _pageHeight)); - mesh2.Add(new Vector2(0, _pageHeight)); - if (threePoints) - mesh2.Add(new Vector2(0, _pageHeight - Vector2.Distance(pc, pa))); - else - { - mesh2.Add(new Vector2(0, 0)); - mesh2.Add(new Vector2(Vector2.Distance(pg, pb), 0)); - } - break; - } - case Corner.TR: - { - turningObj1.SetPivot(0, 0, true); - turningObj1.position = new Vector2(_pageWidth, 0); - - turningObj2.SetPivot(0, 0, true); - turningObj2.position = new Vector2(_pageWidth + pc.x, pc.y); - turningObj2.rotation = -2 * angle; - - if (_softShadow != null) - { - _softShadow.SetPivot(1, 30 / _softShadow.height, true); - _softShadow.position = new Vector2(Vector2.Distance(pc, pd), 0); - _softShadow.rotation = angle; - if (_softShadow.x > _pageWidth - 20) - _softShadow.alpha = (_pageWidth - _softShadow.x) / 20; - else - _softShadow.alpha = 1; - } - - mesh1.points.Clear(); - mesh1.Add(pe); - mesh1.Add(pf); - mesh1.Add(pd); - if (threePoints) - mesh1.Add(pa); - mesh1.Add(pb); - - mesh2.points.Clear(); - if (threePoints) - mesh2.Add(new Vector2(0, Vector2.Distance(pc, pa))); - else - { - mesh2.Add(new Vector2(Vector2.Distance(pb, ph), _pageHeight)); - mesh2.Add(new Vector2(0, _pageHeight)); - } - mesh2.Add(new Vector2(0, 0)); - mesh2.Add(new Vector2(Vector2.Distance(pc, pd), 0)); - break; - } - case Corner.BL: - { - turningObj1.SetPivot(0, 0, true); - turningObj1.position = Vector2.zero; - - turningObj2.SetPivot(1, 1, true); - turningObj2.position = pc; - turningObj2.rotation = 2 * angle; - - if (_softShadow != null) - { - _softShadow.SetPivot(1, 30 / _softShadow.height, true); - _softShadow.position = new Vector2(_pageWidth - Vector2.Distance(pc, pd), _pageHeight); - _softShadow.rotation = 180 - angle; - if (_softShadow.x < 20) - _softShadow.alpha = (_softShadow.x - 20) / 20; - else - _softShadow.alpha = 1; - } - - mesh1.points.Clear(); - mesh1.Add(pb); - mesh1.Add(pg); - mesh1.Add(ph); - mesh1.Add(pd); - if (threePoints) - mesh1.Add(pa); - - mesh2.points.Clear(); - if (!threePoints) - { - mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pf, pb), 0)); - mesh2.Add(new Vector2(_pageWidth, 0)); - } - else - mesh2.Add(new Vector2(_pageWidth, _pageHeight - Vector2.Distance(pc, pa))); - mesh2.Add(new Vector2(_pageWidth, _pageHeight)); - mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pc, pd), _pageHeight)); - break; - } - case Corner.TL: - { - turningObj1.SetPivot(0, 0, true); - turningObj1.position = Vector2.zero; - - turningObj2.SetPivot(1, 0, true); - turningObj2.position = pc; - turningObj2.rotation = -2 * angle; - - if (_softShadow != null) - { - _softShadow.SetPivot(1, (_softShadow.height - 30) / _softShadow.height, true); - _softShadow.position = new Vector2(_pageWidth - Vector2.Distance(pc, pd), 0); - _softShadow.rotation = 180 + angle; - if (_softShadow.x < 20) - _softShadow.alpha = (_softShadow.x - 20) / 20; - else - _softShadow.alpha = 1; - } - - mesh1.points.Clear(); - mesh1.Add(pd); - mesh1.Add(pg); - mesh1.Add(ph); - mesh1.Add(pb); - if (threePoints) - mesh1.Add(pa); - - mesh2.points.Clear(); - mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pc, pd), 0)); - mesh2.Add(new Vector2(_pageWidth, 0)); - if (threePoints) - mesh2.Add(new Vector2(_pageWidth, Vector2.Distance(pc, pa))); - else - { - mesh2.Add(new Vector2(_pageWidth, _pageHeight)); - mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pe, pb), _pageHeight)); - } - break; - } - } - } - - void RenderPages() - { - RenderCovers(); - - if (_softShadow != null) - _softShadow.RemoveFromParent(); - - int curPage = _currentPage; - if (curPage % 2 == 0) - curPage--; - - int leftPage, rightPage, turningPageBack, turningPageFront; - leftPage = curPage; - rightPage = leftPage < _pageCount - 1 ? (leftPage + 1) : -1; - - if (_turningTarget != -1) - { - int tt = _turningTarget; - if (tt % 2 == 0) - tt = tt - 1; - - if (tt == curPage) - { - _currentPage = _turningTarget; - turningPageBack = turningPageFront = -1; - } - else if (tt > leftPage) - { - turningPageFront = tt; - turningPageBack = rightPage; - rightPage = tt < _pageCount - 1 ? (tt + 1) : -1; - } - else - { - turningPageFront = tt > 0 ? (tt + 1) : 0; - turningPageBack = leftPage; - leftPage = tt > 0 ? tt : -1; - } - } - else - { - turningPageBack = turningPageFront = -1; - } - - _objectNewIndice[0] = leftPage; - _objectNewIndice[1] = rightPage; - _objectNewIndice[2] = turningPageBack; - _objectNewIndice[3] = turningPageFront; - - for (int i = 0; i < 4; i++) - { - int pageIndex = _objectNewIndice[i]; - if (pageIndex != -1) - { - for (int j = 0; j < 4; j++) - { - int pageIndex2 = _objectIndice[j]; - if (pageIndex2 == pageIndex) - { - if (j != i) - { - _objectIndice[j] = _objectIndice[i]; - _objectIndice[i] = pageIndex; - - GComponent tmp = _objects[j]; - _objects[j] = _objects[i]; - _objects[i] = tmp; - } - break; - } - } - } - } - - for (int i = 0; i < 4; i++) - { - GComponent obj = _objects[i]; - int oldIndex = _objectIndice[i]; - int index = _objectNewIndice[i]; - _objectIndice[i] = index; - if (index == -1) - { - if (obj != null) - obj.RemoveFromParent(); - } - else if (oldIndex != index) - { - if (obj == null) - { - obj = UIPackage.CreateObjectFromURL(_pageResource).asCom; - obj.displayObject.home = this.displayObject.cachedTransform; - _objects[i] = obj; - } - - _pagesContainer.AddChild(obj); - pageRenderer(index, obj); - } - else - { - if (obj.parent == null) - { - _pagesContainer.AddChild(obj); - pageRenderer(index, obj); - } - else - _pagesContainer.AddChild(obj); - } - - if (obj != null && obj.parent != null) - { - Controller c1 = obj.GetController("side"); - if (c1 != null) - { - if (index == 0) - c1.selectedPage = "first"; - else if (index == _pageCount - 1) - c1.selectedPage = "last"; - else - c1.selectedPage = (index % 2 == 0) ? "right" : "left"; - } - - if (i == 0 || i == 1) - SetPageNormal(obj, i == 0); - else if (_paper == Paper.Soft) - SetPageSoft(obj, i == 2); - else - SetPageHard(obj, i == 2); - } - } - } - - void RenderCovers() - { - if (_frontCover != null) - { - if (_coverTurningOp == CoverTurningOp.ShowFront || _coverTurningOp == CoverTurningOp.HideFront) - { - SetPageHard(_frontCover, true); - SetCoverStatus(_frontCover, CoverType.Front, _coverTurningOp == CoverTurningOp.HideFront); - } - else - { - if (_frontCover.displayObject.cacheAsBitmap) - SetCoverNormal(_frontCover, CoverType.Front); - - SetCoverStatus(_frontCover, CoverType.Front, _coverStatus == CoverStatus.ShowingFront); - } - } - - if (_backCover != null) - { - if (_coverTurningOp == CoverTurningOp.ShowBack || _coverTurningOp == CoverTurningOp.HideBack) - { - SetPageHard(_backCover, true); - SetCoverStatus(_backCover, CoverType.Back, _coverTurningOp == CoverTurningOp.HideBack); - } - else - { - if (_backCover.displayObject.cacheAsBitmap) - SetCoverNormal(_backCover, CoverType.Back); - - SetCoverStatus(_backCover, CoverType.Back, _coverStatus == CoverStatus.ShowingBack); - } - } - } - - void SetupHotspot(GObject obj, Corner corner) - { - if (obj == null) - return; - - obj.data = corner; - - obj.onTouchBegin.Add(__touchBegin); - obj.onTouchMove.Add(__touchMove); - obj.onTouchEnd.Add(__touchEnd); - } - - void SetPageHard(GComponent obj, bool front) - { - obj.touchable = false; - obj.displayObject.cacheAsBitmap = true; - if (obj.mask != null) - { - obj.mask.RemoveFromParent(); - obj.mask = null; - } - - PolygonMesh mesh = obj.displayObject.paintingGraphics.GetMeshFactory(); - mesh.usePercentPositions = true; - mesh.points.Clear(); - mesh.texcoords.Clear(); - obj.displayObject.paintingGraphics.SetMeshDirty(); - - if (front) - { - mesh.points.AddRange(VertexBuffer.NormalizedPosition); - mesh.texcoords.AddRange(VertexBuffer.NormalizedUV); - } - } - - void SetPageSoft(GComponent obj, bool front) - { - obj.touchable = false; - obj.displayObject.cacheAsBitmap = false; - DisplayObject mask = front ? _mask1.displayObject : _mask2.displayObject; - obj.mask = mask; - - PolygonMesh mesh = mask.graphics.GetMeshFactory(); - mesh.usePercentPositions = false; - mesh.points.Clear(); - mesh.texcoords.Clear(); - mask.graphics.SetMeshDirty(); - - if (front) - { - mesh.Add(new Vector2(0, _pageHeight)); - mesh.Add(Vector2.zero); - mesh.Add(new Vector2(_pageWidth, 0)); - mesh.Add(new Vector2(_pageWidth, _pageHeight)); - } - else if (_softShadow != null) - obj.AddChild(_softShadow); - } - - void SetPageNormal(GComponent obj, bool left) - { - obj.displayObject.cacheAsBitmap = false; - obj.touchable = true; - obj.SetPivot(0, 0, true); - if (left) - obj.SetXY(0, 0); - else - obj.SetXY(_pageWidth, 0); - obj.rotation = 0; - if (obj.mask != null) - { - obj.mask.RemoveFromParent(); - obj.mask = null; - } - } - - void SetCoverStatus(GComponent obj, CoverType coverType, bool show) - { - Controller c = obj.GetController("side"); - if (show) - { - if (c.selectedIndex != 0) - { - obj.position = coverType == CoverType.Front ? _backCoverPos : _frontCoverPos; - obj.parent.SetChildIndexBefore(obj, obj.parent.GetChildIndex(_pagesContainer) + 1); - c.selectedIndex = 0; //front - - if (obj.displayObject.cacheAsBitmap) - obj.displayObject.cacheAsBitmap = true; //refresh - } - } - else - { - if (c.selectedIndex != 1) - { - obj.position = coverType == CoverType.Front ? _frontCoverPos : _backCoverPos; - obj.parent.SetChildIndexBefore(obj, obj.parent.GetChildIndex(_pagesContainer)); - c.selectedIndex = 1; //back - - if (obj.displayObject.cacheAsBitmap) - obj.displayObject.cacheAsBitmap = true; //refresh - } - } - } - - void SetCoverNormal(GComponent obj, CoverType coverType) - { - obj.position = coverType == CoverType.Front ? _frontCoverPos : _backCoverPos; - obj.displayObject.cacheAsBitmap = false; - obj.touchable = true; - obj.parent.SetChildIndexBefore(obj, obj.parent.GetChildIndex(_pagesContainer)); - obj.GetController("side").selectedIndex = 1; //back - } - - PolygonMesh GetHardMesh(GComponent obj) - { - obj.displayObject.paintingGraphics.SetMeshDirty(); - return obj.displayObject.paintingGraphics.GetMeshFactory(); - } - - PolygonMesh GetSoftMesh(GComponent obj) - { - obj.mask.graphics.SetMeshDirty(); - return obj.mask.graphics.GetMeshFactory(); - } - - void UpdateDragPosition(Vector2 pos) - { - if (_coverTurningOp != CoverTurningOp.None) - { - _dragPoint = GlobalToLocal(pos) - _frontCoverPos; - _turningAmount = _dragPoint.x / (2 * _frontCover.width); - } - else - { - _dragPoint = _pagesContainer.GlobalToLocal(pos); - _turningAmount = _dragPoint.x / (2 * _pageWidth); - } - - if (_draggingCorner == Corner.TR || _draggingCorner == Corner.BR) - _turningAmount = 1 - _turningAmount; - } - - Vector2 GetCornerPosition(Corner corner, bool isCover) - { - float w = isCover ? _frontCover.width : _pageWidth; - float h = isCover ? _frontCover.height : _pageHeight; - Vector2 pt; - switch (corner) - { - case Corner.BL: - pt = new Vector2(0, h); - break; - - case Corner.TR: - pt = new Vector2(w * 2, 0); - break; - - case Corner.BR: - pt = new Vector2(w * 2, h); - break; - - default: - pt = Vector2.zero; - break; - } - - return pt; - } - - void __touchBegin(EventContext context) - { - GTween.Kill(this, true); - - _draggingCorner = (Corner)((GObject)context.sender).data; - if (_draggingCorner == Corner.TL || _draggingCorner == Corner.BL) - { - if (_coverStatus == CoverStatus.ShowingBack) - { - _coverTurningOp = CoverTurningOp.HideBack; - } - else if (_objectNewIndice[0] == -1) - { - if (_frontCover != null && _coverStatus != CoverStatus.ShowingFront) - _coverTurningOp = CoverTurningOp.ShowFront; - else - _draggingCorner = Corner.INVALID; - } - else - { - _turningTarget = _objectNewIndice[0] - 2; - if (_turningTarget < 0) - _turningTarget = 0; - } - } - else - { - if (_coverStatus == CoverStatus.ShowingFront) - { - _coverTurningOp = CoverTurningOp.HideFront; - } - else if (_objectNewIndice[1] == -1) - { - if (_backCover != null && _coverStatus != CoverStatus.ShowingBack) - _coverTurningOp = CoverTurningOp.ShowBack; - else - _draggingCorner = Corner.INVALID; - } - else - { - _turningTarget = _objectNewIndice[1] + 1; - } - } - - if (_draggingCorner != Corner.INVALID) - { - _touchDownTime = Time.unscaledTime; - UpdateDragPosition(context.inputEvent.position); - RenderPages(); - PlayTurnEffect(); - - context.CaptureTouch(); - } - } - - void __touchMove(EventContext context) - { - if (_draggingCorner != Corner.INVALID) - { - UpdateDragPosition(context.inputEvent.position); - PlayTurnEffect(); - } - } - - void __touchEnd(EventContext context) - { - if (_draggingCorner != Corner.INVALID) - { - bool suc = _turningAmount > 0.4f || (Time.unscaledTime - _touchDownTime < 0.35f); - Vector2 target; - if (suc) - { - if (_draggingCorner == Corner.TL || _draggingCorner == Corner.BL) - target = GetCornerPosition(_draggingCorner + 2, _coverTurningOp != CoverTurningOp.None); - else - target = GetCornerPosition(_draggingCorner - 2, _coverTurningOp != CoverTurningOp.None); - } - else - target = GetCornerPosition(_draggingCorner, _coverTurningOp != CoverTurningOp.None); - - float duration = Mathf.Max(EffectDuration * 0.5f, Mathf.Abs(target.x - _dragPoint.x) / (_pageWidth * 2) * EffectDuration); - GTween.To(_dragPoint, target, duration).SetTarget(this).SetUserData(suc) - .OnUpdate(OnTurnUpdate).OnComplete(OnTurnComplete); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs.meta deleted file mode 100644 index 9793987..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 01eed0ee3e180444b830df9b94ea82b9 -timeCreated: 1547288041 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs b/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs deleted file mode 100644 index cb67767..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs +++ /dev/null @@ -1,78 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class TurnPageMain : MonoBehaviour -{ - GComponent _mainView; - FairyBook _book; - GSlider _slider; - - void Awake() - { - UIPackage.AddPackage("UI/TurnPage"); - UIObjectFactory.SetPackageItemExtension("ui://TurnPage/Book", typeof(FairyBook)); - UIObjectFactory.SetPackageItemExtension("ui://TurnPage/Page", typeof(BookPage)); - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - - _book = (FairyBook)_mainView.GetChild("book"); - _book.SetSoftShadowResource("ui://TurnPage/shadow_soft"); - _book.pageRenderer = RenderPage; - _book.pageCount = 20; - _book.currentPage = 0; - _book.ShowCover(FairyBook.CoverType.Front, false); - _book.onTurnComplete.Add(OnTurnComplete); - - GearBase.disableAllTweenEffect = true; - _mainView.GetController("bookPos").selectedIndex = 1; - GearBase.disableAllTweenEffect = false; - - _mainView.GetChild("btnNext").onClick.Add(() => - { - _book.TurnNext(); - }); - _mainView.GetChild("btnPrev").onClick.Add(() => - { - _book.TurnPrevious(); - }); - - _slider = _mainView.GetChild("pageSlide").asSlider; - _slider.max = _book.pageCount - 1; - _slider.value = 0; - _slider.onGripTouchEnd.Add(() => - { - _book.TurnTo((int)_slider.value); - }); - } - - void OnTurnComplete() - { - _slider.value = _book.currentPage; - - if (_book.isCoverShowing(FairyBook.CoverType.Front)) - _mainView.GetController("bookPos").selectedIndex = 1; - else if (_book.isCoverShowing(FairyBook.CoverType.Back)) - _mainView.GetController("bookPos").selectedIndex = 2; - else - _mainView.GetController("bookPos").selectedIndex = 0; - } - - void RenderPage(int index, GComponent page) - { - ((BookPage)page).render(index); - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs.meta deleted file mode 100644 index 0931fba..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0246af0692f804e419764f96010083e0 -timeCreated: 1547288041 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TypingEffect.meta b/Assets/Plugins/FairyGUI/Examples/TypingEffect.meta deleted file mode 100644 index 70e6f02..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TypingEffect.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1d6f3a0c3e5008542a8aa0103513abdf -folderAsset: yes -timeCreated: 1477729673 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs b/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs deleted file mode 100644 index 5bdd34b..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class TypingEffectMain : MonoBehaviour -{ - GComponent _mainView; - TypingEffect _te1; - TypingEffect _te2; - - void Awake() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - } - - void Start() - { - _mainView = this.GetComponent().ui; - - _te1 = new TypingEffect(_mainView.GetChild("n2").asTextField); - _te1.Start(); - Timers.inst.StartCoroutine(_te1.Print(0.050f)); - - _te2 = new TypingEffect(_mainView.GetChild("n3").asTextField); - _te2.Start(); - Timers.inst.Add(0.050f, 0, PrintText); - } - - void PrintText(object param) - { - if (!_te2.Print()) - { - Timers.inst.Remove(PrintText); - } - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs.meta deleted file mode 100644 index 79f0a9f..0000000 --- a/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2686886b98b45764893ae635e5b76d89 -timeCreated: 1477472029 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/VirtualList.meta b/Assets/Plugins/FairyGUI/Examples/VirtualList.meta deleted file mode 100644 index 4e9e442..0000000 --- a/Assets/Plugins/FairyGUI/Examples/VirtualList.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: e3bca127ef0001a49a2edebb9f806b87 -folderAsset: yes -timeCreated: 1456387596 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs b/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs deleted file mode 100644 index 17ab325..0000000 --- a/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs +++ /dev/null @@ -1,48 +0,0 @@ -using UnityEngine; -using FairyGUI; - -public class VirtualListMain : MonoBehaviour -{ - GComponent _mainView; - GList _list; - - void Awake() - { - UIPackage.AddPackage("UI/VirtualList"); - UIObjectFactory.SetPackageItemExtension("ui://VirtualList/mailItem", typeof(MailItem)); - } - - void Start() - { - Application.targetFrameRate = 60; - Stage.inst.onKeyDown.Add(OnKeyDown); - - _mainView = this.GetComponent().ui; - _mainView.GetChild("n6").onClick.Add(() => { _list.AddSelection(500, true); }); - _mainView.GetChild("n7").onClick.Add(() => { _list.scrollPane.ScrollTop(); }); - _mainView.GetChild("n8").onClick.Add(() => { _list.scrollPane.ScrollBottom(); }); - - _list = _mainView.GetChild("mailList").asList; - _list.SetVirtual(); - - _list.itemRenderer = RenderListItem; - _list.numItems = 1000; - } - - void RenderListItem(int index, GObject obj) - { - MailItem item = (MailItem)obj; - item.setFetched(index % 3 == 0); - item.setRead(index % 2 == 0); - item.setTime("5 Nov 2015 16:24:33"); - item.title = index + " Mail title here"; - } - - void OnKeyDown(EventContext context) - { - if (context.inputEvent.keyCode == KeyCode.Escape) - { - Application.Quit(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs.meta deleted file mode 100644 index 3f76352..0000000 --- a/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: cfc2db50aaedb7843a486cc282c0ec02 -timeCreated: 1456387599 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources.meta b/Assets/Plugins/FairyGUI/Resources.meta deleted file mode 100644 index 6e4dc8c..0000000 --- a/Assets/Plugins/FairyGUI/Resources.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 66d9312cafc49bf4cad1ccdbb5b6668b -folderAsset: yes -timeCreated: 1446459912 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders.meta b/Assets/Plugins/FairyGUI/Resources/Shaders.meta deleted file mode 100644 index f308cfd..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: cc39210f7f4d03f4aa637689b9d90d75 -folderAsset: yes -timeCreated: 1446459912 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn.meta deleted file mode 100644 index dddf6b3..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b5137d7a41873f9499f95f860a6cef17 -folderAsset: yes -timeCreated: 1465913233 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader deleted file mode 100644 index 06a45a0..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader +++ /dev/null @@ -1,58 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "FairyGUI/BlurFilter" { - Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always - ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata_t { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD0; - }; - - struct v2f { - float4 vertex : SV_POSITION; - half2 texcoord : TEXCOORD0; - half2 taps[4] : TEXCOORD1; - }; - - sampler2D _MainTex; - half4 _MainTex_TexelSize; - half4 _BlurOffsets; - - v2f vert (appdata_t v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.texcoord = v.texcoord - _BlurOffsets.xy * _MainTex_TexelSize.xy; - o.taps[0] = o.texcoord + _MainTex_TexelSize * _BlurOffsets.xy; - o.taps[1] = o.texcoord - _MainTex_TexelSize * _BlurOffsets.xy; - o.taps[2] = o.texcoord + _MainTex_TexelSize * _BlurOffsets.xy * half2(1,-1); - o.taps[3] = o.texcoord - _MainTex_TexelSize * _BlurOffsets.xy * half2(1,-1); - return o; - } - - fixed4 frag (v2f i) : SV_Target - { - half4 color = tex2D(_MainTex, i.taps[0]); - color += tex2D(_MainTex, i.taps[1]); - color += tex2D(_MainTex, i.taps[2]); - color += tex2D(_MainTex, i.taps[3]); - return color * 0.25; - } - ENDCG - } -} -Fallback off -} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader.meta deleted file mode 100644 index 81312dc..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f83d3bb1d90aaf54d8aed0783317662f -timeCreated: 1465913243 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader deleted file mode 100644 index 694ccd5..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader +++ /dev/null @@ -1,148 +0,0 @@ -// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "FairyGUI/BMFont" -{ - Properties - { - _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {} - - _StencilComp ("Stencil Comparison", Float) = 8 - _Stencil ("Stencil ID", Float) = 0 - _StencilOp ("Stencil Operation", Float) = 0 - _StencilWriteMask ("Stencil Write Mask", Float) = 255 - _StencilReadMask ("Stencil Read Mask", Float) = 255 - - _ColorMask ("Color Mask", Float) = 15 - - _BlendSrcFactor ("Blend SrcFactor", Float) = 5 - _BlendDstFactor ("Blend DstFactor", Float) = 10 - } - - SubShader - { - LOD 100 - - Tags - { - "Queue" = "Transparent" - "IgnoreProjector" = "True" - "RenderType" = "Transparent" - } - - Stencil - { - Ref [_Stencil] - Comp [_StencilComp] - Pass [_StencilOp] - ReadMask [_StencilReadMask] - WriteMask [_StencilWriteMask] - } - - Cull Off - Lighting Off - ZWrite Off - Fog { Mode Off } - Blend [_BlendSrcFactor] [_BlendDstFactor] - ColorMask [_ColorMask] - - Pass - { - CGPROGRAM - #pragma multi_compile _ GRAYED - #pragma multi_compile _ CLIPPED SOFT_CLIPPED - #pragma vertex vert - #pragma fragment frag - #pragma exclude_renderers d3d9 opengl flash - - #include "UnityCG.cginc" - - struct appdata_t - { - float4 vertex : POSITION; - fixed4 color : COLOR; - float4 texcoord : TEXCOORD0; - }; - - struct v2f - { - float4 vertex : SV_POSITION; - fixed4 color : COLOR; - float4 texcoord : TEXCOORD0; - - #ifdef CLIPPED - float2 clipPos : TEXCOORD1; - #endif - - #ifdef SOFT_CLIPPED - float2 clipPos : TEXCOORD1; - #endif - }; - - sampler2D _MainTex; - - CBUFFER_START(UnityPerMaterial) - #ifdef CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - #endif - - #ifdef SOFT_CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - float4 _ClipSoftness = float4(0, 0, 0, 0); - #endif - CBUFFER_END - - v2f vert (appdata_t v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.texcoord = v.texcoord; - #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) - o.color.rgb = GammaToLinearSpace(v.color.rgb); - o.color.a = v.color.a; - #else - o.color = v.color; - #endif - - #ifdef CLIPPED - o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - #ifdef SOFT_CLIPPED - o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - return o; - } - - fixed4 frag (v2f i) : SV_Target - { - fixed4 col = i.color; - fixed4 tcol = tex2D(_MainTex, i.texcoord); - col.a *= tcol[i.texcoord.z];//z stores channel - - #ifdef GRAYED - fixed grey = dot(col.rgb, fixed3(0.299, 0.587, 0.114)); - col.rgb = fixed3(grey, grey, grey); - #endif - - #ifdef SOFT_CLIPPED - float2 factor; - float2 condition = step(i.clipPos.xy, 0); - float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); - factor.xy = (1.0 - abs(i.clipPos.xy)) * (clip_softness.xw + clip_softness.zy); - col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); - #endif - #ifdef CLIPPED - float2 factor = abs(i.clipPos); - col.a *= step(max(factor.x, factor.y), 1); - #endif - - return col; - } - ENDCG - } - } - - //Fallback "FairyGUI/Text" -} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader.meta deleted file mode 100644 index 7039489..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: cd79153f88fa7334ea6c5564c053bdca -timeCreated: 1459224288 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader deleted file mode 100644 index f00edb8..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader +++ /dev/null @@ -1,177 +0,0 @@ -// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "FairyGUI/Image" -{ - Properties - { - _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {} - - _StencilComp ("Stencil Comparison", Float) = 8 - _Stencil ("Stencil ID", Float) = 0 - _StencilOp ("Stencil Operation", Float) = 0 - _StencilWriteMask ("Stencil Write Mask", Float) = 255 - _StencilReadMask ("Stencil Read Mask", Float) = 255 - - _ColorMask ("Color Mask", Float) = 15 - - _BlendSrcFactor ("Blend SrcFactor", Float) = 5 - _BlendDstFactor ("Blend DstFactor", Float) = 10 - } - - SubShader - { - LOD 100 - - Tags - { - "Queue" = "Transparent" - "IgnoreProjector" = "True" - "RenderType" = "Transparent" - } - - Stencil - { - Ref [_Stencil] - Comp [_StencilComp] - Pass [_StencilOp] - ReadMask [_StencilReadMask] - WriteMask [_StencilWriteMask] - } - - Cull Off - Lighting Off - ZWrite Off - Fog { Mode Off } - Blend [_BlendSrcFactor] [_BlendDstFactor], One One - ColorMask [_ColorMask] - - Pass - { - CGPROGRAM - #pragma multi_compile _ COMBINED - #pragma multi_compile _ GRAYED COLOR_FILTER - #pragma multi_compile _ CLIPPED SOFT_CLIPPED ALPHA_MASK - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata_t - { - float4 vertex : POSITION; - fixed4 color : COLOR; - float4 texcoord : TEXCOORD0; - }; - - struct v2f - { - float4 vertex : SV_POSITION; - fixed4 color : COLOR; - float4 texcoord : TEXCOORD0; - - #ifdef CLIPPED - float2 clipPos : TEXCOORD1; - #endif - - #ifdef SOFT_CLIPPED - float2 clipPos : TEXCOORD1; - #endif - }; - - sampler2D _MainTex; - - #ifdef COMBINED - sampler2D _AlphaTex; - #endif - - CBUFFER_START(UnityPerMaterial) - #ifdef CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - #endif - - #ifdef SOFT_CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - float4 _ClipSoftness = float4(0, 0, 0, 0); - #endif - CBUFFER_END - - #ifdef COLOR_FILTER - float4x4 _ColorMatrix; - float4 _ColorOffset; - float _ColorOption = 0; - #endif - - v2f vert (appdata_t v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.texcoord = v.texcoord; - #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) - o.color.rgb = GammaToLinearSpace(v.color.rgb); - o.color.a = v.color.a; - #else - o.color = v.color; - #endif - - #ifdef CLIPPED - o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - #ifdef SOFT_CLIPPED - o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - return o; - } - - fixed4 frag (v2f i) : SV_Target - { - fixed4 col = tex2D(_MainTex, i.texcoord.xy / i.texcoord.w) * i.color; - - #ifdef COMBINED - col.a *= tex2D(_AlphaTex, i.texcoord.xy / i.texcoord.w).g; - #endif - - #ifdef GRAYED - fixed grey = dot(col.rgb, fixed3(0.299, 0.587, 0.114)); - col.rgb = fixed3(grey, grey, grey); - #endif - - #ifdef SOFT_CLIPPED - float2 factor; - float2 condition = step(i.clipPos.xy, 0); - float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); - factor.xy = (1.0 - abs(i.clipPos.xy)) * (clip_softness.xw + clip_softness.zy); - col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); - #endif - - #ifdef CLIPPED - float2 factor = abs(i.clipPos); - col.a *= step(max(factor.x, factor.y), 1); - #endif - - #ifdef COLOR_FILTER - if (_ColorOption == 0) - { - fixed4 col2 = col; - col2.r = dot(col, _ColorMatrix[0]) + _ColorOffset.x; - col2.g = dot(col, _ColorMatrix[1]) + _ColorOffset.y; - col2.b = dot(col, _ColorMatrix[2]) + _ColorOffset.z; - col2.a = dot(col, _ColorMatrix[3]) + _ColorOffset.w; - col = col2; - } - else //premultiply alpha - col.rgb *= col.a; - #endif - - #ifdef ALPHA_MASK - clip(col.a - 0.001); - #endif - - return col; - } - ENDCG - } - } -} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader.meta deleted file mode 100644 index 36cfc08..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 263c97191482b3649ac7bf0810cc4f77 -timeCreated: 1459224288 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader deleted file mode 100644 index 31b58bc..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader +++ /dev/null @@ -1,145 +0,0 @@ -// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "FairyGUI/Text" -{ - Properties - { - _MainTex ("Alpha (A)", 2D) = "white" {} - - _StencilComp ("Stencil Comparison", Float) = 8 - _Stencil ("Stencil ID", Float) = 0 - _StencilOp ("Stencil Operation", Float) = 0 - _StencilWriteMask ("Stencil Write Mask", Float) = 255 - _StencilReadMask ("Stencil Read Mask", Float) = 255 - - _ColorMask ("Color Mask", Float) = 15 - - _BlendSrcFactor ("Blend SrcFactor", Float) = 5 - _BlendDstFactor ("Blend DstFactor", Float) = 10 - } - - SubShader - { - LOD 100 - - Tags - { - "Queue" = "Transparent" - "IgnoreProjector" = "True" - "RenderType" = "Transparent" - } - - Stencil - { - Ref [_Stencil] - Comp [_StencilComp] - Pass [_StencilOp] - ReadMask [_StencilReadMask] - WriteMask [_StencilWriteMask] - } - - Cull Off - Lighting Off - ZWrite Off - Fog { Mode Off } - Blend [_BlendSrcFactor] [_BlendDstFactor] - ColorMask [_ColorMask] - - Pass - { - CGPROGRAM - #pragma multi_compile _ GRAYED - #pragma multi_compile _ CLIPPED SOFT_CLIPPED - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata_t - { - float4 vertex : POSITION; - fixed4 color : COLOR; - float4 texcoord : TEXCOORD0; - }; - - struct v2f - { - float4 vertex : SV_POSITION; - fixed4 color : COLOR; - float4 texcoord : TEXCOORD0; - - #ifdef CLIPPED - float2 clipPos : TEXCOORD1; - #endif - - #ifdef SOFT_CLIPPED - float2 clipPos : TEXCOORD1; - #endif - }; - - sampler2D _MainTex; - - CBUFFER_START(UnityPerMaterial) - #ifdef CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - #endif - - #ifdef SOFT_CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - float4 _ClipSoftness = float4(0, 0, 0, 0); - #endif - CBUFFER_END - - v2f vert (appdata_t v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.texcoord = v.texcoord; - #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) - o.color.rgb = GammaToLinearSpace(v.color.rgb); - o.color.a = v.color.a; - #else - o.color = v.color; - #endif - - #ifdef CLIPPED - o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - #ifdef SOFT_CLIPPED - o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - return o; - } - - fixed4 frag (v2f i) : SV_Target - { - fixed4 col = i.color; - col.a *= tex2D(_MainTex, i.texcoord).a; - - #ifdef GRAYED - fixed grey = dot(col.rgb, fixed3(0.299, 0.587, 0.114)); - col.rgb = fixed3(grey, grey, grey); - #endif - - #ifdef SOFT_CLIPPED - float2 factor; - float2 condition = step(i.clipPos.xy, 0); - float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); - factor.xy = (1.0 - abs(i.clipPos.xy)) * (clip_softness.xw + clip_softness.zy); - col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); - #endif - - #ifdef CLIPPED - float2 factor = abs(i.clipPos); - col.a *= step(max(factor.x, factor.y), 1); - #endif - - return col; - } - ENDCG - } - } -} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader.meta deleted file mode 100644 index ec6565d..0000000 --- a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8526777372c6fef4f8162b3a7901dcb0 -timeCreated: 1459224288 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts.meta b/Assets/Plugins/FairyGUI/Scripts.meta deleted file mode 100644 index 8fde2fc..0000000 --- a/Assets/Plugins/FairyGUI/Scripts.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 18909c5f8494a7f45937618ed5a4fbd0 -folderAsset: yes -timeCreated: 1460480287 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core.meta b/Assets/Plugins/FairyGUI/Scripts/Core.meta deleted file mode 100644 index ab578bc..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: eed3a919a48726c46a61e180a615ef7d -folderAsset: yes -timeCreated: 1460480287 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs b/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs deleted file mode 100644 index dd725ea..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs +++ /dev/null @@ -1,110 +0,0 @@ -using UnityEngine; -using NativeBlendMode = UnityEngine.Rendering.BlendMode; - -namespace FairyGUI -{ - /*关于BlendMode.Off, 这种模式相当于Blend Off指令的效果。当然,在着色器里使用Blend Off指令可以获得更高的效率, - 但因为Image着色器本身就有多个关键字,复制一个这样的着色器代价太大,所有为了节省Shader数量便增加了这样一种模式,也是可以接受的。 - */ - - /// - /// - /// - public enum BlendMode - { - Normal, - None, - Add, - Multiply, - Screen, - Erase, - Mask, - Below, - Off, - One_OneMinusSrcAlpha, - Custom1, - Custom2, - Custom3 - } - - /// - /// - /// - public class BlendModeUtils - { - public class BlendFactor - { - public NativeBlendMode srcFactor; - public NativeBlendMode dstFactor; - public bool pma; - - public BlendFactor(NativeBlendMode srcFactor, NativeBlendMode dstFactor, bool pma = false) - { - this.srcFactor = srcFactor; - this.dstFactor = dstFactor; - this.pma = pma; - } - } - - //Source指的是被计算的颜色,Destination是已经在屏幕上的颜色。 - //混合结果=Source * factor1 + Destination * factor2 - public static BlendFactor[] Factors = new BlendFactor[] { - //Normal - new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha), - //None - new BlendFactor(NativeBlendMode.One, NativeBlendMode.One), - //Add - new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.One), - //Multiply - new BlendFactor(NativeBlendMode.DstColor, NativeBlendMode.OneMinusSrcAlpha, true), - //Screen - new BlendFactor(NativeBlendMode.One, NativeBlendMode.OneMinusSrcColor, true), - //Erase - new BlendFactor(NativeBlendMode.Zero, NativeBlendMode.OneMinusSrcAlpha), - //Mask - new BlendFactor(NativeBlendMode.Zero, NativeBlendMode.SrcAlpha), - //Below - new BlendFactor(NativeBlendMode.OneMinusDstAlpha, NativeBlendMode.DstAlpha), - //Off - new BlendFactor(NativeBlendMode.One, NativeBlendMode.Zero), - //One_OneMinusSrcAlpha - new BlendFactor(NativeBlendMode.One, NativeBlendMode.OneMinusSrcAlpha), - //Custom1 - new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha), - //Custom2 - new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha), - //Custom3 - new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha) - }; - - /// - /// - /// - /// - /// - public static void Apply(Material mat, BlendMode blendMode) - { - BlendFactor bf = Factors[(int)blendMode]; - mat.SetFloat(ShaderConfig.ID_BlendSrcFactor, (float)bf.srcFactor); - mat.SetFloat(ShaderConfig.ID_BlendDstFactor, (float)bf.dstFactor); - - if (bf.pma) - mat.SetFloat(ShaderConfig.ID_ColorOption, 1); - else - mat.SetFloat(ShaderConfig.ID_ColorOption, 0); - } - - /// - /// - /// - /// - /// - /// - public static void Override(BlendMode blendMode, NativeBlendMode srcFactor, NativeBlendMode dstFactor) - { - BlendFactor bf = Factors[(int)blendMode]; - bf.srcFactor = srcFactor; - bf.dstFactor = dstFactor; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs.meta deleted file mode 100644 index df1b3eb..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ce4df113fe8d9994c83e22680544ccdb -timeCreated: 1464679834 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs b/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs deleted file mode 100644 index 3ec6da1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs +++ /dev/null @@ -1,205 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class CaptureCamera : MonoBehaviour - { - /// - /// - /// - [System.NonSerialized] - public Transform cachedTransform; - /// - /// - /// - [System.NonSerialized] - public Camera cachedCamera; - - [System.NonSerialized] - static CaptureCamera _main; - - [System.NonSerialized] - static int _layer = -1; - static int _hiddenLayer = -1; - - public const string Name = "Capture Camera"; - public const string LayerName = "VUI"; - public const string HiddenLayerName = "Hidden VUI"; - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void Init() - { - _main = null; - } -#endif - - void OnEnable() - { - cachedCamera = this.GetComponent(); - cachedTransform = this.gameObject.transform; - - if (this.gameObject.name == Name) - _main = this; - } - - /// - /// - /// - public static void CheckMain() - { - if (_main != null && _main.cachedCamera != null) - return; - - GameObject go = GameObject.Find(Name); - if (go != null) - { - _main = go.GetComponent(); - return; - } - - GameObject cameraObject = new GameObject(Name); - Camera camera = cameraObject.AddComponent(); - camera.depth = 0; - camera.cullingMask = 1 << layer; - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = Color.clear; - camera.orthographic = true; - camera.orthographicSize = 5; - camera.nearClipPlane = -30; - camera.farClipPlane = 30; - camera.enabled = false; - camera.stereoTargetEye = StereoTargetEyeMask.None; - camera.allowHDR = false; - camera.allowMSAA = false; - cameraObject.AddComponent(); - } - - /// - /// - /// - public static int layer - { - get - { - if (_layer == -1) - { - _layer = LayerMask.NameToLayer(LayerName); - if (_layer == -1) - { - _layer = 30; - Debug.LogWarning("Please define two layers named '" + CaptureCamera.LayerName + "' and '" + CaptureCamera.HiddenLayerName + "'"); - } - } - - return _layer; - } - } - - /// - /// - /// - public static int hiddenLayer - { - get - { - if (_hiddenLayer == -1) - { - _hiddenLayer = LayerMask.NameToLayer(HiddenLayerName); - if (_hiddenLayer == -1) - { - Debug.LogWarning("Please define two layers named '" + CaptureCamera.LayerName + "' and '" + CaptureCamera.HiddenLayerName + "'"); - _hiddenLayer = 31; - } - } - - return _hiddenLayer; - } - } - - /// - /// - /// - /// - /// - /// - /// - public static RenderTexture CreateRenderTexture(int width, int height, bool stencilSupport) - { - RenderTexture texture = new RenderTexture(width, height, stencilSupport ? 24 : 0, RenderTextureFormat.ARGB32); - texture.antiAliasing = 1; - texture.filterMode = FilterMode.Bilinear; - texture.anisoLevel = 0; - texture.useMipMap = false; - texture.wrapMode = TextureWrapMode.Clamp; - texture.hideFlags = DisplayObject.hideFlags; - return texture; - } - - /// - /// - /// - /// - /// - /// - /// - public static void Capture(DisplayObject target, RenderTexture texture, float contentHeight, Vector2 offset) - { - CheckMain(); - - Matrix4x4 matrix = target.cachedTransform.localToWorldMatrix; - float scaleX = new Vector4(matrix.m00, matrix.m10, matrix.m20, matrix.m30).magnitude; - float scaleY = new Vector4(matrix.m01, matrix.m11, matrix.m21, matrix.m31).magnitude; - - Vector3 forward; - forward.x = matrix.m02; - forward.y = matrix.m12; - forward.z = matrix.m22; - - Vector3 upwards; - upwards.x = matrix.m01; - upwards.y = matrix.m11; - upwards.z = matrix.m21; - - float halfHeight = contentHeight * 0.5f; - - Camera camera = _main.cachedCamera; - camera.targetTexture = texture; - float aspect = (float)texture.width / texture.height; - camera.aspect = aspect * scaleX / scaleY; - camera.orthographicSize = halfHeight * scaleY; - _main.cachedTransform.localPosition = target.cachedTransform.TransformPoint(halfHeight * aspect - offset.x, -halfHeight + offset.y, 0); - if (forward != Vector3.zero) - _main.cachedTransform.localRotation = Quaternion.LookRotation(forward, upwards); - - int oldLayer = 0; - - if (target.graphics != null) - { - oldLayer = target.graphics.gameObject.layer; - target._SetLayerDirect(CaptureCamera.layer); - } - - if (target is Container) - { - oldLayer = ((Container)target).numChildren > 0 ? ((Container)target).GetChildAt(0).layer : CaptureCamera.hiddenLayer; - ((Container)target).SetChildrenLayer(CaptureCamera.layer); - } - - RenderTexture old = RenderTexture.active; - RenderTexture.active = texture; - GL.Clear(true, true, Color.clear); - camera.Render(); - RenderTexture.active = old; - - if (target.graphics != null) - target._SetLayerDirect(oldLayer); - - if (target is Container) - ((Container)target).SetChildrenLayer(oldLayer); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs.meta deleted file mode 100644 index fc2a061..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d207151359c99fb448f4b3380bf41b0f -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs deleted file mode 100644 index 3f71a95..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs +++ /dev/null @@ -1,1139 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class Container : DisplayObject - { - /// - /// - /// - public RenderMode renderMode; - - /// - /// - /// - public Camera renderCamera; - - /// - /// - /// - public bool opaque; - - /// - /// - /// - public Vector4? clipSoftness; - - /// - /// - /// - public IHitTest hitArea; - - /// - /// - /// - public bool touchChildren; - - /// - /// - /// - public event Action onUpdate; - - /// - /// - /// - public bool reversedMask; - - List _children; - DisplayObject _mask; - Rect? _clipRect; - List _batchElements; - - internal int _panelOrder; - internal DisplayObject _lastFocus; - - /// - /// - /// - public Container() - : base() - { - CreateGameObject("Container"); - Init(); - } - - /// - /// - /// - /// - public Container(string gameObjectName) - : base() - { - CreateGameObject(gameObjectName); - Init(); - } - - /// - /// - /// - /// - public Container(GameObject attachTarget) - : base() - { - SetGameObject(attachTarget); - Init(); - } - - void Init() - { - _children = new List(); - touchChildren = true; - } - - /// - /// - /// - public int numChildren - { - get { return _children.Count; } - } - - /// - /// - /// - /// - /// - public DisplayObject AddChild(DisplayObject child) - { - AddChildAt(child, _children.Count); - return child; - } - - /// - /// - /// - /// - /// - /// - public DisplayObject AddChildAt(DisplayObject child, int index) - { - int count = _children.Count; - if (index >= 0 && index <= count) - { - if (child.parent == this) - { - SetChildIndex(child, index); - } - else - { - child.RemoveFromParent(); - if (index == count) - _children.Add(child); - else - _children.Insert(index, child); - child.InternalSetParent(this); - - if (stage != null) - { - if (child is Container) - child.BroadcastEvent("onAddedToStage", null); - else - child.DispatchEvent("onAddedToStage", null); - } - - InvalidateBatchingState(true); - } - return child; - } - else - { - throw new Exception("Invalid child index"); - } - } - - /// - /// - /// - /// - /// - public bool Contains(DisplayObject child) - { - return _children.Contains(child); - } - - /// - /// - /// - /// - /// - public DisplayObject GetChildAt(int index) - { - return _children[index]; - } - - /// - /// - /// - /// - /// - public DisplayObject GetChild(string name) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - if (_children[i].name == name) - return _children[i]; - } - - return null; - } - - /// - /// - /// - /// - public DisplayObject[] GetChildren() - { - return _children.ToArray(); - } - - /// - /// - /// - /// - /// - public int GetChildIndex(DisplayObject child) - { - return _children.IndexOf(child); - } - - /// - /// - /// - /// - /// - public DisplayObject RemoveChild(DisplayObject child) - { - return RemoveChild(child, false); - } - - /// - /// - /// - /// - /// - /// - public DisplayObject RemoveChild(DisplayObject child, bool dispose) - { - if (child.parent != this) - throw new Exception("obj is not a child"); - - int i = _children.IndexOf(child); - if (i >= 0) - return RemoveChildAt(i, dispose); - else - return null; - } - - /// - /// - /// - /// - /// - public DisplayObject RemoveChildAt(int index) - { - return RemoveChildAt(index, false); - } - - /// - /// - /// - /// - /// - /// - public DisplayObject RemoveChildAt(int index, bool dispose) - { - if (index >= 0 && index < _children.Count) - { - DisplayObject child = _children[index]; - - if (stage != null && (child._flags & Flags.Disposed) == 0) - { - if (child is Container) - { - child.BroadcastEvent("onRemovedFromStage", null); - if (child == Stage.inst.focus || ((Container)child).IsAncestorOf(Stage.inst.focus)) - Stage.inst._OnFocusRemoving(this); - } - else - { - child.DispatchEvent("onRemovedFromStage", null); - if (child == Stage.inst.focus) - Stage.inst._OnFocusRemoving(this); - } - } - _children.Remove(child); - InvalidateBatchingState(true); - if (!dispose) - child.InternalSetParent(null); - else - child.Dispose(); - - return child; - } - else - throw new Exception("Invalid child index"); - } - - /// - /// - /// - public void RemoveChildren() - { - RemoveChildren(0, int.MaxValue, false); - } - - /// - /// - /// - /// - /// - /// - public void RemoveChildren(int beginIndex, int endIndex, bool dispose) - { - if (endIndex < 0 || endIndex >= numChildren) - endIndex = numChildren - 1; - - for (int i = beginIndex; i <= endIndex; ++i) - RemoveChildAt(beginIndex, dispose); - } - - /// - /// - /// - /// - /// - public void SetChildIndex(DisplayObject child, int index) - { - int oldIndex = _children.IndexOf(child); - if (oldIndex == index) return; - if (oldIndex == -1) throw new ArgumentException("Not a child of this container"); - _children.RemoveAt(oldIndex); - if (index >= _children.Count) - _children.Add(child); - else - _children.Insert(index, child); - InvalidateBatchingState(true); - } - - /// - /// - /// - /// - /// - public void SwapChildren(DisplayObject child1, DisplayObject child2) - { - int index1 = _children.IndexOf(child1); - int index2 = _children.IndexOf(child2); - if (index1 == -1 || index2 == -1) - throw new Exception("Not a child of this container"); - SwapChildrenAt(index1, index2); - } - - /// - /// - /// - /// - /// - public void SwapChildrenAt(int index1, int index2) - { - DisplayObject obj1 = _children[index1]; - DisplayObject obj2 = _children[index2]; - _children[index1] = obj2; - _children[index2] = obj1; - InvalidateBatchingState(true); - } - - /// - /// - /// - /// - /// - public void ChangeChildrenOrder(IList indice, IList objs) - { - int cnt = objs.Count; - for (int i = 0; i < cnt; i++) - { - DisplayObject obj = objs[i]; - if (obj.parent != this) - throw new Exception("Not a child of this container"); - - _children[indice[i]] = obj; - } - InvalidateBatchingState(true); - } - - /// - /// - /// - /// - public IEnumerator GetDescendants(bool backward) - { - return new DescendantsEnumerator(this, backward); - } - - /// - /// - /// - public Rect? clipRect - { - get { return _clipRect; } - set - { - if (_clipRect != value) - { - _clipRect = value; - UpdateBatchingFlags(); - } - } - } - - /// - /// - /// - public DisplayObject mask - { - get { return _mask; } - set - { - if (_mask != value) - { - _mask = value; - _flags |= Flags.BatchingRequested; - UpdateBatchingFlags(); - } - } - } - - /// - /// - /// - public void CreateGraphics() - { - if (graphics == null) - { - graphics = new NGraphics(this.gameObject); - graphics.texture = NTexture.Empty; - } - } - - public override Rect GetBounds(DisplayObject targetSpace) - { - if (_clipRect != null) - return TransformRect((Rect)_clipRect, targetSpace); - - int count = _children.Count; - - Rect rect; - if (count == 0) - { - Vector2 v = TransformPoint(Vector2.zero, targetSpace); - rect = Rect.MinMaxRect(v.x, v.y, 0, 0); - } - else if (count == 1) - { - rect = _children[0].GetBounds(targetSpace); - } - else - { - float minX = float.MaxValue, maxX = float.MinValue; - float minY = float.MaxValue, maxY = float.MinValue; - - for (int i = 0; i < count; ++i) - { - rect = _children[i].GetBounds(targetSpace); - minX = minX < rect.xMin ? minX : rect.xMin; - maxX = maxX > rect.xMax ? maxX : rect.xMax; - minY = minY < rect.yMin ? minY : rect.yMin; - maxY = maxY > rect.yMax ? maxY : rect.yMax; - } - - rect = Rect.MinMaxRect(minX, minY, maxX, maxY); - } - - return rect; - } - - /// - /// - /// - /// - public Camera GetRenderCamera() - { - if (renderMode == RenderMode.ScreenSpaceOverlay) - return StageCamera.main; - else - { - Camera cam = this.renderCamera; - if (cam == null) - { - if (HitTestContext.cachedMainCamera != null) - cam = HitTestContext.cachedMainCamera; - else - { - cam = Camera.main; - if (cam == null) - cam = StageCamera.main; - } - } - return cam; - } - } - - /// - /// - /// - /// - /// - /// - /// - public DisplayObject HitTest(Vector2 stagePoint, bool forTouch) - { - if (StageCamera.main == null) - { - if (this is Stage) - return this; - else - return null; - } - - HitTestContext.screenPoint = new Vector3(stagePoint.x, Screen.height - stagePoint.y, 0); - if (Display.displays.Length > 1) - { - Vector3 p = Display.RelativeMouseAt(HitTestContext.screenPoint); - if (p.x != 0 || p.y != 0) //(p != Vector3.zero) we got (0,0,1) in some unity version, especially on recovering from sleep - HitTestContext.screenPoint = p; - } - HitTestContext.worldPoint = StageCamera.main.ScreenToWorldPoint(HitTestContext.screenPoint); - HitTestContext.direction = Vector3.back; - HitTestContext.forTouch = forTouch; - HitTestContext.camera = StageCamera.main; - - DisplayObject ret = HitTest(); - if (ret != null) - return ret; - else if (this is Stage) - return this; - else - return null; - } - - override protected DisplayObject HitTest() - { - if ((_flags & Flags.UserGameObject) != 0 && !gameObject.activeInHierarchy) - return null; - - if (this.cachedTransform.localScale.x == 0 || this.cachedTransform.localScale.y == 0) - return null; - - Camera savedCamera = HitTestContext.camera; - Vector3 savedWorldPoint = HitTestContext.worldPoint; - Vector3 savedDirection = HitTestContext.direction; - DisplayObject target; - - if (renderMode != RenderMode.ScreenSpaceOverlay || (_flags & Flags.UserGameObject) != 0) - { - Camera cam = GetRenderCamera(); - if (cam.targetDisplay != HitTestContext.screenPoint.z) - return null; - - HitTestContext.camera = cam; - if (renderMode == RenderMode.WorldSpace) - { - Vector3 screenPoint = HitTestContext.camera.WorldToScreenPoint(this.cachedTransform.position); //only for query z value - screenPoint.x = HitTestContext.screenPoint.x; - screenPoint.y = HitTestContext.screenPoint.y; - - //获得本地z轴在世界坐标的方向 - HitTestContext.worldPoint = HitTestContext.camera.ScreenToWorldPoint(screenPoint); - Ray ray = HitTestContext.camera.ScreenPointToRay(screenPoint); - HitTestContext.direction = Vector3.zero - ray.direction; - } - else if (renderMode == RenderMode.ScreenSpaceCamera) - { - HitTestContext.worldPoint = HitTestContext.camera.ScreenToWorldPoint(HitTestContext.screenPoint); - } - } - else - { - if (HitTestContext.camera.targetDisplay != HitTestContext.screenPoint.z && !(this is Stage)) - return null; - } - - target = HitTest_Container(); - - HitTestContext.camera = savedCamera; - HitTestContext.worldPoint = savedWorldPoint; - HitTestContext.direction = savedDirection; - - return target; - } - - DisplayObject HitTest_Container() - { - Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); - if (_vertexMatrix != null) - HitTestContext.worldPoint = this.cachedTransform.TransformPoint(new Vector2(localPoint.x, -localPoint.y)); - - if (hitArea != null) - { - if (!hitArea.HitTest(_contentRect, localPoint)) - return null; - - if (hitArea is MeshColliderHitTest) - localPoint = ((MeshColliderHitTest)hitArea).lastHit; - } - else - { - if (_clipRect != null && !((Rect)_clipRect).Contains(localPoint)) - return null; - } - - if (_mask != null) - { - DisplayObject tmp = _mask.InternalHitTestMask(); - if (!reversedMask && tmp == null || reversedMask && tmp != null) - return null; - } - - DisplayObject target = null; - if (touchChildren) - { - int count = _children.Count; - for (int i = count - 1; i >= 0; --i) // front to back! - { - DisplayObject child = _children[i]; - if ((child._flags & Flags.GameObjectDisposed) != 0) - { - child.DisplayDisposedWarning(); - continue; - } - - if (child == _mask || (child._flags & Flags.TouchDisabled) != 0) - continue; - - target = child.InternalHitTest(); - if (target != null) - break; - } - } - - if (target == null && opaque && (hitArea != null || _contentRect.Contains(localPoint))) - target = this; - - return target; - } - - /// - /// - /// - /// - /// - public bool IsAncestorOf(DisplayObject obj) - { - if (obj == null) - return false; - - Container p = obj.parent; - while (p != null) - { - if (p == this) - return true; - - p = p.parent; - } - return false; - } - - /// - /// - /// - public bool fairyBatching - { - get { return (_flags & Flags.FairyBatching) != 0; } - set - { - bool oldValue = (_flags & Flags.FairyBatching) != 0; - if (oldValue != value) - { - if (value) - _flags |= Flags.FairyBatching; - else - _flags &= ~Flags.FairyBatching; - UpdateBatchingFlags(); - } - } - } - - internal void UpdateBatchingFlags() - { - bool oldValue = (_flags & Flags.BatchingRoot) != 0; - bool newValue = (_flags & Flags.FairyBatching) != 0 || _clipRect != null || _mask != null || _paintingMode > 0; - if (newValue) - _flags |= Flags.BatchingRoot; - else - _flags &= ~Flags.BatchingRoot; - if (oldValue != newValue) - { - if (newValue) - _flags |= Flags.BatchingRequested; - else if (_batchElements != null) - _batchElements.Clear(); - - InvalidateBatchingState(); - } - } - - /// - /// - /// - /// - public void InvalidateBatchingState(bool childrenChanged) - { - if (childrenChanged && (_flags & Flags.BatchingRoot) != 0) - _flags |= Flags.BatchingRequested; - else - { - Container p = this.parent; - while (p != null) - { - if ((p._flags & Flags.BatchingRoot) != 0) - { - p._flags |= Flags.BatchingRequested; - break; - } - - p = p.parent; - } - } - } - - /// - /// - /// - /// - public void SetChildrenLayer(int value) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - DisplayObject child = _children[i]; - if (child._paintingMode > 0) - child.paintingGraphics.gameObject.layer = value; - else - child._SetLayerDirect(value); - if ((child is Container) && child._paintingMode == 0) - ((Container)child).SetChildrenLayer(value); - } - } - - override public void Update(UpdateContext context) - { - if ((_flags & Flags.UserGameObject) != 0 && !gameObject.activeInHierarchy) - return; - - base.Update(context); - - if (_paintingMode != 0) - { - if ((_flags & Flags.CacheAsBitmap) != 0 && _paintingInfo.flag == 2) - { - if (onUpdate != null) - onUpdate(); - return; - } - - context.EnterPaintingMode(); - } - - if (_mask != null) - { - context.EnterClipping(this.id, reversedMask); - if (_mask.graphics != null) - _mask.graphics._PreUpdateMask(context, _mask.id); - } - else if (_clipRect != null) - context.EnterClipping(this.id, this.TransformRect((Rect)_clipRect, null), clipSoftness); - - float savedAlpha = context.alpha; - context.alpha *= this.alpha; - bool savedGrayed = context.grayed; - context.grayed = context.grayed || this.grayed; - - if ((_flags & Flags.FairyBatching) != 0) - context.batchingDepth++; - - if (context.batchingDepth > 0) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - DisplayObject child = _children[i]; - if ((child._flags & Flags.GameObjectDisposed) != 0) - { - child.DisplayDisposedWarning(); - continue; - } - - if (child.visible) - child.Update(context); - } - } - else - { - if (_mask != null) - _mask.SetRenderingOrder(context, false); - - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - DisplayObject child = _children[i]; - if ((child._flags & Flags.GameObjectDisposed) != 0) - { - child.DisplayDisposedWarning(); - continue; - } - - if (child.visible) - { - if (!(child.graphics != null && child.graphics._maskFlag == 1)) //if not a mask - child.SetRenderingOrder(context, false); - - child.Update(context); - } - } - - if (_mask != null) - { - if (_mask.graphics != null) - _mask.graphics._SetStencilEraserOrder(context.renderingOrder++); - } - } - - if ((_flags & Flags.FairyBatching) != 0) - { - if (context.batchingDepth == 1) - SetRenderingOrderAll(context); - context.batchingDepth--; - } - - context.alpha = savedAlpha; - context.grayed = savedGrayed; - - if (_clipRect != null || _mask != null) - context.LeaveClipping(); - - if (_paintingMode != 0) - { - context.LeavePaintingMode(); - UpdateContext.OnEnd += _paintingInfo.captureDelegate; - } - - if (onUpdate != null) - onUpdate(); - } - - private void SetRenderingOrderAll(UpdateContext context) - { - if ((_flags & Flags.BatchingRequested) != 0) - DoFairyBatching(); - - if (_mask != null) - _mask.SetRenderingOrder(context, false); - - int cnt = _batchElements.Count; - for (int i = 0; i < cnt; i++) - { - BatchElement batchElement = _batchElements[i]; - batchElement.owner.SetRenderingOrder(context, true); - - if (batchElement.isRoot) - ((Container)batchElement.owner).SetRenderingOrderAll(context); - } - - if (_mask != null) - { - if (_mask.graphics != null) - _mask.graphics._SetStencilEraserOrder(context.renderingOrder++); - } - } - - private void DoFairyBatching() - { - _flags &= ~Flags.BatchingRequested; - - if (_batchElements == null) - _batchElements = new List(); - else - _batchElements.Clear(); - CollectChildren(this, false); - - int cnt = _batchElements.Count; - - int i, j, k, m; - object curMat, testMat, lastMat; - BatchElement current, test; - float[] bounds; - for (i = 0; i < cnt; i++) - { - current = _batchElements[i]; - bounds = current.bounds; - curMat = current.material; - if (curMat == null || current.breakBatch) - continue; - - k = -1; - lastMat = null; - m = i; - for (j = i - 1; j >= 0; j--) - { - test = _batchElements[j]; - if (test.breakBatch) - break; - - testMat = test.material; - if (testMat != null) - { - if (lastMat != testMat) - { - lastMat = testMat; - m = j + 1; - } - - if (curMat == testMat) - k = m; - } - - if ((bounds[0] > test.bounds[0] ? bounds[0] : test.bounds[0]) - <= (bounds[2] < test.bounds[2] ? bounds[2] : test.bounds[2]) - && (bounds[1] > test.bounds[1] ? bounds[1] : test.bounds[1]) - <= (bounds[3] < test.bounds[3] ? bounds[3] : test.bounds[3])) - { - if (k == -1) - k = m; - break; - } - } - if (k != -1 && i != k) - { - _batchElements.RemoveAt(i); - _batchElements.Insert(k, current); - } - } - - //Debug.Log("DoFairyBatching " + cnt + "," + this.cachedTransform.GetInstanceID()); - } - - private void CollectChildren(Container initiator, bool outlineChanged) - { - EnsureSizeCorrect(); - int count = _children.Count; - for (int i = 0; i < count; i++) - { - DisplayObject child = _children[i]; - if (!child.visible || child == initiator._mask) - continue; - - bool childOutlineChanged = outlineChanged || (child._flags & Flags.OutlineChanged) != 0; - bool isRoot = (child._flags & Flags.BatchingRoot) != 0; - BatchElement batchElement = child.AddToBatch(initiator._batchElements, isRoot); - if (batchElement != null) - { - batchElement.isRoot = isRoot; - if (childOutlineChanged) - { - Rect rect = child.GetBounds(initiator); - batchElement.bounds[0] = rect.xMin; - batchElement.bounds[1] = rect.yMin; - batchElement.bounds[2] = rect.xMax; - batchElement.bounds[3] = rect.yMax; - child._flags &= ~Flags.OutlineChanged; - } - } - - if (isRoot) - { - if ((child._flags & Flags.BatchingRequested) != 0) - ((Container)child).DoFairyBatching(); - } - else if (child is Container) - ((Container)child).CollectChildren(initiator, childOutlineChanged); - } - } - - public override void Dispose() - { - if ((_flags & Flags.Disposed) != 0) - return; - - base.Dispose(); //Destroy GameObject tree first, avoid destroying each seperately; - - int numChildren = _children.Count; - for (int i = numChildren - 1; i >= 0; --i) - { - DisplayObject obj = _children[i]; - obj.InternalSetParent(null); //Avoid RemoveParent call - obj.Dispose(); - } - } - - /// - /// If true, when the container is focused, tab navigation is lock inside it. - /// - public bool tabStopChildren - { - get { return (_flags & Flags.TabStopChildren) != 0; } - set - { - if (value) - _flags |= Flags.TabStopChildren; - else - _flags &= ~Flags.TabStopChildren; - } - } - - struct DescendantsEnumerator : IEnumerator - { - Container _root; - Container _com; - DisplayObject _current; - int _index; - bool _forward; - - public DescendantsEnumerator(Container root, bool backward) - { - _root = root; - _com = _root; - _current = null; - _forward = !backward; - if (_forward) - _index = 0; - else - _index = _com._children.Count - 1; - } - - public DisplayObject Current - { - get { return _current; } - } - - object IEnumerator.Current - { - get { return _current; } - } - - public bool MoveNext() - { - if (_forward) - { - if (_index >= _com._children.Count) - { - if (_com == _root) - { - _current = null; - return false; - } - - _current = _com; - _com = _com.parent; - _index = _com.GetChildIndex(_current) + 1; - return true; - } - else - { - DisplayObject obj = _com._children[_index]; - if (obj is Container) - { - _com = (Container)obj; - _index = 0; - return MoveNext(); - } - _index++; - _current = obj; - return true; - } - } - else - { - if (_index < 0) - { - if (_com == _root) - { - _current = null; - return false; - } - - _current = _com; - _com = _com.parent; - _index = _com.GetChildIndex(_current) - 1; - return true; - } - else - { - DisplayObject obj = _com._children[_index]; - if (obj is Container) - { - _com = (Container)obj; - _index = _com._children.Count - 1; - return MoveNext(); - } - _index--; - _current = obj; - return true; - } - } - } - - public void Reset() - { - _com = _root; - _current = null; - _index = 0; - } - - public void Dispose() - { - } - } - } - - - public class BatchElement - { - public Material material; - public float[] bounds; - public IBatchable owner; - public bool isRoot; - public bool breakBatch; - - public BatchElement(IBatchable owner, float[] bounds) - { - this.owner = owner; - this.bounds = bounds ?? new float[4]; - } - } - - /// - /// - /// - public interface IBatchable - { - void SetRenderingOrder(UpdateContext context, bool inBatch); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs.meta deleted file mode 100644 index 3c7d5f1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 531f2c788ec31e7459700f6811410a6f -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs b/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs deleted file mode 100644 index c29b2da..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs +++ /dev/null @@ -1,1921 +0,0 @@ -using System; -using System.Text; -using UnityEngine; -using FairyGUI.Utils; -using System.Collections.Generic; - -namespace FairyGUI -{ - /// - /// - /// - public class DisplayObject : EventDispatcher, IBatchable - { - /// - /// - /// - public string name; - - /// - /// - /// - public Container parent { get; private set; } - - /// - /// - /// - public GameObject gameObject { get; protected set; } - - /// - /// - /// - public Transform cachedTransform { get; protected set; } - - /// - /// - /// - public NGraphics graphics { get; protected set; } - - /// - /// - /// - public NGraphics paintingGraphics { get; protected set; } - - /// - /// - /// - public event Action onPaint; - - /// - /// - /// - public GObject gOwner; - - /// - /// - /// - public uint id; - - bool _visible; - bool _touchable; - Vector2 _pivot; - Vector3 _pivotOffset; - Vector3 _rotation; //由于万向锁,单独旋转一个轴是会影响到其他轴的,所以这里需要单独保存 - Vector2 _skew; - int _renderingOrder; - float _alpha; - bool _grayed; - BlendMode _blendMode; - IFilter _filter; - Transform _home; - string _cursor; - bool _perspective; - int _focalLength; - Vector3 _pixelPerfectAdjustment; - int _checkPixelPerfect; - - EventListener _onClick; - EventListener _onRightClick; - EventListener _onTouchBegin; - EventListener _onTouchMove; - EventListener _onTouchEnd; - EventListener _onRollOver; - EventListener _onRollOut; - EventListener _onMouseWheel; - EventListener _onAddedToStage; - EventListener _onRemovedFromStage; - EventListener _onKeyDown; - EventListener _onClickLink; - EventListener _onFocusIn; - EventListener _onFocusOut; - - protected internal int _paintingMode; //1-滤镜,2-blendMode,4-transformMatrix, 8-cacheAsBitmap - protected internal PaintingInfo _paintingInfo; - protected Rect _contentRect; - protected NGraphics.VertexMatrix _vertexMatrix; - protected internal Flags _flags; - - internal static uint _gInstanceCounter; - - internal static HideFlags hideFlags = HideFlags.None; - - public DisplayObject() - { - id = _gInstanceCounter++; - - _alpha = 1; - _visible = true; - _touchable = true; - _blendMode = BlendMode.Normal; - _focalLength = 2000; - _flags |= Flags.OutlineChanged; - if (UIConfig.makePixelPerfect) - _flags |= Flags.PixelPerfect; - } - - /// - /// - /// - public EventListener onClick - { - get { return _onClick ?? (_onClick = new EventListener(this, "onClick")); } - } - - /// - /// - /// - public EventListener onRightClick - { - get { return _onRightClick ?? (_onRightClick = new EventListener(this, "onRightClick")); } - } - - /// - /// - /// - public EventListener onTouchBegin - { - get { return _onTouchBegin ?? (_onTouchBegin = new EventListener(this, "onTouchBegin")); } - } - - /// - /// - /// - public EventListener onTouchMove - { - get { return _onTouchMove ?? (_onTouchMove = new EventListener(this, "onTouchMove")); } - } - - /// - /// - /// - public EventListener onTouchEnd - { - get { return _onTouchEnd ?? (_onTouchEnd = new EventListener(this, "onTouchEnd")); } - } - - /// - /// - /// - public EventListener onRollOver - { - get { return _onRollOver ?? (_onRollOver = new EventListener(this, "onRollOver")); } - } - - /// - /// - /// - public EventListener onRollOut - { - get { return _onRollOut ?? (_onRollOut = new EventListener(this, "onRollOut")); } - } - - /// - /// - /// - public EventListener onMouseWheel - { - get { return _onMouseWheel ?? (_onMouseWheel = new EventListener(this, "onMouseWheel")); } - } - - /// - /// - /// - public EventListener onAddedToStage - { - get { return _onAddedToStage ?? (_onAddedToStage = new EventListener(this, "onAddedToStage")); } - } - - /// - /// - /// - public EventListener onRemovedFromStage - { - get { return _onRemovedFromStage ?? (_onRemovedFromStage = new EventListener(this, "onRemovedFromStage")); } - } - - /// - /// - /// - public EventListener onKeyDown - { - get { return _onKeyDown ?? (_onKeyDown = new EventListener(this, "onKeyDown")); } - } - - /// - /// - /// - public EventListener onClickLink - { - get { return _onClickLink ?? (_onClickLink = new EventListener(this, "onClickLink")); } - } - - /// - /// - /// - public EventListener onFocusIn - { - get { return _onFocusIn ?? (_onFocusIn = new EventListener(this, "onFocusIn")); } - } - - /// - /// - /// - public EventListener onFocusOut - { - get { return _onFocusOut ?? (_onFocusOut = new EventListener(this, "onFocusOut")); } - - } - - protected void CreateGameObject(string gameObjectName) - { - gameObject = new GameObject(gameObjectName); - cachedTransform = gameObject.transform; - if (Application.isPlaying) - { - UnityEngine.Object.DontDestroyOnLoad(gameObject); - - DisplayObjectInfo info = gameObject.AddComponent(); - info.displayObject = this; - } - gameObject.hideFlags = DisplayObject.hideFlags; - gameObject.SetActive(false); - } - - protected void SetGameObject(GameObject gameObject) - { - this.gameObject = gameObject; - this.cachedTransform = gameObject.transform; - _rotation = cachedTransform.localEulerAngles; - - _flags |= Flags.UserGameObject; - } - - protected void DestroyGameObject() - { - if ((_flags & Flags.UserGameObject) == 0 && gameObject != null) - { - if (Application.isPlaying) - GameObject.Destroy(gameObject); - else - GameObject.DestroyImmediate(gameObject); - gameObject = null; - cachedTransform = null; - } - } - - /// - /// - /// - public float alpha - { - get { return _alpha; } - set { _alpha = value; } - } - - /// - /// - /// - public bool grayed - { - get { return _grayed; } - set { _grayed = value; } - } - - /// - /// - /// - public bool visible - { - get { return _visible; } - set - { - if (_visible != value) - { - _visible = value; - _flags |= Flags.OutlineChanged; - if (parent != null && _visible) - { - gameObject.SetActive(true); - InvalidateBatchingState(); - if (this is Container) - ((Container)this).InvalidateBatchingState(true); - } - else - gameObject.SetActive(false); - } - } - } - - /// - /// - /// - public float x - { - get { return cachedTransform.localPosition.x; } - set - { - SetPosition(value, -cachedTransform.localPosition.y, cachedTransform.localPosition.z); - } - } - - /// - /// - /// - public float y - { - get { return -cachedTransform.localPosition.y; } - set - { - SetPosition(cachedTransform.localPosition.x, value, cachedTransform.localPosition.z); - } - } - - /// - /// - /// - public float z - { - get { return cachedTransform.localPosition.z; } - set - { - SetPosition(cachedTransform.localPosition.x, -cachedTransform.localPosition.y, value); - } - } - - /// - /// - /// - public Vector2 xy - { - get { return new Vector2(this.x, this.y); } - set { SetPosition(value.x, value.y, cachedTransform.localPosition.z); } - } - - /// - /// - /// - public Vector3 position - { - get { return new Vector3(this.x, this.y, this.z); } - set { SetPosition(value.x, value.y, value.z); } - } - - /// - /// - /// - /// - /// - public void SetXY(float xv, float yv) - { - SetPosition(xv, yv, cachedTransform.localPosition.z); - } - - /// - /// - /// - /// - /// - /// - public void SetPosition(float xv, float yv, float zv) - { - Vector3 v = new Vector3(); - v.x = xv; - v.y = -yv; - v.z = zv; - if (v != cachedTransform.localPosition) - { - cachedTransform.localPosition = v; - _flags |= Flags.OutlineChanged; - if ((_flags & Flags.PixelPerfect) != 0) - { - //总在下一帧再完成PixelPerfect,这样当物体在连续运动时,不会因为PixelPerfect而发生抖动。 - _checkPixelPerfect = Time.frameCount; - _pixelPerfectAdjustment = Vector3.zero; - } - } - } - - /// - /// If the object position is align by pixel - /// - public bool pixelPerfect - { - get { return (_flags & Flags.PixelPerfect) != 0; } - set - { - if (value) - _flags |= Flags.PixelPerfect; - else - _flags &= ~Flags.PixelPerfect; - } - } - - /// - /// - /// - public float width - { - get - { - EnsureSizeCorrect(); - return _contentRect.width; - } - set - { - if (!Mathf.Approximately(value, _contentRect.width)) - { - _contentRect.width = value; - _flags |= Flags.WidthChanged; - _flags &= ~Flags.HeightChanged; - OnSizeChanged(); - } - } - } - - /// - /// - /// - public float height - { - get - { - EnsureSizeCorrect(); - return _contentRect.height; - } - set - { - if (!Mathf.Approximately(value, _contentRect.height)) - { - _contentRect.height = value; - _flags &= ~Flags.WidthChanged; - _flags |= Flags.HeightChanged; - OnSizeChanged(); - } - } - } - - /// - /// - /// - public Vector2 size - { - get - { - EnsureSizeCorrect(); - return _contentRect.size; - } - set - { - SetSize(value.x, value.y); - } - } - - /// - /// - /// - /// - /// - public void SetSize(float wv, float hv) - { - if (!Mathf.Approximately(wv, _contentRect.width)) - _flags |= Flags.WidthChanged; - else - _flags &= ~Flags.WidthChanged; - if (!Mathf.Approximately(hv, _contentRect.height)) - _flags |= Flags.HeightChanged; - else - _flags &= ~Flags.HeightChanged; - - if ((_flags & Flags.WidthChanged) != 0 || (_flags & Flags.HeightChanged) != 0) - { - _contentRect.width = wv; - _contentRect.height = hv; - OnSizeChanged(); - } - } - - virtual public void EnsureSizeCorrect() - { - } - - virtual protected void OnSizeChanged() - { - ApplyPivot(); - - if (_paintingInfo != null) - _paintingInfo.flag = 1; - if (graphics != null) - graphics.contentRect = _contentRect; - _flags |= Flags.OutlineChanged; - } - - /// - /// - /// - public float scaleX - { - get { return cachedTransform.localScale.x; } - set - { - Vector3 v = cachedTransform.localScale; - v.x = v.z = ValidateScale(value); - cachedTransform.localScale = v; - _flags |= Flags.OutlineChanged; - ApplyPivot(); - } - } - - /// - /// - /// - public float scaleY - { - get { return cachedTransform.localScale.y; } - set - { - Vector3 v = cachedTransform.localScale; - v.y = ValidateScale(value); - cachedTransform.localScale = v; - _flags |= Flags.OutlineChanged; - ApplyPivot(); - } - } - - /// - /// - /// - /// - /// - public void SetScale(float xv, float yv) - { - Vector3 v = new Vector3(); - v.x = v.z = ValidateScale(xv); - v.y = ValidateScale(yv); - cachedTransform.localScale = v; - _flags |= Flags.OutlineChanged; - ApplyPivot(); - } - - /// - /// 在scale过小情况(极端情况=0),当使用Transform的坐标变换时,变换到世界,再从世界变换到本地,会由于精度问题造成结果错误。 - /// 这种错误会导致Batching错误,因为Batching会使用缓存的outline。 - /// 这里限制一下scale的最小值作为当前解决方案。 - /// 这个方案并不完美,因为限制了本地scale值并不能保证对世界scale不会过小。 - /// - /// - /// - private float ValidateScale(float value) - { - if (value >= 0 && value < 0.001f) - value = 0.001f; - else if (value < 0 && value > -0.001f) - value = -0.001f; - return value; - } - - /// - /// - /// - public Vector2 scale - { - get { return cachedTransform.localScale; } - set - { - SetScale(value.x, value.y); - } - } - - /// - /// - /// - public float rotation - { - get - { - //和Unity默认的旋转方向相反 - return -_rotation.z; - } - set - { - _rotation.z = -value; - _flags |= Flags.OutlineChanged; - if (_perspective) - UpdateTransformMatrix(); - else - { - cachedTransform.localEulerAngles = _rotation; - ApplyPivot(); - } - } - } - - /// - /// - /// - public float rotationX - { - get - { - return _rotation.x; - } - set - { - _rotation.x = value; - _flags |= Flags.OutlineChanged; - if (_perspective) - UpdateTransformMatrix(); - else - { - cachedTransform.localEulerAngles = _rotation; - ApplyPivot(); - } - } - } - - /// - /// - /// - public float rotationY - { - get - { - return _rotation.y; - } - set - { - _rotation.y = value; - _flags |= Flags.OutlineChanged; - if (_perspective) - UpdateTransformMatrix(); - else - { - cachedTransform.localEulerAngles = _rotation; - ApplyPivot(); - } - } - } - - /// - /// - /// - public Vector2 skew - { - get { return _skew; } - set - { - _skew = value; - _flags |= Flags.OutlineChanged; - - if (!Application.isPlaying) //编辑期间不支持!! - return; - - UpdateTransformMatrix(); - } - } - - /// - /// 当对象处于ScreenSpace,也就是使用正交相机渲染时,对象虽然可以绕X轴或者Y轴旋转,但没有透视效果。设置perspective,可以模拟出透视效果。 - /// - public bool perspective - { - get - { - return _perspective; - } - set - { - if (_perspective != value) - { - _perspective = value; - if (_perspective)//屏蔽Unity自身的旋转变换 - cachedTransform.localEulerAngles = Vector3.zero; - else - cachedTransform.localEulerAngles = _rotation; - - ApplyPivot(); - UpdateTransformMatrix(); - } - } - } - - /// - /// - /// - public int focalLength - { - get { return _focalLength; } - set - { - if (value <= 0) - value = 1; - - _focalLength = value; - if (_vertexMatrix != null) - UpdateTransformMatrix(); - } - } - - void UpdateTransformMatrix() - { - Matrix4x4 matrix = Matrix4x4.identity; - if (_skew.x != 0 || _skew.y != 0) - ToolSet.SkewMatrix(ref matrix, _skew.x, _skew.y); - if (_perspective) - matrix *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(_rotation), Vector3.one); - if (matrix.isIdentity) - _vertexMatrix = null; - else if (_vertexMatrix == null) - _vertexMatrix = new NGraphics.VertexMatrix(); - - //组件的transformMatrix是通过paintingMode实现的,因为全部通过矩阵变换的话,和unity自身的变换混杂在一起,无力理清。 - if (_vertexMatrix != null) - { - _vertexMatrix.matrix = matrix; - _vertexMatrix.cameraPos = new Vector3(_pivot.x * _contentRect.width, -_pivot.y * _contentRect.height, _focalLength); - - if (graphics == null) - EnterPaintingMode(4, null); - } - else - { - if (graphics == null) - LeavePaintingMode(4); - } - - if (_paintingMode > 0) - { - paintingGraphics.vertexMatrix = _vertexMatrix; - _paintingInfo.flag = 1; - } - else if (graphics != null) - graphics.vertexMatrix = _vertexMatrix; - - _flags |= Flags.OutlineChanged; - } - - /// - /// - /// - public Vector2 pivot - { - get { return _pivot; } - set - { - Vector3 deltaPivot = new Vector2((value.x - _pivot.x) * _contentRect.width, (_pivot.y - value.y) * _contentRect.height); - Vector3 oldOffset = _pivotOffset; - - _pivot = value; - UpdatePivotOffset(); - Vector3 v = cachedTransform.localPosition; - v += oldOffset - _pivotOffset + deltaPivot; - cachedTransform.localPosition = v; - _flags |= Flags.OutlineChanged; - } - } - - void UpdatePivotOffset() - { - float px = _pivot.x * _contentRect.width; - float py = _pivot.y * _contentRect.height; - - //注意这里不用处理skew,因为在顶点变换里有对pivot的处理 - Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, cachedTransform.localRotation, cachedTransform.localScale); - _pivotOffset = matrix.MultiplyPoint(new Vector3(px, -py, 0)); - - if (_vertexMatrix != null) - _vertexMatrix.cameraPos = new Vector3(_pivot.x * _contentRect.width, -_pivot.y * _contentRect.height, _focalLength); - } - - void ApplyPivot() - { - if (_pivot.x != 0 || _pivot.y != 0) - { - Vector3 oldOffset = _pivotOffset; - - UpdatePivotOffset(); - Vector3 v = cachedTransform.localPosition; - - if ((_flags & Flags.PixelPerfect) != 0) - { - v -= _pixelPerfectAdjustment; - _checkPixelPerfect = Time.frameCount; - _pixelPerfectAdjustment = Vector3.zero; - } - - v += oldOffset - _pivotOffset; - cachedTransform.localPosition = v; - _flags |= Flags.OutlineChanged; - } - } - - /// - /// This is the pivot position - /// - public Vector3 location - { - get - { - Vector3 pos = this.position; - pos.x += _pivotOffset.x; - pos.y -= _pivotOffset.y; - pos.z += _pivotOffset.z; - return pos; - } - - set - { - this.SetPosition(value.x - _pivotOffset.x, value.y + _pivotOffset.y, value.z - _pivotOffset.z); - } - } - - /// - /// - /// - public Material material - { - get - { - if (graphics != null) - return graphics.material; - else - return null; - } - set - { - if (graphics != null) - graphics.material = value; - } - } - - /// - /// - /// - public string shader - { - get - { - if (graphics != null) - return graphics.shader; - else - return null; - } - set - { - if (graphics != null) - graphics.shader = value; - } - } - - /// - /// - /// - public int renderingOrder - { - get - { - return _renderingOrder; - } - } - - virtual public void SetRenderingOrder(UpdateContext context, bool inBatch) - { - if ((_flags & Flags.GameObjectDisposed) != 0) - { - DisplayDisposedWarning(); - return; - } - - _renderingOrder = context.renderingOrder; - if (graphics != null) - graphics.SetRenderingOrder(context, inBatch); - else - context.renderingOrder++; - - if (_paintingMode > 0) - paintingGraphics.renderingOrder = _renderingOrder; - } - - /// - /// - /// - public int layer - { - get - { - if (_paintingMode > 0) - return paintingGraphics.gameObject.layer; - else - return gameObject.layer; - } - set - { - SetLayer(value, false); - } - } - - /// - /// If the object can be focused? - /// - public bool focusable - { - get { return (_flags & Flags.NotFocusable) == 0; } - set - { - if (value) - _flags &= ~Flags.NotFocusable; - else - _flags |= Flags.NotFocusable; - } - } - - /// - /// If the object can be navigated by TAB? - /// - public bool tabStop - { - get { return (_flags & Flags.TabStop) != 0; } - set - { - if (value) - _flags |= Flags.TabStop; - else - _flags &= ~Flags.TabStop; - } - } - - /// - /// If the object focused? - /// - public bool focused - { - get - { - return Stage.inst.focus == this || (this is Container) && ((Container)this).IsAncestorOf(Stage.inst.focus); - } - } - - internal bool _AcceptTab() - { - if (_touchable && _visible - && ((_flags & Flags.TabStop) != 0 || (_flags & Flags.TabStopChildren) != 0) - && (_flags & Flags.NotFocusable) == 0) - { - Stage.inst.SetFocus(this, true); - return true; - } - else - return false; - } - - /// - /// - /// - /// - public string cursor - { - get { return _cursor; } - set - { - _cursor = value; - if (Application.isPlaying - && (this == Stage.inst.touchTarget || (this is Container) && ((Container)this).IsAncestorOf(Stage.inst.touchTarget))) - { - Stage.inst._ChangeCursor(_cursor); - } - } - } - - /// - /// - /// - public bool isDisposed - { - get { return (_flags & Flags.Disposed) != 0 || gameObject == null; } - } - - internal void InternalSetParent(Container value) - { - if (parent != value) - { - if (value == null && (parent._flags & Flags.Disposed) != 0) - parent = value; - else - { - parent = value; - UpdateHierarchy(); - } - _flags |= Flags.OutlineChanged; - } - } - - /// - /// - /// - public Container topmost - { - get - { - DisplayObject currentObject = this; - while (currentObject.parent != null) - currentObject = currentObject.parent; - return currentObject as Container; - } - } - - /// - /// - /// - public Stage stage - { - get - { - return topmost as Stage; - } - } - - /// - /// - /// - public Container worldSpaceContainer - { - get - { - Container wsc = null; - DisplayObject currentObject = this; - while (currentObject.parent != null) - { - if ((currentObject is Container) && ((Container)currentObject).renderMode == RenderMode.WorldSpace) - { - wsc = (Container)currentObject; - break; - } - currentObject = currentObject.parent; - } - - return wsc; - } - } - - /// - /// - /// - public bool touchable - { - get { return _touchable; } - set - { - if (_touchable != value) - { - _touchable = value; - if (this is Container) - { - ColliderHitTest hitArea = ((Container)this).hitArea as ColliderHitTest; - if (hitArea != null) - hitArea.collider.enabled = value; - } - } - } - } - - /// - /// - /// - /// - public bool touchDisabled - { - get { return (_flags & Flags.TouchDisabled) != 0; } - } - - /// - /// 进入绘画模式,整个对象将画到一张RenderTexture上,然后这种贴图将代替原有的显示内容。 - /// 可以在onPaint回调里对这张纹理进行进一步操作,实现特殊效果。 - /// - public void EnterPaintingMode() - { - EnterPaintingMode(16384, null, 1); - } - - /// - /// 进入绘画模式,整个对象将画到一张RenderTexture上,然后这种贴图将代替原有的显示内容。 - /// 可以在onPaint回调里对这张纹理进行进一步操作,实现特殊效果。 - /// 可能有多个地方要求进入绘画模式,这里用requestorId加以区别,取值是1、2、4、8、16以此类推。1024内内部保留。用户自定义的id从1024开始。 - /// - /// 请求者id - /// 纹理四周的留空。如果特殊处理后的内容大于原内容,那么这里的设置可以使纹理扩大。 - public void EnterPaintingMode(int requestorId, Margin? extend) - { - EnterPaintingMode(requestorId, extend, 1); - } - - /// - /// 进入绘画模式,整个对象将画到一张RenderTexture上,然后这种贴图将代替原有的显示内容。 - /// 可以在onPaint回调里对这张纹理进行进一步操作,实现特殊效果。 - /// 可能有多个地方要求进入绘画模式,这里用requestorId加以区别,取值是1、2、4、8、16以此类推。1024内内部保留。用户自定义的id从1024开始。 - /// - /// 请求者id - /// 扩展纹理。如果特殊处理后的内容大于原内容,那么这里的设置可以使纹理扩大。 - /// 附加一个缩放系数 - public void EnterPaintingMode(int requestorId, Margin? extend, float scale) - { - bool first = _paintingMode == 0; - _paintingMode |= requestorId; - if (first) - { - if (_paintingInfo == null) - { - _paintingInfo = new PaintingInfo() - { - captureDelegate = Capture, - scale = 1 - }; - } - - if (paintingGraphics == null) - { - if (graphics == null) - paintingGraphics = new NGraphics(this.gameObject); - else - { - GameObject go = new GameObject(this.gameObject.name + " (Painter)"); - go.layer = this.gameObject.layer; - go.transform.SetParent(cachedTransform, false); - go.hideFlags = DisplayObject.hideFlags; - paintingGraphics = new NGraphics(go); - } - } - else - paintingGraphics.enabled = true; - paintingGraphics.vertexMatrix = null; - - if (this is Container) - { - ((Container)this).SetChildrenLayer(CaptureCamera.hiddenLayer); - ((Container)this).UpdateBatchingFlags(); - } - else - this.InvalidateBatchingState(); - - if (graphics != null) - _SetLayerDirect(CaptureCamera.hiddenLayer); - } - if (extend != null) - _paintingInfo.extend = (Margin)extend; - _paintingInfo.scale = scale; - _paintingInfo.flag = 1; - } - - /// - /// 离开绘画模式 - /// - /// - public void LeavePaintingMode(int requestorId) - { - if (_paintingMode == 0 || (_flags & Flags.Disposed) != 0) - return; - - _paintingMode ^= requestorId; - if (_paintingMode == 0) - { - paintingGraphics.enabled = false; - - if (this is Container) - { - ((Container)this).SetChildrenLayer(this.layer); - ((Container)this).UpdateBatchingFlags(); - } - else - this.InvalidateBatchingState(); - - if (graphics != null) - _SetLayerDirect(paintingGraphics.gameObject.layer); - } - } - - /// - /// - /// - public bool paintingMode - { - get { return _paintingMode > 0; } - } - - /// - /// 将整个显示对象(如果是容器,则容器包含的整个显示列表)静态化,所有内容被缓冲到一张纹理上。 - /// DC将保持为1。CPU消耗将降到最低。但对象的任何变化不会更新。 - /// 当cacheAsBitmap已经为true时,再次调用cacheAsBitmap=true将会刷新对象一次。 - /// - public bool cacheAsBitmap - { - get { return (_flags & Flags.CacheAsBitmap) != 0; } - set - { - if (value) - { - _flags |= Flags.CacheAsBitmap; - EnterPaintingMode(8, null, UIContentScaler.scaleFactor); - } - else - { - _flags &= ~Flags.CacheAsBitmap; - LeavePaintingMode(8); - } - } - } - - /// - /// - /// - /// - /// - /// - public Texture2D GetScreenShot(Margin? extend, float scale) - { - EnterPaintingMode(8, null, scale); - UpdatePainting(); - Capture(); - - Texture2D output; - if (paintingGraphics.texture == null) - output = new Texture2D(1, 1, TextureFormat.RGBA32, false, true); - else - { - RenderTexture rt = (RenderTexture)paintingGraphics.texture.nativeTexture; - output = new Texture2D(rt.width, rt.height, TextureFormat.RGBA32, false, true); - RenderTexture old = RenderTexture.active; - RenderTexture.active = rt; - output.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0); - output.Apply(); - RenderTexture.active = old; - } - - LeavePaintingMode(8); - - return output; - } - - /// - /// - /// - public IFilter filter - { - get - { - return _filter; - } - - set - { - if (!Application.isPlaying) //编辑期间不支持!! - return; - - if (value == _filter) - return; - - if (_filter != null) - _filter.Dispose(); - - if (value != null && value.target != null) - value.target.filter = null; - - _filter = value; - if (_filter != null) - _filter.target = this; - } - } - - /// - /// - /// - public BlendMode blendMode - { - get { return _blendMode; } - set - { - _blendMode = value; - InvalidateBatchingState(); - - if (graphics == null) - { - if (_blendMode != BlendMode.Normal) - { - if (!Application.isPlaying) //Not supported in edit mode! - return; - - EnterPaintingMode(2, null); - paintingGraphics.blendMode = _blendMode; - } - else - LeavePaintingMode(2); - } - else - graphics.blendMode = _blendMode; - } - } - - /// - /// - /// - /// - /// - virtual public Rect GetBounds(DisplayObject targetSpace) - { - EnsureSizeCorrect(); - - if (targetSpace == this) // optimization - { - return _contentRect; - } - else if (targetSpace == parent && _rotation.z == 0) - { - return new Rect(cachedTransform.localPosition.x, -cachedTransform.localPosition.y, - _contentRect.width * cachedTransform.localScale.x, _contentRect.height * cachedTransform.localScale.y); - } - else - return TransformRect(_contentRect, targetSpace); - } - - internal DisplayObject InternalHitTest() - { - if (_visible && (!HitTestContext.forTouch || _touchable)) - return HitTest(); - else - return null; - } - - internal DisplayObject InternalHitTestMask() - { - if (_visible) - return HitTest(); - else - return null; - } - - virtual protected DisplayObject HitTest() - { - Rect rect = GetBounds(this); - if (rect.width == 0 || rect.height == 0) - return null; - - Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); - if (rect.Contains(localPoint)) - return this; - else - return null; - } - - /// - /// 将舞台坐标转换为本地坐标 - /// - /// - /// - public Vector2 GlobalToLocal(Vector2 point) - { - Container wsc = this.worldSpaceContainer; - - if (wsc != null)//I am in a world space - { - Camera cam = wsc.GetRenderCamera(); - Vector3 worldPoint; - Vector3 direction; - Vector3 screenPoint = new Vector3(); - screenPoint.x = point.x; - screenPoint.y = Screen.height - point.y; - - if (wsc.hitArea is MeshColliderHitTest) - { - Ray ray = cam.ScreenPointToRay(screenPoint); - RaycastHit hit; - if (((MeshColliderHitTest)wsc.hitArea).collider.Raycast(ray, out hit, 100)) - { - point = new Vector2(hit.textureCoord.x * _contentRect.width, (1 - hit.textureCoord.y) * _contentRect.height); - worldPoint = Stage.inst.cachedTransform.TransformPoint(point.x, -point.y, 0); - direction = Vector3.back; - } - else //当射线没有击中模型时,无法确定本地坐标 - return new Vector2(float.NaN, float.NaN); - } - else - { - screenPoint.z = cam.WorldToScreenPoint(this.cachedTransform.position).z; - worldPoint = cam.ScreenToWorldPoint(screenPoint); - Ray ray = cam.ScreenPointToRay(screenPoint); - direction = Vector3.zero - ray.direction; - } - - return this.WorldToLocal(worldPoint, direction); - } - else //I am in stage space - { - Vector3 worldPoint = Stage.inst.cachedTransform.TransformPoint(point.x, -point.y, 0); - return this.WorldToLocal(worldPoint, Vector3.back); - } - } - - /// - /// 将本地坐标转换为舞台坐标 - /// - /// - /// - public Vector2 LocalToGlobal(Vector2 point) - { - Container wsc = this.worldSpaceContainer; - - Vector3 worldPoint = this.cachedTransform.TransformPoint(point.x, -point.y, 0); - if (wsc != null) - { - if (wsc.hitArea is MeshColliderHitTest) //Not supported for UIPainter, use TransfromPoint instead. - return new Vector2(float.NaN, float.NaN); - - Vector3 screePoint = wsc.GetRenderCamera().WorldToScreenPoint(worldPoint); - return new Vector2(screePoint.x, Stage.inst.size.y - screePoint.y); - } - else - { - point = Stage.inst.cachedTransform.InverseTransformPoint(worldPoint); - point.y = -point.y; - return point; - } - } - - /// - /// 转换世界坐标点到等效的本地xy平面的点。等效的意思是他们在屏幕方向看到的位置一样。 - /// 返回的点是在对象的本地坐标空间,且z=0 - /// - /// - /// - /// - public Vector3 WorldToLocal(Vector3 worldPoint, Vector3 direction) - { - Vector3 localPoint = this.cachedTransform.InverseTransformPoint(worldPoint); - if (localPoint.z != 0) //如果对象绕x轴或y轴旋转过,或者对象是在透视相机,那么z值可能不为0, - { - //将世界坐标的摄影机方向在本地空间上投射,求出与xy平面的交点 - direction = this.cachedTransform.InverseTransformDirection(direction); - float distOnLine = Vector3.Dot(Vector3.zero - localPoint, Vector3.forward) / Vector3.Dot(direction, Vector3.forward); - if (float.IsInfinity(distOnLine)) - return Vector2.zero; - - localPoint = localPoint + direction * distOnLine; - } - else if (_vertexMatrix != null) - { - Vector3 center = _vertexMatrix.cameraPos; - center.z = 0; - center -= _vertexMatrix.matrix.MultiplyPoint(center); - - Matrix4x4 mm = _vertexMatrix.matrix.inverse; - - localPoint -= center; - localPoint = mm.MultiplyPoint(localPoint); - - Vector3 camPos = mm.MultiplyPoint(_vertexMatrix.cameraPos); - Vector3 vec = localPoint - camPos; - float lambda = -camPos.z / vec.z; - localPoint = camPos + lambda * vec; - localPoint.z = 0; - } - localPoint.y = -localPoint.y; - - return localPoint; - } - - /// - /// - /// - /// - /// - public Vector3 LocalToWorld(Vector3 localPoint) - { - localPoint.y = -localPoint.y; - if (_vertexMatrix != null) - { - Vector3 center = _vertexMatrix.cameraPos; - center.z = 0; - center -= _vertexMatrix.matrix.MultiplyPoint(center); - - localPoint = _vertexMatrix.matrix.MultiplyPoint(localPoint); - localPoint += center; - - Vector3 camPos = _vertexMatrix.cameraPos; - Vector3 vec = localPoint - camPos; - float lambda = -camPos.z / vec.z; - localPoint = camPos + lambda * vec; - localPoint.z = 0; - } - - return this.cachedTransform.TransformPoint(localPoint); - } - - /// - /// - /// - /// - /// null if to world space - /// - public Vector2 TransformPoint(Vector2 point, DisplayObject targetSpace) - { - if (targetSpace == this) - return point; - - point = LocalToWorld(point); - if (targetSpace != null) - point = targetSpace.WorldToLocal(point, Vector3.back); - - return point; - } - - /// - /// - /// - /// - /// null if to world space - /// - public Rect TransformRect(Rect rect, DisplayObject targetSpace) - { - if (targetSpace == this) - return rect; - - if (targetSpace == parent && _rotation.z == 0) // optimization - { - Vector3 vec = cachedTransform.localScale; - return new Rect((this.x + rect.x) * vec.x, (this.y + rect.y) * vec.y, - rect.width * vec.x, rect.height * vec.y); - } - else - { - Vector4 vec4 = new Vector4(float.MaxValue, float.MaxValue, float.MinValue, float.MinValue); - - TransformRectPoint(rect.xMin, rect.yMin, targetSpace, ref vec4); - TransformRectPoint(rect.xMax, rect.yMin, targetSpace, ref vec4); - TransformRectPoint(rect.xMin, rect.yMax, targetSpace, ref vec4); - TransformRectPoint(rect.xMax, rect.yMax, targetSpace, ref vec4); - - return Rect.MinMaxRect(vec4.x, vec4.y, vec4.z, vec4.w); - } - } - - protected void TransformRectPoint(float px, float py, DisplayObject targetSpace, ref Vector4 vec4) - { - Vector2 v = TransformPoint(new Vector2(px, py), targetSpace); - - if (vec4.x > v.x) vec4.x = v.x; - if (vec4.z < v.x) vec4.z = v.x; - if (vec4.y > v.y) vec4.y = v.y; - if (vec4.w < v.y) vec4.w = v.y; - } - - /// - /// - /// - public void RemoveFromParent() - { - if (parent != null) - parent.RemoveChild(this); - } - - /// - /// - /// - public void InvalidateBatchingState() - { - if (parent != null) - parent.InvalidateBatchingState(true); - } - - virtual public void Update(UpdateContext context) - { - if (_checkPixelPerfect != 0) - { - if (_rotation == Vector3.zero) - { - Vector3 v = cachedTransform.localPosition; - v.x = Mathf.Round(v.x); - v.y = Mathf.Round(v.y); - _pixelPerfectAdjustment = v - cachedTransform.localPosition; - if (_pixelPerfectAdjustment != Vector3.zero) - cachedTransform.localPosition = v; - } - _checkPixelPerfect = 0; - } - - if (graphics != null) - graphics.Update(context, context.alpha * _alpha, context.grayed | _grayed); - - if (_paintingMode != 0) - { - UpdatePainting(); - - //如果是容器,Capture要等到Container.Update的最后执行,因为容器中可能也有需要Capture的内容,要等他们完成后再进行容器的Capture。 - if (!(this is Container)) - { - if ((_flags & Flags.CacheAsBitmap) == 0 || _paintingInfo.flag != 2) - UpdateContext.OnEnd += _paintingInfo.captureDelegate; - } - - paintingGraphics.Update(context, 1, false); - } - - if (_filter != null) - _filter.Update(); - - Stats.ObjectCount++; - } - - void UpdatePainting() - { - NTexture paintingTexture = paintingGraphics.texture; - if (paintingTexture != null && paintingTexture.disposed) //Texture可能已被Stage.MonitorTexture销毁 - { - paintingTexture = null; - _paintingInfo.flag = 1; - } - - if (_paintingInfo.flag == 1) - { - _paintingInfo.flag = 0; - - //从优化考虑,决定使用绘画模式的容器都需要明确指定大小,而不是自动计算包围。这在UI使用上并没有问题,因为组件总是有固定大小的 - Margin extend = _paintingInfo.extend; - paintingGraphics.contentRect = new Rect(-extend.left, -extend.top, _contentRect.width + extend.left + extend.right, _contentRect.height + extend.top + extend.bottom); - int textureWidth = Mathf.RoundToInt(paintingGraphics.contentRect.width * _paintingInfo.scale); - int textureHeight = Mathf.RoundToInt(paintingGraphics.contentRect.height * _paintingInfo.scale); - if (paintingTexture == null || paintingTexture.width != textureWidth || paintingTexture.height != textureHeight) - { - if (paintingTexture != null) - paintingTexture.Dispose(); - if (textureWidth > 0 && textureHeight > 0) - { - paintingTexture = new NTexture(CaptureCamera.CreateRenderTexture(textureWidth, textureHeight, UIConfig.depthSupportForPaintingMode)); - Stage.inst.MonitorTexture(paintingTexture); - } - else - paintingTexture = null; - paintingGraphics.texture = paintingTexture; - } - } - - if (paintingTexture != null) - paintingTexture.lastActive = Time.time; - } - - void Capture() - { - if (paintingGraphics.texture == null) - return; - - Vector2 offset = new Vector2(_paintingInfo.extend.left, _paintingInfo.extend.top); - CaptureCamera.Capture(this, (RenderTexture)paintingGraphics.texture.nativeTexture, paintingGraphics.contentRect.height, offset); - - _paintingInfo.flag = 2; //2表示已完成一次Capture - if (onPaint != null) - onPaint(); - } - - /// - /// 为对象设置一个默认的父Transform。当对象不在显示列表里时,它的GameObject挂到哪里。 - /// - public Transform home - { - get { return _home; } - set - { - _home = value; - if (value != null && cachedTransform.parent == null) - cachedTransform.SetParent(value, false); - } - } - - void UpdateHierarchy() - { - if ((_flags & Flags.GameObjectDisposed) != 0) - return; - - if ((_flags & Flags.UserGameObject) != 0) - { - //we dont change transform parent of this object - if (gameObject != null) - { - if (parent != null && visible) - gameObject.SetActive(true); - else - gameObject.SetActive(false); - } - } - else if (parent != null) - { - cachedTransform.SetParent(parent.cachedTransform, false); - - if (_visible) - gameObject.SetActive(true); - - int layerValue = parent.gameObject.layer; - if (parent._paintingMode != 0) - layerValue = CaptureCamera.hiddenLayer; - SetLayer(layerValue, true); - } - else if ((_flags & Flags.Disposed) == 0 && this.gameObject != null && !StageEngine.beingQuit) - { - if (Application.isPlaying) - { - if (gOwner == null || gOwner.parent == null)//如果gOwner还有parent的话,说明只是暂时的隐藏 - { - cachedTransform.SetParent(_home, false); - if (_home == null) - UnityEngine.Object.DontDestroyOnLoad(this.gameObject); - } - } - - gameObject.SetActive(false); - } - } - - virtual protected bool SetLayer(int value, bool fromParent) - { - if ((_flags & Flags.LayerSet) != 0) //setted - { - if (fromParent) - return false; - } - else if ((_flags & Flags.LayerFromParent) != 0) //inherit from parent - { - if (!fromParent) - _flags |= Flags.LayerSet; - } - else - { - if (fromParent) - _flags |= Flags.LayerFromParent; - else - _flags |= Flags.LayerSet; - } - - if (_paintingMode > 0) - paintingGraphics.gameObject.layer = value; - else if (gameObject.layer != value) - { - _SetLayerDirect(value); - - if (this is Container) - { - int cnt = ((Container)this).numChildren; - for (int i = 0; i < cnt; i++) - { - DisplayObject child = ((Container)this).GetChildAt(i); - child.SetLayer(value, true); - } - } - } - - return true; - } - - virtual internal void _SetLayerDirect(int value) - { - gameObject.layer = value; - - if (graphics != null && graphics.subInstances != null) - { - foreach (var g in graphics.subInstances) - { - g.gameObject.layer = value; - } - } - } - - virtual public void Dispose() - { - if ((_flags & Flags.Disposed) != 0) - return; - - _flags |= Flags.Disposed; - RemoveFromParent(); - RemoveEventListeners(); - if (graphics != null) - graphics.Dispose(); - if (_filter != null) - _filter.Dispose(); - if (paintingGraphics != null) - { - if (paintingGraphics.texture != null) - paintingGraphics.texture.Dispose(); - - paintingGraphics.Dispose(); - if (paintingGraphics.gameObject != this.gameObject) - { - if (Application.isPlaying) - UnityEngine.Object.Destroy(paintingGraphics.gameObject); - else - UnityEngine.Object.DestroyImmediate(paintingGraphics.gameObject); - } - } - DestroyGameObject(); - } - - internal void DisplayDisposedWarning() - { - if ((_flags & Flags.DisposedWarning) == 0) - { - _flags |= Flags.DisposedWarning; - - StringBuilder sb = new StringBuilder(); - sb.Append("DisplayObject is still in use but GameObject was disposed. ("); - if (gOwner != null) - { - sb.Append("type=").Append(gOwner.GetType().Name).Append(", x=").Append(gOwner.x).Append(", y=").Append(gOwner.y).Append(", name=").Append(gOwner.name); - if (gOwner.packageItem != null) - sb.Append(", res=" + gOwner.packageItem.name); - } - else - { - sb.Append("id=").Append(id).Append(", type=").Append(this.GetType().Name).Append(", name=").Append(name); - } - sb.Append(")"); - Debug.LogError(sb.ToString()); - } - } - - BatchElement _batchElement; - virtual public BatchElement AddToBatch(List batchElements, bool force) - { - if (graphics != null || force) - { - if (_batchElement == null) - _batchElement = new BatchElement(this, null); - _batchElement.material = material; - _batchElement.breakBatch = (_flags & Flags.SkipBatching) != 0; - batchElements.Add(_batchElement); - - if (graphics != null && graphics.subInstances != null) - { - foreach (var g in graphics.subInstances) - { - var m = g.material; - if (m != null) - { - var subBatchElement = g._batchElement; - if (subBatchElement == null) - subBatchElement = new BatchElement(g, _batchElement.bounds); - subBatchElement.material = m; - batchElements.Add(subBatchElement); - } - } - } - - return _batchElement; - } - else - return null; - } - - protected internal class PaintingInfo - { - public Action captureDelegate; //缓存这个delegate,可以防止Capture状态下每帧104B的GC - public Margin extend; - public float scale; - public int flag; - } - - [Flags] - public enum Flags - { - Disposed = 1, - UserGameObject = 2, - TouchDisabled = 4, - OutlineChanged = 8, - UpdatingSize = 0x10, - WidthChanged = 0x20, - HeightChanged = 0x40, - PixelPerfect = 0x80, - LayerSet = 0x100, - LayerFromParent = 0x200, - NotFocusable = 0x400, - TabStop = 0x800, - TabStopChildren = 0x1000, - FairyBatching = 0x2000, - BatchingRequested = 0x4000, - BatchingRoot = 0x8000, - SkipBatching = 0x10000, - CacheAsBitmap = 0x20000, - GameObjectDisposed = 0x40000, - DisposedWarning = 0x80000 - } - } - - /// - /// - /// - public class DisplayObjectInfo : MonoBehaviour - { - /// - /// - /// /// - [System.NonSerialized] - public DisplayObject displayObject; - - private void OnDestroy() - { - if (displayObject != null) - displayObject._flags |= DisplayObject.Flags.GameObjectDisposed; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs.meta deleted file mode 100644 index 5a46488..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 24d09ba8cf3faa74f8dcd1c86ad38588 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs b/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs deleted file mode 100644 index f9e082f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs +++ /dev/null @@ -1,404 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace FairyGUI -{ - /// - /// GoWrapper is class for wrapping common gameobject into UI display list. - /// - public class GoWrapper : DisplayObject - { - [Obsolete("No need to manually set this flag anymore, coz it will be handled automatically.")] - public bool supportStencil; - - public event Action onUpdate; - public Action> customCloneMaterials; - public Action customRecoverMaterials; - - protected GameObject _wrapTarget; - protected List _renderers; - protected Dictionary _materialsBackup; - protected Canvas _canvas; - protected bool _cloneMaterial; - protected bool _shouldCloneMaterial; - - protected struct RendererInfo - { - public Renderer renderer; - public Material[] materials; - public int sortingOrder; - } - - protected static List helperTransformList = new List(); - - /// - /// - /// - public GoWrapper() - { - _renderers = new List(); - _materialsBackup = new Dictionary(); - - CreateGameObject("GoWrapper"); - } - - /// - /// - /// - /// 包装对象。 - public GoWrapper(GameObject go) : this() - { - SetWrapTarget(go, false); - } - - /// - /// 设置包装对象。注意如果原来有包装对象,设置新的包装对象后,原来的包装对象只会被删除引用,但不会被销毁。 - /// 对象包含的所有材质不会被复制,如果材质已经是公用的,这可能影响到其他对象。如果希望自动复制,改为使用SetWrapTarget(target, true)设置。 - /// - public GameObject wrapTarget - { - get { return _wrapTarget; } - set { SetWrapTarget(value, false); } - } - - [Obsolete("setWrapTarget is deprecated. Use SetWrapTarget instead.")] - public void setWrapTarget(GameObject target, bool cloneMaterial) - { - SetWrapTarget(target, cloneMaterial); - } - - /// - /// 设置包装对象。注意如果原来有包装对象,设置新的包装对象后,原来的包装对象只会被删除引用,但不会被销毁。 - /// - /// - /// 如果true,则复制材质,否则直接使用sharedMaterial。 - public void SetWrapTarget(GameObject target, bool cloneMaterial) - { - InvalidateBatchingState(); - - RecoverMaterials(); - - _cloneMaterial = cloneMaterial; - if (_wrapTarget != null) - _wrapTarget.transform.SetParent(null, false); - - _canvas = null; - _wrapTarget = target; - _shouldCloneMaterial = false; - _renderers.Clear(); - - if (_wrapTarget != null) - { - _wrapTarget.transform.SetParent(this.cachedTransform, false); - _canvas = _wrapTarget.GetComponent(); - if (_canvas != null) - { - _canvas.renderMode = RenderMode.WorldSpace; - _canvas.worldCamera = StageCamera.main; - _canvas.overrideSorting = true; - - RectTransform rt = _canvas.GetComponent(); - rt.pivot = new Vector2(0, 1); - rt.position = new Vector3(0, 0, 0); - this.SetSize(rt.rect.width, rt.rect.height); - } - else - { - CacheRenderers(); - this.SetSize(0, 0); - } - - SetGoLayers(this.layer); - } - } - - override internal void _SetLayerDirect(int value) - { - gameObject.layer = value; - if (_wrapTarget != null)//这个if是为了在GoWrapper里使用模糊效果 - { - _wrapTarget.layer = value; - foreach (Transform tf in _wrapTarget.GetComponentsInChildren(true)) - { - tf.gameObject.layer = value; - } - } - } - - /// - /// GoWrapper will cache all renderers of your gameobject on constructor. - /// If your gameobject change laterly, call this function to update the cache. - /// GoWrapper会在构造函数里查询你的gameobject所有的Renderer并保存。如果你的gameobject - /// 后续发生了改变,调用这个函数通知GoWrapper重新查询和保存。 - /// - public void CacheRenderers() - { - if (_canvas != null) - return; - - RecoverMaterials(); - _renderers.Clear(); - - Renderer[] items = _wrapTarget.GetComponentsInChildren(true); - - int cnt = items.Length; - _renderers.Capacity = cnt; - for (int i = 0; i < cnt; i++) - { - Renderer r = items[i]; - Material[] mats = r.sharedMaterials; - RendererInfo ri = new RendererInfo() - { - renderer = r, - materials = mats, - sortingOrder = r.sortingOrder - }; - _renderers.Add(ri); - - if (!_cloneMaterial && mats != null - && ((r is SkinnedMeshRenderer) || (r is MeshRenderer))) - { - int mcnt = mats.Length; - for (int j = 0; j < mcnt; j++) - { - Material mat = mats[j]; - if (mat != null && mat.renderQueue != 3000) //Set the object rendering in Transparent Queue as UI objects - mat.renderQueue = 3000; - } - } - } - _renderers.Sort((RendererInfo c1, RendererInfo c2) => - { - return c1.sortingOrder - c2.sortingOrder; - }); - - _shouldCloneMaterial = _cloneMaterial; - } - - void CloneMaterials() - { - _shouldCloneMaterial = false; - - int cnt = _renderers.Count; - for (int i = 0; i < cnt; i++) - { - RendererInfo ri = _renderers[i]; - Material[] mats = ri.materials; - if (mats == null) - continue; - - bool shouldSetRQ = (ri.renderer is SkinnedMeshRenderer) || (ri.renderer is MeshRenderer); - - int mcnt = mats.Length; - for (int j = 0; j < mcnt; j++) - { - Material mat = mats[j]; - if (mat == null) - continue; - - //确保相同的材质不会复制两次 - Material newMat; - if (!_materialsBackup.TryGetValue(mat, out newMat)) - { - newMat = new Material(mat); - _materialsBackup[mat] = newMat; - } - mats[j] = newMat; - - if (shouldSetRQ && mat.renderQueue != 3000) //Set the object rendering in Transparent Queue as UI objects - newMat.renderQueue = 3000; - } - - if (customCloneMaterials != null) - customCloneMaterials.Invoke(_materialsBackup); - else if (ri.renderer != null) - ri.renderer.sharedMaterials = mats; - } - } - - void RecoverMaterials() - { - if (_materialsBackup.Count == 0) - return; - - int cnt = _renderers.Count; - for (int i = 0; i < cnt; i++) - { - RendererInfo ri = _renderers[i]; - if (ri.renderer == null) - continue; - - Material[] mats = ri.materials; - if (mats == null) - continue; - - int mcnt = mats.Length; - for (int j = 0; j < mcnt; j++) - { - Material mat = mats[j]; - - foreach (KeyValuePair kv in _materialsBackup) - { - if (kv.Value == mat) - mats[j] = kv.Key; - } - } - - if (customRecoverMaterials != null) - customRecoverMaterials.Invoke(); - else - ri.renderer.sharedMaterials = mats; - } - - foreach (KeyValuePair kv in _materialsBackup) - Material.DestroyImmediate(kv.Value); - - _materialsBackup.Clear(); - } - - public override void SetRenderingOrder(UpdateContext context, bool inBatch) - { - base.SetRenderingOrder(context, inBatch); - - int value = base.renderingOrder; - - if (_canvas != null) - _canvas.sortingOrder = value; - else - { - int cnt = _renderers.Count; - for (int i = 0; i < cnt; i++) - { - RendererInfo ri = _renderers[i]; - if (ri.renderer != null) - { - if (i != 0 && _renderers[i].sortingOrder != _renderers[i - 1].sortingOrder) - value = context.renderingOrder++; - ri.renderer.sortingOrder = value; - } - } - } - } - - public override BatchElement AddToBatch(List batchElements, bool force) - { - if (this._wrapTarget != null) - { - BatchElement batchElement = base.AddToBatch(batchElements, true); - batchElement.breakBatch = true; - return batchElement; - } - else - return null; - } - - override protected bool SetLayer(int value, bool fromParent) - { - if (base.SetLayer(value, fromParent)) - { - SetGoLayers(value); - return true; - } - else - return false; - } - - protected void SetGoLayers(int layer) - { - if (_wrapTarget == null) - return; - - _wrapTarget.GetComponentsInChildren(true, helperTransformList); - int cnt = helperTransformList.Count; - for (int i = 0; i < cnt; i++) - helperTransformList[i].gameObject.layer = layer; - helperTransformList.Clear(); - } - - override public void Update(UpdateContext context) - { - if (onUpdate != null) - onUpdate(context); - - if (_shouldCloneMaterial) - CloneMaterials(); - - ApplyClipping(context); - - base.Update(context); - } - - private List helperMaterials = new List(); - virtual protected void ApplyClipping(UpdateContext context) - { -#if UNITY_2018_2_OR_NEWER - int cnt = _renderers.Count; - for (int i = 0; i < cnt; i++) - { - Renderer renderer = _renderers[i].renderer; - if (renderer == null) - continue; - - if (customCloneMaterials != null) - helperMaterials.AddRange(_materialsBackup.Values); - else - renderer.GetSharedMaterials(helperMaterials); - - int cnt2 = helperMaterials.Count; - for (int j = 0; j < cnt2; j++) - { - Material mat = helperMaterials[j]; - if (mat != null) - context.ApplyClippingProperties(mat, false); - } - - helperMaterials.Clear(); - } -#else - int cnt = _renderers.Count; - for (int i = 0; i < cnt; i++) - { - Material[] mats = _renderers[i].materials; - if (mats == null) - continue; - - int cnt2 = mats.Length; - for (int j = 0; j < cnt2; j++) - { - Material mat = mats[j]; - if (mat != null) - context.ApplyClippingProperties(mat, false); - } - } -#endif - } - - public override void Dispose() - { - if ((_flags & Flags.Disposed) != 0) - return; - - if (_wrapTarget != null) - { - UnityEngine.Object.Destroy(_wrapTarget); - _wrapTarget = null; - - if (_materialsBackup.Count > 0) - { //如果有备份,说明材质是复制出来的,应该删除 - foreach (KeyValuePair kv in _materialsBackup) - Material.DestroyImmediate(kv.Value); - } - } - - _renderers = null; - _materialsBackup = null; - _canvas = null; - customCloneMaterials = null; - customRecoverMaterials = null; - - base.Dispose(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs.meta deleted file mode 100644 index b6da9eb..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 796d0bdebe7368c47adfdf04a1abdfc6 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest.meta deleted file mode 100644 index 2f781c2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 736ceb6630254bd42b41568b387cbcbe -folderAsset: yes -timeCreated: 1461773297 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs deleted file mode 100644 index cc7f491..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class ColliderHitTest : IHitTest - { - /// - /// - /// - public Collider collider; - - /// - /// - /// - /// - /// - /// - virtual public bool HitTest(Rect contentRect, Vector2 localPoint) - { - RaycastHit hit; - if (!HitTestContext.GetRaycastHitFromCache(HitTestContext.camera, out hit)) - return false; - - if (hit.collider != collider) - return false; - - return true; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs.meta deleted file mode 100644 index e1da943..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ffed53edbd969f3439a942ca847cd43d -timeCreated: 1461773299 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs deleted file mode 100644 index df75b74..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class HitTestContext - { - //set before hit test - public static Vector3 screenPoint; - public static Vector3 worldPoint; - public static Vector3 direction; - public static bool forTouch; - public static Camera camera; - - public static int layerMask = -1; - public static float maxDistance = Mathf.Infinity; - - public static Camera cachedMainCamera; - - static Dictionary raycastHits = new Dictionary(); - - /// - /// - /// - /// - /// - /// - public static bool GetRaycastHitFromCache(Camera camera, out RaycastHit hit) - { - RaycastHit? hitRef; - if (!raycastHits.TryGetValue(camera, out hitRef)) - { - Ray ray = camera.ScreenPointToRay(screenPoint); - if (Physics.Raycast(ray, out hit, maxDistance, layerMask)) - { - raycastHits[camera] = hit; - return true; - } - else - { - raycastHits[camera] = null; - return false; - } - } - else if (hitRef == null) - { - hit = new RaycastHit(); - return false; - } - else - { - hit = (RaycastHit)hitRef; - return true; - } - } - - /// - /// - /// - /// - /// - public static void CacheRaycastHit(Camera camera, ref RaycastHit hit) - { - raycastHits[camera] = hit; - } - - /// - /// - /// - public static void ClearRaycastHitCache() - { - raycastHits.Clear(); - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - cachedMainCamera = null; - raycastHits.Clear(); - } -#endif - } - -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs.meta deleted file mode 100644 index e9b2a3b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 19869d6307205b84a81aef6031ba1f33 -timeCreated: 1461750571 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs deleted file mode 100644 index 6b57e5f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs +++ /dev/null @@ -1,27 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public enum HitTestMode - { - Default, - Raycast - } - - /// - /// - /// - public interface IHitTest - { - /// - /// - /// - /// - /// - /// - bool HitTest(Rect contentRect, Vector2 localPoint); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs.meta deleted file mode 100644 index 33d2e4c..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8bbadf82645501c41957c257ab020708 -timeCreated: 1461853133 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs deleted file mode 100644 index 00d8644..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs +++ /dev/null @@ -1,43 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class MeshColliderHitTest : ColliderHitTest - { - public Vector2 lastHit; - - /// - /// - /// - /// - public MeshColliderHitTest(MeshCollider collider) - { - this.collider = collider; - } - - /// - /// - /// - /// - /// - /// - override public bool HitTest(Rect contentRect, Vector2 localPoint) - { - RaycastHit hit; - if (!HitTestContext.GetRaycastHitFromCache(HitTestContext.camera, out hit)) - return false; - - if (hit.collider != collider) - return false; - - lastHit = new Vector2(hit.textureCoord.x * contentRect.width, (1 - hit.textureCoord.y) * contentRect.height); - HitTestContext.direction = Vector3.back; - HitTestContext.worldPoint = StageCamera.main.ScreenToWorldPoint(new Vector2(lastHit.x, Screen.height - lastHit.y)); - - return true; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs.meta deleted file mode 100644 index fe7f491..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 6d0a2fa0c7008814795dc7f5f3bd4b19 -timeCreated: 1461750571 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs deleted file mode 100644 index f4a719c..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs +++ /dev/null @@ -1,82 +0,0 @@ -using FairyGUI.Utils; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class PixelHitTestData - { - public int pixelWidth; - public float scale; - public byte[] pixels; - public int pixelsLength; - public int pixelsOffset; - - public void Load(ByteBuffer ba) - { - ba.ReadInt(); - pixelWidth = ba.ReadInt(); - scale = 1.0f / ba.ReadByte(); - pixels = ba.buffer; - pixelsLength = ba.ReadInt(); - pixelsOffset = ba.position; - ba.Skip(pixelsLength); - } - } - - /// - /// - /// - public class PixelHitTest : IHitTest - { - public int offsetX; - public int offsetY; - public float sourceWidth; - public float sourceHeight; - - PixelHitTestData _data; - - /// - /// - /// - /// - /// - /// - public PixelHitTest(PixelHitTestData data, int offsetX, int offsetY, float sourceWidth, float sourceHeight) - { - _data = data; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.sourceWidth = sourceWidth; - this.sourceHeight = sourceHeight; - } - - /// - /// - /// - /// - /// - /// - public bool HitTest(Rect contentRect, Vector2 localPoint) - { - if (!contentRect.Contains(localPoint)) - return false; - - int x = Mathf.FloorToInt((localPoint.x * sourceWidth / contentRect.width - offsetX) * _data.scale); - int y = Mathf.FloorToInt((localPoint.y * sourceHeight / contentRect.height - offsetY) * _data.scale); - if (x < 0 || y < 0 || x >= _data.pixelWidth) - return false; - - int pos = y * _data.pixelWidth + x; - int pos2 = pos / 8; - int pos3 = pos % 8; - - if (pos2 >= 0 && pos2 < _data.pixelsLength) - return ((_data.pixels[_data.pixelsOffset + pos2] >> pos3) & 0x1) > 0; - else - return false; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs.meta deleted file mode 100644 index 1ab9143..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 98cb65df7f5853c4b8e3719a28d4d81f -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs deleted file mode 100644 index 80e9f1f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class RectHitTest : IHitTest - { - /// - /// - /// - public Rect rect; - - /// - /// - /// - /// - /// - /// - public bool HitTest(Rect contentRect, Vector2 localPoint) - { - return rect.Contains(localPoint); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs.meta deleted file mode 100644 index 3cc4f1d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 92768f03d9b8dea47b1649613c4d0de7 -timeCreated: 1474896442 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs deleted file mode 100644 index 08d6cf4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class ShapeHitTest : IHitTest - { - /// - /// - /// - public DisplayObject shape; - - public ShapeHitTest(DisplayObject obj) - { - shape = obj; - } - - /// - /// - /// - /// - /// - /// - public bool HitTest(Rect contentRect, Vector2 localPoint) - { - if (shape.graphics == null) - return false; - - if (shape.parent != null) - { - localPoint = shape.parent.TransformPoint(localPoint, shape); - contentRect.size = shape.size; - } - - IHitTest ht = shape.graphics.meshFactory as IHitTest; - if (ht == null) - return false; - - return ht.HitTest(contentRect, localPoint); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs.meta deleted file mode 100644 index 614d509..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0cd85528f2766431cafc5282f956c060 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs deleted file mode 100644 index 3125aa4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs +++ /dev/null @@ -1,436 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class Image : DisplayObject, IMeshFactory - { - protected Rect? _scale9Grid; - protected bool _scaleByTile; - protected Vector2 _textureScale; - protected int _tileGridIndice; - protected FillMesh _fillMesh; - - public Image() : this(null) - { - } - - /// - /// - /// - /// - public Image(NTexture texture) - : base() - { - _flags |= Flags.TouchDisabled; - - CreateGameObject("Image"); - graphics = new NGraphics(gameObject); - graphics.shader = ShaderConfig.imageShader; - graphics.meshFactory = this; - - _textureScale = Vector2.one; - - if (texture != null) - UpdateTexture(texture); - } - - /// - /// - /// - public NTexture texture - { - get { return graphics.texture; } - set - { - UpdateTexture(value); - } - } - - public Vector2 textureScale - { - get { return _textureScale; } - set - { - _textureScale = value; - graphics.SetMeshDirty(); - } - } - - /// - /// - /// - public Color color - { - get - { - return graphics.color; - } - set - { - graphics.color = value; - graphics.Tint(); - } - } - - /// - /// - /// - public FillMethod fillMethod - { - get { return _fillMesh != null ? _fillMesh.method : FillMethod.None; } - set - { - if (_fillMesh == null) - { - if (value == FillMethod.None) - return; - - _fillMesh = new FillMesh(); - } - if (_fillMesh.method != value) - { - _fillMesh.method = value; - graphics.SetMeshDirty(); - } - } - } - - /// - /// - /// - public int fillOrigin - { - get { return _fillMesh != null ? _fillMesh.origin : 0; } - set - { - if (_fillMesh == null) - _fillMesh = new FillMesh(); - - if (_fillMesh.origin != value) - { - _fillMesh.origin = value; - graphics.SetMeshDirty(); - } - } - } - - /// - /// - /// - public bool fillClockwise - { - get { return _fillMesh != null ? _fillMesh.clockwise : true; } - set - { - if (_fillMesh == null) - _fillMesh = new FillMesh(); - - if (_fillMesh.clockwise != value) - { - _fillMesh.clockwise = value; - graphics.SetMeshDirty(); - } - } - } - - /// - /// - /// - public float fillAmount - { - get { return _fillMesh != null ? _fillMesh.amount : 0; } - set - { - if (_fillMesh == null) - _fillMesh = new FillMesh(); - - if (_fillMesh.amount != value) - { - _fillMesh.amount = value; - graphics.SetMeshDirty(); - } - } - } - - /// - /// - /// - public Rect? scale9Grid - { - get { return _scale9Grid; } - set - { - if (_scale9Grid != value) - { - _scale9Grid = value; - graphics.SetMeshDirty(); - } - } - } - - /// - /// - /// - public bool scaleByTile - { - get { return _scaleByTile; } - set - { - if (_scaleByTile != value) - { - _scaleByTile = value; - graphics.SetMeshDirty(); - } - } - } - - /// - /// - /// - public int tileGridIndice - { - get { return _tileGridIndice; } - set - { - if (_tileGridIndice != value) - { - _tileGridIndice = value; - graphics.SetMeshDirty(); - } - } - } - - /// - /// - /// - public void SetNativeSize() - { - if (graphics.texture != null) - SetSize(graphics.texture.width, graphics.texture.height); - else - SetSize(0, 0); - } - - virtual protected void UpdateTexture(NTexture value) - { - if (value == graphics.texture) - return; - - graphics.texture = value; - _textureScale = Vector2.one; - if (_contentRect.width == 0) - SetNativeSize(); - InvalidateBatchingState(); - } - - public void OnPopulateMesh(VertexBuffer vb) - { - if (_fillMesh != null && _fillMesh.method != FillMethod.None) - { - _fillMesh.OnPopulateMesh(vb); - } - else if (_scaleByTile) - { - NTexture texture = graphics.texture; - if (texture.root == texture - && texture.nativeTexture != null - && texture.nativeTexture.wrapMode == TextureWrapMode.Repeat) - { - Rect uvRect = vb.uvRect; - uvRect.width *= vb.contentRect.width / texture.width * _textureScale.x; - uvRect.height *= vb.contentRect.height / texture.height * _textureScale.y; - - vb.AddQuad(vb.contentRect, vb.vertexColor, uvRect); - vb.AddTriangles(); - } - else - { - Rect contentRect = vb.contentRect; - contentRect.width *= _textureScale.x; - contentRect.height *= _textureScale.y; - - TileFill(vb, contentRect, vb.uvRect, texture.width, texture.height); - vb.AddTriangles(); - } - } - else if (_scale9Grid != null) - { - SliceFill(vb); - } - else - graphics.OnPopulateMesh(vb); - } - - static int[] TRIANGLES_9_GRID = new int[] { - 4,0,1,1,5,4, - 5,1,2,2,6,5, - 6,2,3,3,7,6, - 8,4,5,5,9,8, - 9,5,6,6,10,9, - 10,6,7,7,11,10, - 12,8,9,9,13,12, - 13,9,10,10,14,13, - 14,10,11, - 11,15,14 - }; - - static int[] gridTileIndice = new int[] { -1, 0, -1, 2, 4, 3, -1, 1, -1 }; - static float[] gridX = new float[4]; - static float[] gridY = new float[4]; - static float[] gridTexX = new float[4]; - static float[] gridTexY = new float[4]; - - public void SliceFill(VertexBuffer vb) - { - NTexture texture = graphics.texture; - Rect gridRect = (Rect)_scale9Grid; - Rect contentRect = vb.contentRect; - contentRect.width *= _textureScale.x; - contentRect.height *= _textureScale.y; - Rect uvRect = vb.uvRect; - - float sourceW = texture.width; - float sourceH = texture.height; - - if (graphics.flip != FlipType.None) - { - if (graphics.flip == FlipType.Horizontal || graphics.flip == FlipType.Both) - { - gridRect.x = sourceW - gridRect.xMax; - gridRect.xMax = gridRect.x + gridRect.width; - } - - if (graphics.flip == FlipType.Vertical || graphics.flip == FlipType.Both) - { - gridRect.y = sourceH - gridRect.yMax; - gridRect.yMax = gridRect.y + gridRect.height; - } - } - - float sx = uvRect.width / sourceW; - float sy = uvRect.height / sourceH; - float xMax = uvRect.xMax; - float yMax = uvRect.yMax; - float xMax2 = gridRect.xMax; - float yMax2 = gridRect.yMax; - - gridTexX[0] = uvRect.x; - gridTexX[1] = uvRect.x + gridRect.x * sx; - gridTexX[2] = uvRect.x + xMax2 * sx; - gridTexX[3] = xMax; - gridTexY[0] = yMax; - gridTexY[1] = yMax - gridRect.y * sy; - gridTexY[2] = yMax - yMax2 * sy; - gridTexY[3] = uvRect.y; - - if (contentRect.width >= (sourceW - gridRect.width)) - { - gridX[1] = gridRect.x; - gridX[2] = contentRect.width - (sourceW - xMax2); - gridX[3] = contentRect.width; - } - else - { - float tmp = gridRect.x / (sourceW - xMax2); - tmp = contentRect.width * tmp / (1 + tmp); - gridX[1] = tmp; - gridX[2] = tmp; - gridX[3] = contentRect.width; - } - - if (contentRect.height >= (sourceH - gridRect.height)) - { - gridY[1] = gridRect.y; - gridY[2] = contentRect.height - (sourceH - yMax2); - gridY[3] = contentRect.height; - } - else - { - float tmp = gridRect.y / (sourceH - yMax2); - tmp = contentRect.height * tmp / (1 + tmp); - gridY[1] = tmp; - gridY[2] = tmp; - gridY[3] = contentRect.height; - } - - if (_tileGridIndice == 0) - { - for (int cy = 0; cy < 4; cy++) - { - for (int cx = 0; cx < 4; cx++) - vb.AddVert(new Vector2(gridX[cx] / _textureScale.x, gridY[cy] / _textureScale.y), vb.vertexColor, new Vector2(gridTexX[cx], gridTexY[cy])); - } - vb.AddTriangles(TRIANGLES_9_GRID); - } - else - { - Rect drawRect; - Rect texRect; - int row, col; - int part; - - for (int pi = 0; pi < 9; pi++) - { - col = pi % 3; - row = pi / 3; - part = gridTileIndice[pi]; - drawRect = Rect.MinMaxRect(gridX[col], gridY[row], gridX[col + 1], gridY[row + 1]); - texRect = Rect.MinMaxRect(gridTexX[col], gridTexY[row + 1], gridTexX[col + 1], gridTexY[row]); - - if (part != -1 && (_tileGridIndice & (1 << part)) != 0) - { - TileFill(vb, drawRect, texRect, - (part == 0 || part == 1 || part == 4) ? gridRect.width : drawRect.width, - (part == 2 || part == 3 || part == 4) ? gridRect.height : drawRect.height); - } - else - { - drawRect.x /= _textureScale.x; - drawRect.y /= _textureScale.y; - drawRect.width /= _textureScale.x; - drawRect.height /= _textureScale.y; - - vb.AddQuad(drawRect, vb.vertexColor, texRect); - } - } - - vb.AddTriangles(); - } - } - - void TileFill(VertexBuffer vb, Rect contentRect, Rect uvRect, float sourceW, float sourceH) - { - int hc = Mathf.CeilToInt(contentRect.width / sourceW); - int vc = Mathf.CeilToInt(contentRect.height / sourceH); - float tailWidth = contentRect.width - (hc - 1) * sourceW; - float tailHeight = contentRect.height - (vc - 1) * sourceH; - float xMax = uvRect.xMax; - float yMax = uvRect.yMax; - - for (int i = 0; i < hc; i++) - { - for (int j = 0; j < vc; j++) - { - Rect uvTmp = uvRect; - if (i == hc - 1) - uvTmp.xMax = Mathf.Lerp(uvRect.x, xMax, tailWidth / sourceW); - if (j == vc - 1) - uvTmp.yMin = Mathf.Lerp(uvRect.y, yMax, 1 - tailHeight / sourceH); - - Rect drawRect = new Rect(contentRect.x + i * sourceW, contentRect.y + j * sourceH, - i == (hc - 1) ? tailWidth : sourceW, j == (vc - 1) ? tailHeight : sourceH); - - drawRect.x /= _textureScale.x; - drawRect.y /= _textureScale.y; - drawRect.width /= _textureScale.x; - drawRect.height /= _textureScale.y; - - vb.AddQuad(drawRect, vb.vertexColor, uvTmp); - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs.meta deleted file mode 100644 index 1171036..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 948ec8822e3c52942bc6e7f6265b264c -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs b/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs deleted file mode 100644 index a60d3cf..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using Object = UnityEngine.Object; - -namespace FairyGUI -{ - [Flags] - public enum MaterialFlags - { - Clipped = 1, - SoftClipped = 2, - StencilTest = 4, - AlphaMask = 8, - Grayed = 16, - ColorFilter = 32 - } - - /// - /// Every texture-shader combination has a MaterialManager. - /// - public class MaterialManager - { - public event Action onCreateNewMaterial; - - public bool firstMaterialInFrame; - - NTexture _texture; - Shader _shader; - List _addKeywords; - Dictionary> _materials; - bool _combineTexture; - - class MaterialRef - { - public Material material; - public int frame; - public BlendMode blendMode; - public uint group; - } - - const int internalKeywordsCount = 6; - static string[] internalKeywords = new[] { "CLIPPED", "SOFT_CLIPPED", null, "ALPHA_MASK", "GRAYED", "COLOR_FILTER" }; - - /// - /// - /// - /// - /// - internal MaterialManager(NTexture texture, Shader shader) - { - _texture = texture; - _shader = shader; - _materials = new Dictionary>(); - _combineTexture = texture.alphaTexture != null; - } - - /// - /// - /// - /// - /// - public int GetFlagsByKeywords(IList keywords) - { - if (_addKeywords == null) - _addKeywords = new List(); - - int flags = 0; - for (int i = 0; i < keywords.Count; i++) - { - string s = keywords[i]; - if (string.IsNullOrEmpty(s)) - continue; - int j = _addKeywords.IndexOf(s); - if (j == -1) - { - j = _addKeywords.Count; - _addKeywords.Add(s); - } - flags += (1 << (j + internalKeywordsCount)); - } - - return flags; - } - - /// - /// - /// - /// - /// - /// - /// - public Material GetMaterial(int flags, BlendMode blendMode, uint group) - { - if (blendMode != BlendMode.Normal && BlendModeUtils.Factors[(int)blendMode].pma) - flags |= (int)MaterialFlags.ColorFilter; - - List items; - if (!_materials.TryGetValue(flags, out items)) - { - items = new List(); - _materials[flags] = items; - } - - int frameId = Time.frameCount; - int cnt = items.Count; - MaterialRef result = null; - for (int i = 0; i < cnt; i++) - { - MaterialRef item = items[i]; - - if (item.group == group && item.blendMode == blendMode) - { - if (item.frame != frameId) - { - firstMaterialInFrame = true; - item.frame = frameId; - } - else - firstMaterialInFrame = false; - - if (_combineTexture) - item.material.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); - - return item.material; - } - else if (result == null && (item.frame > frameId || item.frame < frameId - 1)) //collect materials if it is unused in last frame - result = item; - } - - if (result == null) - { - result = new MaterialRef() { material = CreateMaterial(flags) }; - items.Add(result); - } - else if (_combineTexture) - result.material.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); - - if (result.blendMode != blendMode) - { - BlendModeUtils.Apply(result.material, blendMode); - result.blendMode = blendMode; - } - - result.group = group; - result.frame = frameId; - firstMaterialInFrame = true; - return result.material; - } - - /// - /// - /// - /// - Material CreateMaterial(int flags) - { - Material mat = new Material(_shader); - - mat.mainTexture = _texture.nativeTexture; - if (_texture.alphaTexture != null) - { - mat.EnableKeyword("COMBINED"); - mat.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); - } - - for (int i = 0; i < internalKeywordsCount; i++) - { - if ((flags & (1 << i)) != 0) - { - string s = internalKeywords[i]; - if (s != null) - mat.EnableKeyword(s); - } - } - if (_addKeywords != null) - { - int keywordCnt = _addKeywords.Count; - for (int i = 0; i < keywordCnt; i++) - { - if ((flags & (1 << (i + internalKeywordsCount))) != 0) - mat.EnableKeyword(_addKeywords[i]); - } - } - - mat.hideFlags = DisplayObject.hideFlags; - if (onCreateNewMaterial != null) - onCreateNewMaterial(mat); - - return mat; - } - - /// - /// - /// - public void DestroyMaterials() - { - var iter = _materials.GetEnumerator(); - while (iter.MoveNext()) - { - List items = iter.Current.Value; - if (Application.isPlaying) - { - int cnt = items.Count; - for (int j = 0; j < cnt; j++) - Object.Destroy(items[j].material); - } - else - { - int cnt = items.Count; - for (int j = 0; j < cnt; j++) - Object.DestroyImmediate(items[j].material); - } - items.Clear(); - } - iter.Dispose(); - } - - /// - /// - /// - public void RefreshMaterials() - { - _combineTexture = _texture.alphaTexture != null; - var iter = _materials.GetEnumerator(); - while (iter.MoveNext()) - { - List items = iter.Current.Value; - int cnt = items.Count; - for (int j = 0; j < cnt; j++) - { - Material mat = items[j].material; - mat.mainTexture = _texture.nativeTexture; - if (_combineTexture) - { - mat.EnableKeyword("COMBINED"); - mat.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); - } - } - } - iter.Dispose(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs.meta deleted file mode 100644 index ab384f5..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7223c4628e56c1e448c70e10168f5fa1 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh.meta deleted file mode 100644 index 4551140..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: fca659474d209d94fbded309f407995c -folderAsset: yes -timeCreated: 1545987172 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs deleted file mode 100644 index 3578ec4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class CompositeMesh : IMeshFactory, IHitTest - { - /// - /// - /// - public readonly List elements; - - /// - /// If it is -1, means all elements are active, otherwise, only the specific element is active - /// - public int activeIndex; - - public CompositeMesh() - { - elements = new List(); - activeIndex = -1; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - int cnt = elements.Count; - if (cnt == 1) - elements[0].OnPopulateMesh(vb); - else - { - VertexBuffer vb2 = VertexBuffer.Begin(vb); - - for (int i = 0; i < cnt; i++) - { - if (activeIndex == -1 || i == activeIndex) - { - vb2.Clear(); - elements[i].OnPopulateMesh(vb2); - vb.Append(vb2); - } - } - - vb2.End(); - } - } - - public bool HitTest(Rect contentRect, Vector2 point) - { - if (!contentRect.Contains(point)) - return false; - - bool flag = false; - int cnt = elements.Count; - for (int i = 0; i < cnt; i++) - { - if (activeIndex == -1 || i == activeIndex) - { - IHitTest ht = elements[i] as IHitTest; - if (ht != null) - { - if (ht.HitTest(contentRect, point)) - return true; - } - else - flag = true; - } - } - - return flag; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs.meta deleted file mode 100644 index fafc9cf..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ba3d921c1f6e95f4e9105f45fd67bda5 -timeCreated: 1546159121 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs deleted file mode 100644 index 2510321..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs +++ /dev/null @@ -1,200 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class EllipseMesh : IMeshFactory, IHitTest - { - /// - /// - /// - public Rect? drawRect; - - /// - /// - /// - public float lineWidth; - - /// - /// - /// - public Color32 lineColor; - - /// - /// - /// - public Color32? centerColor; - - /// - /// - /// - public Color32? fillColor; - - /// - /// - /// - public float startDegree; - - /// - /// - /// - public float endDegreee; - - static int[] SECTOR_CENTER_TRIANGLES = new int[] { - 0, 4, 1, - 0, 3, 4, - 0, 2, 3, - 0, 8, 5, - 0, 7, 8, - 0, 6, 7, - 6, 5, 2, - 2, 1, 6 - }; - - public EllipseMesh() - { - lineColor = Color.black; - startDegree = 0; - endDegreee = 360; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - Rect rect = drawRect != null ? (Rect)drawRect : vb.contentRect; - Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; - - float sectionStart = Mathf.Clamp(startDegree, 0, 360); - float sectionEnd = Mathf.Clamp(endDegreee, 0, 360); - bool clipped = sectionStart > 0 || sectionEnd < 360; - sectionStart = sectionStart * Mathf.Deg2Rad; - sectionEnd = sectionEnd * Mathf.Deg2Rad; - Color32 centerColor2 = centerColor == null ? color : (Color32)centerColor; - - float radiusX = rect.width / 2; - float radiusY = rect.height / 2; - int sides = Mathf.CeilToInt(Mathf.PI * (radiusX + radiusY) / 4); - sides = Mathf.Clamp(sides, 40, 800); - float angleDelta = 2 * Mathf.PI / sides; - float angle = 0; - float lineAngle = 0; - - if (lineWidth > 0 && clipped) - { - lineAngle = lineWidth / Mathf.Max(radiusX, radiusY); - sectionStart += lineAngle; - sectionEnd -= lineAngle; - } - - int vpos = vb.currentVertCount; - float centerX = rect.x + radiusX; - float centerY = rect.y + radiusY; - vb.AddVert(new Vector3(centerX, centerY, 0), centerColor2); - for (int i = 0; i < sides; i++) - { - if (angle < sectionStart) - angle = sectionStart; - else if (angle > sectionEnd) - angle = sectionEnd; - Vector3 vec = new Vector3(Mathf.Cos(angle) * (radiusX - lineWidth) + centerX, Mathf.Sin(angle) * (radiusY - lineWidth) + centerY, 0); - vb.AddVert(vec, color); - if (lineWidth > 0) - { - vb.AddVert(vec, lineColor); - vb.AddVert(new Vector3(Mathf.Cos(angle) * radiusX + centerX, Mathf.Sin(angle) * radiusY + centerY, 0), lineColor); - } - angle += angleDelta; - } - - if (lineWidth > 0) - { - int cnt = sides * 3; - for (int i = 0; i < cnt; i += 3) - { - if (i != cnt - 3) - { - vb.AddTriangle(0, i + 1, i + 4); - vb.AddTriangle(i + 5, i + 2, i + 3); - vb.AddTriangle(i + 3, i + 6, i + 5); - } - else if (!clipped) - { - vb.AddTriangle(0, i + 1, 1); - vb.AddTriangle(2, i + 2, i + 3); - vb.AddTriangle(i + 3, 3, 2); - } - else - { - vb.AddTriangle(0, i + 1, i + 1); - vb.AddTriangle(i + 2, i + 2, i + 3); - vb.AddTriangle(i + 3, i + 3, i + 2); - } - } - } - else - { - for (int i = 0; i < sides; i++) - { - if (i != sides - 1) - vb.AddTriangle(0, i + 1, i + 2); - else if (!clipped) - vb.AddTriangle(0, i + 1, 1); - else - vb.AddTriangle(0, i + 1, i + 1); - } - } - - if (lineWidth > 0 && clipped) - { - //扇形内边缘的线条 - - vb.AddVert(new Vector3(radiusX, radiusY, 0), lineColor); - float centerRadius = lineWidth * 0.5f; - - sectionStart -= lineAngle; - angle = sectionStart + lineAngle * 0.5f + Mathf.PI * 0.5f; - vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); - angle -= Mathf.PI; - vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); - vb.AddVert(new Vector3(Mathf.Cos(sectionStart) * radiusX + radiusX, Mathf.Sin(sectionStart) * radiusY + radiusY, 0), lineColor); - vb.AddVert(vb.GetPosition(vpos + 3), lineColor); - - sectionEnd += lineAngle; - angle = sectionEnd - lineAngle * 0.5f + Mathf.PI * 0.5f; - vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); - angle -= Mathf.PI; - vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); - vb.AddVert(vb.GetPosition(vpos + sides * 3), lineColor); - vb.AddVert(new Vector3(Mathf.Cos(sectionEnd) * radiusX + radiusX, Mathf.Sin(sectionEnd) * radiusY + radiusY, 0), lineColor); - - vb.AddTriangles(SECTOR_CENTER_TRIANGLES, sides * 3 + 1); - } - } - - public bool HitTest(Rect contentRect, Vector2 point) - { - if (!contentRect.Contains(point)) - return false; - - float radiusX = contentRect.width * 0.5f; - float raduisY = contentRect.height * 0.5f; - float xx = point.x - radiusX - contentRect.x; - float yy = point.y - raduisY - contentRect.y; - if (Mathf.Pow(xx / radiusX, 2) + Mathf.Pow(yy / raduisY, 2) < 1) - { - if (startDegree != 0 || endDegreee != 360) - { - float deg = Mathf.Atan2(yy, xx) * Mathf.Rad2Deg; - if (deg < 0) - deg += 360; - return deg >= startDegree && deg <= endDegreee; - } - else - return true; - } - - return false; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs.meta deleted file mode 100644 index 4433dff..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7ea96854995120948847301fb48d1675 -timeCreated: 1545987173 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs deleted file mode 100644 index 85c8960..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs +++ /dev/null @@ -1,400 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class FillMesh : IMeshFactory - { - /// - /// - /// - public FillMethod method; - - /// - /// - /// - public int origin; - - /// - /// - /// - public float amount; - - /// - /// - /// - public bool clockwise; - - public FillMesh() - { - clockwise = true; - amount = 1; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - float amount = Mathf.Clamp01(this.amount); - switch (method) - { - case FillMethod.Horizontal: - FillHorizontal(vb, vb.contentRect, origin, amount); - break; - - case FillMethod.Vertical: - FillVertical(vb, vb.contentRect, origin, amount); - break; - - case FillMethod.Radial90: - FillRadial90(vb, vb.contentRect, (Origin90)origin, amount, clockwise); - break; - - case FillMethod.Radial180: - FillRadial180(vb, vb.contentRect, (Origin180)origin, amount, clockwise); - break; - - case FillMethod.Radial360: - FillRadial360(vb, vb.contentRect, (Origin360)origin, amount, clockwise); - break; - } - } - - static void FillHorizontal(VertexBuffer vb, Rect vertRect, int origin, float amount) - { - float a = vertRect.width * amount; - if ((OriginHorizontal)origin == OriginHorizontal.Right || (OriginVertical)origin == OriginVertical.Bottom) - vertRect.x += (vertRect.width - a); - vertRect.width = a; - - vb.AddQuad(vertRect); - vb.AddTriangles(); - } - - static void FillVertical(VertexBuffer vb, Rect vertRect, int origin, float amount) - { - float a = vertRect.height * amount; - if ((OriginHorizontal)origin == OriginHorizontal.Right || (OriginVertical)origin == OriginVertical.Bottom) - vertRect.y += (vertRect.height - a); - vertRect.height = a; - - vb.AddQuad(vertRect); - vb.AddTriangles(); - } - - //4 vertex - static void FillRadial90(VertexBuffer vb, Rect vertRect, Origin90 origin, float amount, bool clockwise) - { - bool flipX = origin == Origin90.TopRight || origin == Origin90.BottomRight; - bool flipY = origin == Origin90.BottomLeft || origin == Origin90.BottomRight; - if (flipX != flipY) - clockwise = !clockwise; - - float ratio = clockwise ? amount : (1 - amount); - float tan = Mathf.Tan(Mathf.PI * 0.5f * ratio); - bool thresold = false; - if (ratio != 1) - thresold = (vertRect.height / vertRect.width - tan) > 0; - if (!clockwise) - thresold = !thresold; - float x = vertRect.x + (ratio == 0 ? float.MaxValue : (vertRect.height / tan)); - float y = vertRect.y + (ratio == 1 ? float.MaxValue : (vertRect.width * tan)); - float x2 = x; - float y2 = y; - if (flipX) - x2 = vertRect.width - x; - if (flipY) - y2 = vertRect.height - y; - float xMin = flipX ? (vertRect.width - vertRect.x) : vertRect.xMin; - float yMin = flipY ? (vertRect.height - vertRect.y) : vertRect.yMin; - float xMax = flipX ? -vertRect.xMin : vertRect.xMax; - float yMax = flipY ? -vertRect.yMin : vertRect.yMax; - - vb.AddVert(new Vector3(xMin, yMin, 0)); - - if (clockwise) - vb.AddVert(new Vector3(xMax, yMin, 0)); - - if (y > vertRect.yMax) - { - if (thresold) - vb.AddVert(new Vector3(x2, yMax, 0)); - else - vb.AddVert(new Vector3(xMax, yMax, 0)); - } - else - vb.AddVert(new Vector3(xMax, y2, 0)); - - if (x > vertRect.xMax) - { - if (thresold) - vb.AddVert(new Vector3(xMax, y2, 0)); - else - vb.AddVert(new Vector3(xMax, yMax, 0)); - } - else - vb.AddVert(new Vector3(x2, yMax, 0)); - - if (!clockwise) - vb.AddVert(new Vector3(xMin, yMax, 0)); - - if (flipX == flipY) - { - vb.AddTriangle(0, 1, 2); - vb.AddTriangle(0, 2, 3); - } - else - { - vb.AddTriangle(2, 1, 0); - vb.AddTriangle(3, 2, 0); - } - } - - //8 vertex - static void FillRadial180(VertexBuffer vb, Rect vertRect, Origin180 origin, float amount, bool clockwise) - { - switch (origin) - { - case Origin180.Top: - if (amount <= 0.5f) - { - vertRect.width /= 2; - if (clockwise) - vertRect.x += vertRect.width; - - FillRadial90(vb, vertRect, clockwise ? Origin90.TopLeft : Origin90.TopRight, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-4); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.width /= 2; - if (!clockwise) - vertRect.x += vertRect.width; - - FillRadial90(vb, vertRect, clockwise ? Origin90.TopRight : Origin90.TopLeft, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.x += vertRect.width; - else - vertRect.x -= vertRect.width; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - break; - - case Origin180.Bottom: - if (amount <= 0.5f) - { - vertRect.width /= 2; - if (!clockwise) - vertRect.x += vertRect.width; - - FillRadial90(vb, vertRect, clockwise ? Origin90.BottomRight : Origin90.BottomLeft, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-4); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.width /= 2; - if (clockwise) - vertRect.x += vertRect.width; - - FillRadial90(vb, vertRect, clockwise ? Origin90.BottomLeft : Origin90.BottomRight, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.x -= vertRect.width; - else - vertRect.x += vertRect.width; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - break; - - case Origin180.Left: - if (amount <= 0.5f) - { - vertRect.height /= 2; - if (!clockwise) - vertRect.y += vertRect.height; - - FillRadial90(vb, vertRect, clockwise ? Origin90.BottomLeft : Origin90.TopLeft, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-4); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.height /= 2; - if (clockwise) - vertRect.y += vertRect.height; - - FillRadial90(vb, vertRect, clockwise ? Origin90.TopLeft : Origin90.BottomLeft, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.y -= vertRect.height; - else - vertRect.y += vertRect.height; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - break; - - case Origin180.Right: - if (amount <= 0.5f) - { - vertRect.height /= 2; - if (clockwise) - vertRect.y += vertRect.height; - - FillRadial90(vb, vertRect, clockwise ? Origin90.TopRight : Origin90.BottomRight, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-4); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.height /= 2; - if (!clockwise) - vertRect.y += vertRect.height; - - FillRadial90(vb, vertRect, clockwise ? Origin90.BottomRight : Origin90.TopRight, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.y += vertRect.height; - else - vertRect.y -= vertRect.height; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - break; - } - } - - //12 vertex - static void FillRadial360(VertexBuffer vb, Rect vertRect, Origin360 origin, float amount, bool clockwise) - { - switch (origin) - { - case Origin360.Top: - if (amount < 0.5f) - { - vertRect.width /= 2; - if (clockwise) - vertRect.x += vertRect.width; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Left : Origin180.Right, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-8); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.width /= 2; - if (!clockwise) - vertRect.x += vertRect.width; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Right : Origin180.Left, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.x += vertRect.width; - else - vertRect.x -= vertRect.width; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - - break; - - case Origin360.Bottom: - if (amount < 0.5f) - { - vertRect.width /= 2; - if (!clockwise) - vertRect.x += vertRect.width; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Right : Origin180.Left, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-8); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.width /= 2; - if (clockwise) - vertRect.x += vertRect.width; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Left : Origin180.Right, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.x -= vertRect.width; - else - vertRect.x += vertRect.width; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - break; - - case Origin360.Left: - if (amount < 0.5f) - { - vertRect.height /= 2; - if (!clockwise) - vertRect.y += vertRect.height; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Bottom : Origin180.Top, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-8); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.height /= 2; - if (clockwise) - vertRect.y += vertRect.height; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Top : Origin180.Bottom, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.y -= vertRect.height; - else - vertRect.y += vertRect.height; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - break; - - case Origin360.Right: - if (amount < 0.5f) - { - vertRect.height /= 2; - if (clockwise) - vertRect.y += vertRect.height; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Top : Origin180.Bottom, amount / 0.5f, clockwise); - Vector3 vec = vb.GetPosition(-8); - vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); - vb.AddTriangles(-4); - } - else - { - vertRect.height /= 2; - if (!clockwise) - vertRect.y += vertRect.height; - - FillRadial180(vb, vertRect, clockwise ? Origin180.Bottom : Origin180.Top, (amount - 0.5f) / 0.5f, clockwise); - - if (clockwise) - vertRect.y += vertRect.height; - else - vertRect.y -= vertRect.height; - vb.AddQuad(vertRect); - vb.AddTriangles(-4); - } - break; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs.meta deleted file mode 100644 index e1a993b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8b37d56dc1840734a8fdb4971f5bc733 -timeCreated: 1545987173 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs deleted file mode 100644 index 2da619a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs +++ /dev/null @@ -1,179 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// Inspired by kim ki won (http://mypi.ruliweb.daum.net/mypi.htm?id=newtypekorea) - /// - public class LineMesh : IMeshFactory - { - /// - /// - /// - public GPath path; - - /// - /// - /// - public float lineWidth; - - /// - /// - /// - public AnimationCurve lineWidthCurve; - - /// - /// - /// - public Gradient gradient; - - /// - /// - /// - public bool roundEdge; - - /// - /// - /// - public float fillStart; - - /// - /// - /// - public float fillEnd; - - /// - /// - /// - public float pointDensity; - - /// - /// - /// - public bool repeatFill; - - static List points = new List(); - static List ts = new List(); - - public LineMesh() - { - path = new GPath(); - lineWidth = 2; - fillStart = 0; - fillEnd = 1; - pointDensity = 0.1f; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - Vector2 uvMin = vb.uvRect.position; - Vector2 uvMax = new Vector2(vb.uvRect.xMax, vb.uvRect.yMax); - float uvRatio = path.length / vb.textureSize.x; - - int segCount = path.segmentCount; - float t = 0; - float lw = lineWidth; - float u; - for (int si = 0; si < segCount; si++) - { - float ratio = path.GetSegmentLength(si) / path.length; - float t0 = Mathf.Clamp(fillStart - t, 0, ratio) / ratio; - float t1 = Mathf.Clamp(fillEnd - t, 0, ratio) / ratio; - if (t0 >= t1) - { - t += ratio; - continue; - } - - points.Clear(); - ts.Clear(); - path.GetPointsInSegment(si, t0, t1, points, ts, pointDensity); - int cnt = points.Count; - - Color c0 = vb.vertexColor; - Color c1 = vb.vertexColor; - if (gradient != null) - c0 = gradient.Evaluate(t); - if (lineWidthCurve != null) - lw = lineWidthCurve.Evaluate(t); - - if (roundEdge && si == 0 && t0 == 0) - DrawRoundEdge(vb, points[0], points[1], lw, c0, uvMin); - - int vertCount = vb.currentVertCount; - for (int i = 1; i < cnt; i++) - { - Vector3 p0 = points[i - 1]; - Vector3 p1 = points[i]; - int k = vertCount + (i - 1) * 2; - float tc = t + ratio * ts[i]; - - Vector3 lineVector = p1 - p0; - Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1)); - widthVector.Normalize(); - - if (i == 1) - { - if (repeatFill) - u = tc * uvRatio * uvMax.x; - else - u = Mathf.Lerp(uvMin.x, uvMax.x, t + ratio * ts[i - 1]); - vb.AddVert(p0 - widthVector * lw * 0.5f, c0, new Vector2(u, uvMax.y)); - vb.AddVert(p0 + widthVector * lw * 0.5f, c0, new Vector2(u, uvMin.y)); - - if (si != 0) //joint - { - vb.AddTriangle(k - 2, k - 1, k + 1); - vb.AddTriangle(k - 2, k + 1, k); - } - } - if (gradient != null) - c1 = gradient.Evaluate(tc); - - if (lineWidthCurve != null) - lw = lineWidthCurve.Evaluate(tc); - - if (repeatFill) - u = tc * uvRatio * uvMax.x; - else - u = Mathf.Lerp(uvMin.x, uvMax.x, tc); - vb.AddVert(p1 - widthVector * lw * 0.5f, c1, new Vector2(u, uvMax.y)); - vb.AddVert(p1 + widthVector * lw * 0.5f, c1, new Vector2(u, uvMin.y)); - - vb.AddTriangle(k, k + 1, k + 3); - vb.AddTriangle(k, k + 3, k + 2); - } - - if (roundEdge && si == segCount - 1 && t1 == 1) - DrawRoundEdge(vb, points[cnt - 1], points[cnt - 2], lw, c1, uvMax); - - t += ratio; - } - } - - void DrawRoundEdge(VertexBuffer vb, Vector2 p0, Vector2 p1, float lw, Color32 color, Vector2 uv) - { - Vector2 widthVector = Vector3.Cross(p0 - p1, new Vector3(0, 0, 1)); - widthVector.Normalize(); - widthVector = widthVector * lw / 2f; - Vector2 lineVector = (p0 - p1).normalized * lw / 2f; - - int sides = Mathf.CeilToInt(Mathf.PI * lw / 2); - if (sides < 6) - sides = 6; - int current = vb.currentVertCount; - float angleUnit = Mathf.PI / (sides - 1); - - vb.AddVert(p0, color, uv); - vb.AddVert(p0 + widthVector, color, uv); - - for (int n = 0; n < sides; n++) - { - vb.AddVert(p0 + Mathf.Cos(angleUnit * n) * widthVector + Mathf.Sin(angleUnit * n) * lineVector, color, uv); - vb.AddTriangle(current, current + 1 + n, current + 2 + n); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs.meta deleted file mode 100644 index 70ddf45..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 6d1935a924fabf74a92c72b22a042279 -timeCreated: 1546519483 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs deleted file mode 100644 index ce688ab..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs +++ /dev/null @@ -1,15 +0,0 @@ - -namespace FairyGUI -{ - /// - /// - /// - public interface IMeshFactory - { - /// - /// - /// - /// - void OnPopulateMesh(VertexBuffer vb); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs.meta deleted file mode 100644 index bdbc047..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 274275eaa3fbbc94697cbe90a0fb52f1 -timeCreated: 1545987172 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs deleted file mode 100644 index 4062bf8..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class PlaneMesh : IMeshFactory - { - public int gridSize = 30; - - public void OnPopulateMesh(VertexBuffer vb) - { - float w = vb.contentRect.width; - float h = vb.contentRect.height; - float xMax = vb.contentRect.xMax; - float yMax = vb.contentRect.yMax; - int hc = (int)Mathf.Min(Mathf.CeilToInt(w / gridSize), 9); - int vc = (int)Mathf.Min(Mathf.CeilToInt(h / gridSize), 9); - int eachPartX = Mathf.FloorToInt(w / hc); - int eachPartY = Mathf.FloorToInt(h / vc); - float x, y; - for (int i = 0; i <= vc; i++) - { - if (i == vc) - y = yMax; - else - y = vb.contentRect.y + i * eachPartY; - for (int j = 0; j <= hc; j++) - { - if (j == hc) - x = xMax; - else - x = vb.contentRect.x + j * eachPartX; - vb.AddVert(new Vector3(x, y, 0)); - } - } - - for (int i = 0; i < vc; i++) - { - int k = i * (hc + 1); - for (int j = 1; j <= hc; j++) - { - int m = k + j; - vb.AddTriangle(m - 1, m, m + hc); - vb.AddTriangle(m, m + hc + 1, m + hc); - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs.meta deleted file mode 100644 index 2b88f1d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 121b756a7a8240c49b63fa9de560691a -timeCreated: 1547970144 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs deleted file mode 100644 index 006e756..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs +++ /dev/null @@ -1,291 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class PolygonMesh : IMeshFactory, IHitTest - { - /// - /// points must be in clockwise order, and must start from bottom-left if stretchUV is set. - /// - public readonly List points; - - /// - /// if you dont want to provide uv, leave it empty. - /// - public readonly List texcoords; - - /// - /// - /// - public float lineWidth; - - /// - /// - /// - public Color32 lineColor; - - /// - /// - /// - public Color32? fillColor; - - /// - /// - /// - public Color32[] colors; - - /// - /// - /// - public bool usePercentPositions; - - static List sRestIndices = new List(); - - public PolygonMesh() - { - points = new List(); - texcoords = new List(); - } - - /// - /// - /// - /// - public void Add(Vector2 point) - { - points.Add(point); - } - - /// - /// - /// - /// - /// - public void Add(Vector2 point, Vector2 texcoord) - { - points.Add(point); - texcoords.Add(texcoord); - } - - public void OnPopulateMesh(VertexBuffer vb) - { - int numVertices = points.Count; - if (numVertices < 3) - return; - - int restIndexPos, numRestIndices; - Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; - - float w = vb.contentRect.width; - float h = vb.contentRect.height; - bool useTexcoords = texcoords.Count >= numVertices; - bool fullUV = true; - for (int i = 0; i < numVertices; i++) - { - Vector3 vec = new Vector3(points[i].x, points[i].y, 0); - if (usePercentPositions) - { - vec.x *= w; - vec.y *= h; - } - if (useTexcoords) - { - Vector2 uv = texcoords[i]; - if (uv.x != 0 && uv.x != 1 || uv.y != 0 && uv.y != 1) - fullUV = false; - uv.x = Mathf.Lerp(vb.uvRect.x, vb.uvRect.xMax, uv.x); - uv.y = Mathf.Lerp(vb.uvRect.y, vb.uvRect.yMax, uv.y); - vb.AddVert(vec, color, uv); - } - else - vb.AddVert(vec, color); - } - - if (useTexcoords && fullUV && numVertices == 4) - vb._isArbitraryQuad = true; - - // Algorithm "Ear clipping method" described here: - // -> https://en.wikipedia.org/wiki/Polygon_triangulation - // - // Implementation inspired by: - // -> http://polyk.ivank.net - // -> Starling - - sRestIndices.Clear(); - for (int i = 0; i < numVertices; ++i) - sRestIndices.Add(i); - - restIndexPos = 0; - numRestIndices = numVertices; - - Vector2 a, b, c, p; - int otherIndex; - bool earFound; - int i0, i1, i2; - - while (numRestIndices > 3) - { - earFound = false; - i0 = sRestIndices[restIndexPos % numRestIndices]; - i1 = sRestIndices[(restIndexPos + 1) % numRestIndices]; - i2 = sRestIndices[(restIndexPos + 2) % numRestIndices]; - - a = points[i0]; - b = points[i1]; - c = points[i2]; - - if ((a.y - b.y) * (c.x - b.x) + (b.x - a.x) * (c.y - b.y) >= 0) - { - earFound = true; - for (int i = 3; i < numRestIndices; ++i) - { - otherIndex = sRestIndices[(restIndexPos + i) % numRestIndices]; - p = points[otherIndex]; - - if (IsPointInTriangle(ref p, ref a, ref b, ref c)) - { - earFound = false; - break; - } - } - } - - if (earFound) - { - vb.AddTriangle(i0, i1, i2); - sRestIndices.RemoveAt((restIndexPos + 1) % numRestIndices); - - numRestIndices--; - restIndexPos = 0; - } - else - { - restIndexPos++; - if (restIndexPos == numRestIndices) break; // no more ears - } - } - vb.AddTriangle(sRestIndices[0], sRestIndices[1], sRestIndices[2]); - - if (colors != null) - vb.RepeatColors(colors, 0, vb.currentVertCount); - - if (lineWidth > 0) - DrawOutline(vb); - } - - void DrawOutline(VertexBuffer vb) - { - int numVertices = points.Count; - int start = vb.currentVertCount - numVertices; - int k = vb.currentVertCount; - for (int i = 0; i < numVertices; i++) - { - Vector3 p0 = vb.vertices[start + i]; - p0.y = -p0.y; - Vector3 p1; - if (i < numVertices - 1) - p1 = vb.vertices[start + i + 1]; - else - p1 = vb.vertices[start]; - p1.y = -p1.y; - - Vector3 lineVector = p1 - p0; - Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1)); - widthVector.Normalize(); - - vb.AddVert(p0 - widthVector * lineWidth * 0.5f, lineColor); - vb.AddVert(p0 + widthVector * lineWidth * 0.5f, lineColor); - vb.AddVert(p1 - widthVector * lineWidth * 0.5f, lineColor); - vb.AddVert(p1 + widthVector * lineWidth * 0.5f, lineColor); - - k += 4; - vb.AddTriangle(k - 4, k - 3, k - 1); - vb.AddTriangle(k - 4, k - 1, k - 2); - - //joint - if (i != 0) - { - vb.AddTriangle(k - 6, k - 5, k - 3); - vb.AddTriangle(k - 6, k - 3, k - 4); - } - if (i == numVertices - 1) - { - start += numVertices; - vb.AddTriangle(k - 2, k - 1, start + 1); - vb.AddTriangle(k - 2, start + 1, start); - } - } - } - - bool IsPointInTriangle(ref Vector2 p, ref Vector2 a, ref Vector2 b, ref Vector2 c) - { - // From Starling - // This algorithm is described well in this article: - // http://www.blackpawn.com/texts/pointinpoly/default.html - - float v0x = c.x - a.x; - float v0y = c.y - a.y; - float v1x = b.x - a.x; - float v1y = b.y - a.y; - float v2x = p.x - a.x; - float v2y = p.y - a.y; - - float dot00 = v0x * v0x + v0y * v0y; - float dot01 = v0x * v1x + v0y * v1y; - float dot02 = v0x * v2x + v0y * v2y; - float dot11 = v1x * v1x + v1y * v1y; - float dot12 = v1x * v2x + v1y * v2y; - - float invDen = 1.0f / (dot00 * dot11 - dot01 * dot01); - float u = (dot11 * dot02 - dot01 * dot12) * invDen; - float v = (dot00 * dot12 - dot01 * dot02) * invDen; - - return (u >= 0) && (v >= 0) && (u + v < 1); - } - - public bool HitTest(Rect contentRect, Vector2 point) - { - if (!contentRect.Contains(point)) - return false; - - // Algorithm & implementation thankfully taken from: - // -> http://alienryderflex.com/polygon/ - // inspired by Starling - int len = points.Count; - int i; - int j = len - 1; - bool oddNodes = false; - float w = contentRect.width; - float h = contentRect.height; - - for (i = 0; i < len; ++i) - { - float ix = points[i].x; - float iy = points[i].y; - float jx = points[j].x; - float jy = points[j].y; - if (usePercentPositions) - { - ix *= w; - iy *= h; - ix *= w; - iy *= h; - } - - if ((iy < point.y && jy >= point.y || jy < point.y && iy >= point.y) && (ix <= point.x || jx <= point.x)) - { - if (ix + (point.y - iy) / (jy - iy) * (jx - ix) < point.x) - oddNodes = !oddNodes; - } - - j = i; - } - - return oddNodes; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs.meta deleted file mode 100644 index 90929dc..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: db020628cd79e714fbafdbaaa2cc355f -timeCreated: 1545987173 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs deleted file mode 100644 index 4702552..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs +++ /dev/null @@ -1,85 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class RectMesh : IMeshFactory, IHitTest - { - /// - /// - /// - public Rect? drawRect; - - /// - /// - /// - public float lineWidth; - - /// - /// - /// - public Color32 lineColor; - - /// - /// - /// - public Color32? fillColor; - - /// - /// - /// - public Color32[] colors; - - public RectMesh() - { - lineColor = Color.black; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - Rect rect = drawRect != null ? (Rect)drawRect : vb.contentRect; - Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; - if (lineWidth == 0) - { - if (color.a != 0)//optimized - vb.AddQuad(rect, color); - } - else - { - Rect part; - - //left,right - part = new Rect(rect.x, rect.y, lineWidth, rect.height); - vb.AddQuad(part, lineColor); - part = new Rect(rect.xMax - lineWidth, rect.y, lineWidth, rect.height); - vb.AddQuad(part, lineColor); - - //top, bottom - part = new Rect(rect.x + lineWidth, rect.y, rect.width - lineWidth * 2, lineWidth); - vb.AddQuad(part, lineColor); - part = new Rect(rect.x + lineWidth, rect.yMax - lineWidth, rect.width - lineWidth * 2, lineWidth); - vb.AddQuad(part, lineColor); - - //middle - if (color.a != 0)//optimized - { - part = Rect.MinMaxRect(rect.x + lineWidth, rect.y + lineWidth, rect.xMax - lineWidth, rect.yMax - lineWidth); - if (part.width > 0 && part.height > 0) - vb.AddQuad(part, color); - } - } - - if (colors != null) - vb.RepeatColors(colors, 0, vb.currentVertCount); - - vb.AddTriangles(); - } - - public bool HitTest(Rect contentRect, Vector2 point) - { - return contentRect.Contains(point); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs.meta deleted file mode 100644 index 5c1ca2b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 13a3a9d0d365d834696112114d7bf951 -timeCreated: 1545987172 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs deleted file mode 100644 index 6125981..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs +++ /dev/null @@ -1,128 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class RegularPolygonMesh : IMeshFactory, IHitTest - { - /// - /// - /// - public Rect? drawRect; - - /// - /// - /// - public int sides; - - /// - /// - /// - public float lineWidth; - - /// - /// - /// - public Color32 lineColor; - - /// - /// - /// - public Color32? centerColor; - - /// - /// - /// - public Color32? fillColor; - - /// - /// - /// - public float[] distances; - - /// - /// - /// - public float rotation; - - public RegularPolygonMesh() - { - sides = 3; - lineColor = Color.black; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - if (distances != null && distances.Length < sides) - { - Debug.LogError("distances.Length 0) - { - vb.AddVert(vec, lineColor); - - xv = Mathf.Cos(angle) * r + centerX; - yv = Mathf.Sin(angle) * r + centerY; - vb.AddVert(new Vector3(xv, yv, 0), lineColor); - } - angle += angleDelta; - } - - if (lineWidth > 0) - { - int tmp = sides * 3; - for (int i = 0; i < tmp; i += 3) - { - if (i != tmp - 3) - { - vb.AddTriangle(0, i + 1, i + 4); - vb.AddTriangle(i + 5, i + 2, i + 3); - vb.AddTriangle(i + 3, i + 6, i + 5); - } - else - { - vb.AddTriangle(0, i + 1, 1); - vb.AddTriangle(2, i + 2, i + 3); - vb.AddTriangle(i + 3, 3, 2); - } - } - } - else - { - for (int i = 0; i < sides; i++) - vb.AddTriangle(0, i + 1, (i == sides - 1) ? 1 : i + 2); - } - } - - public bool HitTest(Rect contentRect, Vector2 point) - { - if (drawRect != null) - return ((Rect)drawRect).Contains(point); - else - return contentRect.Contains(point); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs.meta deleted file mode 100644 index 6009bf4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a4084bdb2f1738340a28ab5699977f3b -timeCreated: 1545987173 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs deleted file mode 100644 index 542b930..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs +++ /dev/null @@ -1,177 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - public class RoundedRectMesh : IMeshFactory, IHitTest - { - /// - /// - /// - public Rect? drawRect; - - /// - /// - /// - public float lineWidth; - - /// - /// - /// - public Color32 lineColor; - - /// - /// - /// - public Color32? fillColor; - - /// - /// - /// - public float topLeftRadius; - - /// - /// - /// - public float topRightRadius; - - /// - /// - /// - public float bottomLeftRadius; - - /// - /// - /// - public float bottomRightRadius; - - public RoundedRectMesh() - { - lineColor = Color.black; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - Rect rect = drawRect != null ? (Rect)drawRect : vb.contentRect; - Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; - - float radiusX = rect.width / 2; - float radiusY = rect.height / 2; - float cornerMaxRadius = Mathf.Min(radiusX, radiusY); - float centerX = radiusX + rect.x; - float centerY = radiusY + rect.y; - - vb.AddVert(new Vector3(centerX, centerY, 0), color); - - int cnt = vb.currentVertCount; - for (int i = 0; i < 4; i++) - { - float radius = 0; - switch (i) - { - case 0: - radius = bottomRightRadius; - break; - - case 1: - radius = bottomLeftRadius; - break; - - case 2: - radius = topLeftRadius; - break; - - case 3: - radius = topRightRadius; - break; - } - radius = Mathf.Min(cornerMaxRadius, radius); - - float offsetX = rect.x; - float offsetY = rect.y; - - if (i == 0 || i == 3) - offsetX = rect.xMax - radius * 2; - if (i == 0 || i == 1) - offsetY = rect.yMax - radius * 2; - - if (radius != 0) - { - int partNumSides = Mathf.Max(1, Mathf.CeilToInt(Mathf.PI * radius / 8)) + 1; - float angleDelta = Mathf.PI / 2 / partNumSides; - float angle = Mathf.PI / 2 * i; - float startAngle = angle; - - for (int j = 1; j <= partNumSides; j++) - { - if (j == partNumSides) //消除精度误差带来的不对齐 - angle = startAngle + Mathf.PI / 2; - Vector3 v1 = new Vector3(offsetX + Mathf.Cos(angle) * (radius - lineWidth) + radius, - offsetY + Mathf.Sin(angle) * (radius - lineWidth) + radius, 0); - vb.AddVert(v1, color); - if (lineWidth != 0) - { - vb.AddVert(v1, lineColor); - vb.AddVert(new Vector3(offsetX + Mathf.Cos(angle) * radius + radius, - offsetY + Mathf.Sin(angle) * radius + radius, 0), lineColor); - } - angle += angleDelta; - } - } - else - { - Vector3 v1 = new Vector3(offsetX, offsetY, 0); - if (lineWidth != 0) - { - if (i == 0 || i == 3) - offsetX -= lineWidth; - else - offsetX += lineWidth; - if (i == 0 || i == 1) - offsetY -= lineWidth; - else - offsetY += lineWidth; - Vector3 v2 = new Vector3(offsetX, offsetY, 0); - vb.AddVert(v2, color); - vb.AddVert(v2, lineColor); - vb.AddVert(v1, lineColor); - } - else - vb.AddVert(v1, color); - } - } - cnt = vb.currentVertCount - cnt; - - if (lineWidth > 0) - { - for (int i = 0; i < cnt; i += 3) - { - if (i != cnt - 3) - { - vb.AddTriangle(0, i + 1, i + 4); - vb.AddTriangle(i + 5, i + 2, i + 3); - vb.AddTriangle(i + 3, i + 6, i + 5); - } - else - { - vb.AddTriangle(0, i + 1, 1); - vb.AddTriangle(2, i + 2, i + 3); - vb.AddTriangle(i + 3, 3, 2); - } - } - } - else - { - for (int i = 0; i < cnt; i++) - vb.AddTriangle(0, i + 1, (i == cnt - 1) ? 1 : i + 2); - } - } - - public bool HitTest(Rect contentRect, Vector2 point) - { - if (drawRect != null) - return ((Rect)drawRect).Contains(point); - else - return contentRect.Contains(point); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs.meta deleted file mode 100644 index d5c6d91..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 2f910c4392a714c41b421c296621562b -timeCreated: 1545987172 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs deleted file mode 100644 index 5cd375f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs +++ /dev/null @@ -1,90 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class StraightLineMesh : IMeshFactory - { - /// - /// - /// - public Color color; - - /// - /// - /// - public Vector3 origin; - - /// - /// - /// - public Vector3 end; - - /// - /// - /// - public float lineWidth; - - /// - /// - /// - public bool repeatFill; - - public StraightLineMesh() - { - color = Color.black; - lineWidth = 1; - } - - /// - /// - /// - /// - /// - /// - public StraightLineMesh(float lineWidth, Color color, bool repeatFill) - { - this.lineWidth = lineWidth; - this.color = color; - this.repeatFill = repeatFill; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - if (origin == end) - return; - - float length = Vector2.Distance(origin, end); - Vector3 lineVector = end - origin; - Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1)); - widthVector.Normalize(); - - Vector3 v0, v1, v2, v3; - - if (repeatFill) - { - float ratio = length / vb.textureSize.x; - v0 = VertexBuffer.NormalizedUV[0]; - v1 = VertexBuffer.NormalizedUV[1]; - v2 = new Vector2(ratio, 1); - v3 = new Vector2(ratio, 0); - } - else - { - v0 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMin); - v1 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMax); - v2 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMax); - v3 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMin); - } - - vb.AddVert(origin - widthVector * lineWidth * 0.5f, color, v0); - vb.AddVert(origin + widthVector * lineWidth * 0.5f, color, v1); - vb.AddVert(end + widthVector * lineWidth * 0.5f, color, v2); - vb.AddVert(end - widthVector * lineWidth * 0.5f, color, v3); - - vb.AddTriangles(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs.meta deleted file mode 100644 index 19278bf..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 27b002bc89d804a7b8058b9d16d5c506 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs deleted file mode 100644 index 35e17a9..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs +++ /dev/null @@ -1,519 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public sealed class VertexBuffer - { - /// - /// - /// - public Rect contentRect; - - /// - /// - /// - public Rect uvRect; - - /// - /// - /// - public Color32 vertexColor; - - /// - /// - /// - public Vector2 textureSize; - - /// - /// - /// - public readonly List vertices; - - /// - /// - /// - public readonly List colors; - - /// - /// - /// - public readonly List uvs; - - /// - /// - /// - public readonly List uvs2; - - /// - /// - /// - public readonly List triangles; - - static public Vector2[] NormalizedUV = new Vector2[] { - new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) }; - - static public Vector2[] NormalizedPosition = new Vector2[] { - new Vector2(0, 1), new Vector2(0, 0), new Vector2(1, 0), new Vector2(1, 1) }; - - internal bool _alphaInVertexColor; - internal bool _isArbitraryQuad; - - static Stack _pool = new Stack(); - - /// - /// - /// - /// - public static VertexBuffer Begin() - { - if (_pool.Count > 0) - { - VertexBuffer inst = _pool.Pop(); - inst.Clear(); - return inst; - } - else - return new VertexBuffer(); - } - - /// - /// - /// - /// - public static VertexBuffer Begin(VertexBuffer source) - { - VertexBuffer vb = Begin(); - vb.contentRect = source.contentRect; - vb.uvRect = source.uvRect; - vb.vertexColor = source.vertexColor; - vb.textureSize = source.textureSize; - - return vb; - } - - private VertexBuffer() - { - vertices = new List(); - colors = new List(); - uvs = new List(); - uvs2 = new List(); - triangles = new List(); - } - - /// - /// - /// - public void End() - { - _pool.Push(this); - } - - /// - /// - /// - public void Clear() - { - vertices.Clear(); - colors.Clear(); - uvs.Clear(); - uvs2.Clear(); - triangles.Clear(); - - _isArbitraryQuad = false; - _alphaInVertexColor = false; - } - - /// - /// - /// - public int currentVertCount - { - get - { - return vertices.Count; - } - } - - /// - /// - /// - /// - public void AddVert(Vector3 position) - { - position.y = -position.y; - vertices.Add(position); - colors.Add(vertexColor); - if (vertexColor.a != 255) - _alphaInVertexColor = true; - uvs.Add(new Vector2( - Mathf.Lerp(uvRect.xMin, uvRect.xMax, (position.x - contentRect.xMin) / contentRect.width), - Mathf.Lerp(uvRect.yMax, uvRect.yMin, (-position.y - contentRect.yMin) / contentRect.height))); - } - - /// - /// - /// - /// - /// - public void AddVert(Vector3 position, Color32 color) - { - position.y = -position.y; - vertices.Add(position); - colors.Add(color); - if (color.a != 255) - _alphaInVertexColor = true; - uvs.Add(new Vector2( - Mathf.Lerp(uvRect.xMin, uvRect.xMax, (position.x - contentRect.xMin) / contentRect.width), - Mathf.Lerp(uvRect.yMax, uvRect.yMin, (-position.y - contentRect.yMin) / contentRect.height))); - } - - /// - /// - /// - /// - /// - /// - public void AddVert(Vector3 position, Color32 color, Vector2 uv) - { - position.y = -position.y; - vertices.Add(position); - uvs.Add(new Vector2(uv.x, uv.y)); - colors.Add(color); - if (color.a != 255) - _alphaInVertexColor = true; - } - - /// - /// - /// 1---2 - /// | / | - /// 0---3 - /// - /// - public void AddQuad(Rect vertRect) - { - AddVert(new Vector3(vertRect.xMin, vertRect.yMax, 0f)); - AddVert(new Vector3(vertRect.xMin, vertRect.yMin, 0f)); - AddVert(new Vector3(vertRect.xMax, vertRect.yMin, 0f)); - AddVert(new Vector3(vertRect.xMax, vertRect.yMax, 0f)); - } - - /// - /// - /// - /// - /// - public void AddQuad(Rect vertRect, Color32 color) - { - AddVert(new Vector3(vertRect.xMin, vertRect.yMax, 0f), color); - AddVert(new Vector3(vertRect.xMin, vertRect.yMin, 0f), color); - AddVert(new Vector3(vertRect.xMax, vertRect.yMin, 0f), color); - AddVert(new Vector3(vertRect.xMax, vertRect.yMax, 0f), color); - } - - /// - /// - /// - /// - /// - /// - public void AddQuad(Rect vertRect, Color32 color, Rect uvRect) - { - vertices.Add(new Vector3(vertRect.xMin, -vertRect.yMax, 0f)); - vertices.Add(new Vector3(vertRect.xMin, -vertRect.yMin, 0f)); - vertices.Add(new Vector3(vertRect.xMax, -vertRect.yMin, 0f)); - vertices.Add(new Vector3(vertRect.xMax, -vertRect.yMax, 0f)); - - uvs.Add(new Vector2(uvRect.xMin, uvRect.yMin)); - uvs.Add(new Vector2(uvRect.xMin, uvRect.yMax)); - uvs.Add(new Vector2(uvRect.xMax, uvRect.yMax)); - uvs.Add(new Vector2(uvRect.xMax, uvRect.yMin)); - - colors.Add(color); - colors.Add(color); - colors.Add(color); - colors.Add(color); - - if (color.a != 255) - _alphaInVertexColor = true; - } - - static List helperV4List = new List(4) { Vector4.zero, Vector4.zero, Vector4.zero, Vector4.zero }; - internal List FixUVForArbitraryQuad() - { - //ref1 http://www.reedbeta.com/blog/quadrilateral-interpolation-part-1/ - //ref2 https://bitlush.com/blog/arbitrary-quadrilaterals-in-opengl-es-2-0 - - Vector4 qq = Vector4.one; - Vector2 a = vertices[2] - vertices[0]; - Vector2 b = vertices[1] - vertices[3]; - Vector2 c = vertices[0] - vertices[3]; - - float cross = a.x * b.y - a.y * b.x; - if (cross != 0) - { - float s = (a.x * c.y - a.y * c.x) / cross; - if (s > 0 && s < 1) - { - float t = (b.x * c.y - b.y * c.x) / cross; - if (t > 0 && t < 1) - { - qq.x = 1 / (1 - t); - qq.y = 1 / s; - qq.z = 1 / t; - qq.w = 1 / (1 - s); - } - } - } - - for (int i = 0; i < 4; i++) - { - Vector4 v = uvs[i]; - float q = qq[i]; - v.x *= q; - v.y *= q; - v.w = q; - helperV4List[i] = v; - } - - return helperV4List; - } - - /// - /// - /// - /// - /// - /// - public void RepeatColors(Color32[] value, int startIndex, int count) - { - int len = Mathf.Min(startIndex + count, vertices.Count); - int colorCount = value.Length; - int k = 0; - for (int i = startIndex; i < len; i++) - { - Color32 c = value[(k++) % colorCount]; - colors[i] = c; - if (c.a != 255) - _alphaInVertexColor = true; - } - } - - /// - /// - /// - /// - /// - /// - public void AddTriangle(int idx0, int idx1, int idx2) - { - triangles.Add(idx0); - triangles.Add(idx1); - triangles.Add(idx2); - } - - /// - /// - /// - /// - /// - public void AddTriangles(int[] idxList, int startVertexIndex = 0) - { - if (startVertexIndex != 0) - { - if (startVertexIndex < 0) - startVertexIndex = vertices.Count + startVertexIndex; - - int cnt = idxList.Length; - for (int i = 0; i < cnt; i++) - triangles.Add(idxList[i] + startVertexIndex); - } - else - triangles.AddRange(idxList); - } - - /// - /// - /// - /// - public void AddTriangles(int startVertexIndex = 0) - { - int cnt = vertices.Count; - if (startVertexIndex < 0) - startVertexIndex = cnt + startVertexIndex; - - for (int i = startVertexIndex; i < cnt; i += 4) - { - triangles.Add(i); - triangles.Add(i + 1); - triangles.Add(i + 2); - - triangles.Add(i + 2); - triangles.Add(i + 3); - triangles.Add(i); - } - } - - /// - /// - /// - /// - /// - public Vector3 GetPosition(int index) - { - if (index < 0) - index = vertices.Count + index; - - Vector3 vec = vertices[index]; - vec.y = -vec.y; - return vec; - } - - /// - /// - /// - /// - /// - /// - public Vector2 GetUVAtPosition(Vector2 position, bool usePercent) - { - if (usePercent) - { - return new Vector2(Mathf.Lerp(uvRect.xMin, uvRect.xMax, position.x), - Mathf.Lerp(uvRect.yMax, uvRect.yMin, position.y)); - } - else - return new Vector2(Mathf.Lerp(uvRect.xMin, uvRect.xMax, (position.x - contentRect.xMin) / contentRect.width), - Mathf.Lerp(uvRect.yMax, uvRect.yMin, (position.y - contentRect.yMin) / contentRect.height)); - } - - /// - /// - /// - /// - public void Append(VertexBuffer vb) - { - int len = vertices.Count; - vertices.AddRange(vb.vertices); - uvs.AddRange(vb.uvs); - uvs2.AddRange(vb.uvs2); - colors.AddRange(vb.colors); - if (len != 0) - { - int len1 = vb.triangles.Count; - for (int i = 0; i < len1; i++) - triangles.Add(vb.triangles[i] + len); - } - else - triangles.AddRange(vb.triangles); - - if (vb._alphaInVertexColor) - _alphaInVertexColor = true; - } - - /// - /// - /// - /// - public void Insert(VertexBuffer vb) - { - vertices.InsertRange(0, vb.vertices); - uvs.InsertRange(0, vb.uvs); - uvs2.InsertRange(0, vb.uvs2); - colors.InsertRange(0, vb.colors); - int len = triangles.Count; - if (len != 0) - { - int len1 = vb.vertices.Count; - for (int i = 0; i < len; i++) - triangles[i] += len1; - } - triangles.InsertRange(0, vb.triangles); - - if (vb._alphaInVertexColor) - _alphaInVertexColor = true; - } - - static float[] STROKE_OFFSET = new float[] - { - -1, 0, 1, 0, - 0, -1, 0, 1, - -1, -1, 1, -1, - -1, 1, 1, 1 - }; - public void GenerateOutline(int dirs, float width, Color color) - { - int count = vertices.Count; - if (count + dirs * count > VerticesLimit) - { - Debug.LogWarning("Outline effect cannot be completed as mesh is too large."); - return; - } - - VertexBuffer vb2 = VertexBuffer.Begin(); - if (color.a != 255) - vb2._alphaInVertexColor = true; - for (int j = 0; j < dirs; j++) - { - for (int i = 0; i < count; i++) - { - Vector3 vert = vertices[i]; - vb2.vertices.Add(new Vector3(vert.x + STROKE_OFFSET[j * 2] * width, vert.y + STROKE_OFFSET[j * 2 + 1] * width, 0)); - vb2.colors.Add(color); - } - - vb2.uvs.AddRange(uvs); - if (uvs2.Count > 0) - vb2.uvs2.AddRange(uvs2); - } - Insert(vb2); - vb2.End(); - } - - public void GenerateShadow(Vector2 offset, Color color) - { - int count = vertices.Count; - if (count + count > VerticesLimit) - { - Debug.LogWarning("Shadow effect cannot be completed as mesh is too large."); - return; - } - - VertexBuffer vb2 = VertexBuffer.Begin(); - if (color.a != 255) - vb2._alphaInVertexColor = true; - for (int i = 0; i < count; i++) - { - Vector3 vert = vertices[i]; - vb2.vertices.Add(new Vector3(vert.x + offset.x, vert.y - offset.y, 0)); - vb2.colors.Add(color); - } - - vb2.uvs.AddRange(uvs); - if (uvs2.Count > 0) - vb2.uvs2.AddRange(uvs2); - Insert(vb2); - vb2.End(); - } - - const int VerticesLimit = 65000; - public void CheckMeshLimit() - { - int count = vertices.Count; - if (count > VerticesLimit) - { - Debug.LogWarning("A mesh may not have more than " + VerticesLimit + " vertices."); - vertices.RemoveRange(VerticesLimit, count - VerticesLimit); - colors.RemoveRange(VerticesLimit, count - VerticesLimit); - uvs.RemoveRange(VerticesLimit, count - VerticesLimit); - if (uvs2.Count > 0) - uvs2.RemoveRange(VerticesLimit, count - VerticesLimit); - count = VerticesLimit; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs.meta deleted file mode 100644 index 105e95f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8d5501e8f84e40e47835611ab3896029 -timeCreated: 1545987173 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs b/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs deleted file mode 100644 index 3a571e2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs +++ /dev/null @@ -1,414 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class MovieClip : Image - { - /// - /// - /// - public class Frame - { - public NTexture texture; - public float addDelay; - } - - /// - /// - /// - public float interval; - - /// - /// - /// - public bool swing; - - /// - /// - /// - public float repeatDelay; - - /// - /// - /// - public float timeScale; - - /// - /// Whether to ignore Unity time scale. - /// - public bool ignoreEngineTimeScale; - - Frame[] _frames; - int _frameCount; - int _frame; - bool _playing; - int _start; - int _end; - int _times; - int _endAt; - int _status; //0-none, 1-next loop, 2-ending, 3-ended - - float _frameElapsed; //当前帧延迟 - bool _reversed; - int _repeatedCount; - TimerCallback _timerDelegate; - - EventListener _onPlayEnd; - - /// - /// - /// - public MovieClip() - { - interval = 0.1f; - _playing = true; - _timerDelegate = OnTimer; - timeScale = 1; - ignoreEngineTimeScale = false; - - if (Application.isPlaying) - { - onAddedToStage.Add(OnAddedToStage); - onRemovedFromStage.Add(OnRemoveFromStage); - } - - SetPlaySettings(); - } - - /// - /// - /// - public EventListener onPlayEnd - { - get { return _onPlayEnd ?? (_onPlayEnd = new EventListener(this, "onPlayEnd")); } - } - - /// - /// - /// - public Frame[] frames - { - get - { - return _frames; - } - set - { - _frames = value; - _scale9Grid = null; - _scaleByTile = false; - - if (_frames == null) - { - _frameCount = 0; - graphics.texture = null; - CheckTimer(); - return; - } - _frameCount = frames.Length; - - if (_end == -1 || _end > _frameCount - 1) - _end = _frameCount - 1; - if (_endAt == -1 || _endAt > _frameCount - 1) - _endAt = _frameCount - 1; - - if (_frame < 0 || _frame > _frameCount - 1) - _frame = _frameCount - 1; - - InvalidateBatchingState(); - - _frameElapsed = 0; - _repeatedCount = 0; - _reversed = false; - - DrawFrame(); - CheckTimer(); - } - } - - /// - /// - /// - public bool playing - { - get { return _playing; } - set - { - if (_playing != value) - { - _playing = value; - CheckTimer(); - } - } - } - - /// - /// - /// - public int frame - { - get { return _frame; } - set - { - if (_frame != value) - { - if (_frames != null && value >= _frameCount) - value = _frameCount - 1; - - _frame = value; - _frameElapsed = 0; - DrawFrame(); - } - } - } - - /// - /// - /// - public void Rewind() - { - _frame = 0; - _frameElapsed = 0; - _reversed = false; - _repeatedCount = 0; - DrawFrame(); - } - - /// - /// - /// - /// - public void SyncStatus(MovieClip anotherMc) - { - _frame = anotherMc._frame; - _frameElapsed = anotherMc._frameElapsed; - _reversed = anotherMc._reversed; - _repeatedCount = anotherMc._repeatedCount; - DrawFrame(); - } - - /// - /// - /// - /// - public void Advance(float time) - { - int beginFrame = _frame; - bool beginReversed = _reversed; - float backupTime = time; - while (true) - { - float tt = interval + _frames[_frame].addDelay; - if (_frame == 0 && _repeatedCount > 0) - tt += repeatDelay; - if (time < tt) - { - _frameElapsed = 0; - break; - } - - time -= tt; - - if (swing) - { - if (_reversed) - { - _frame--; - if (_frame <= 0) - { - _frame = 0; - _repeatedCount++; - _reversed = !_reversed; - } - } - else - { - _frame++; - if (_frame > _frameCount - 1) - { - _frame = Mathf.Max(0, _frameCount - 2); - _repeatedCount++; - _reversed = !_reversed; - } - } - } - else - { - _frame++; - if (_frame > _frameCount - 1) - { - _frame = 0; - _repeatedCount++; - } - } - - if (_frame == beginFrame && _reversed == beginReversed) //走了一轮了 - { - float roundTime = backupTime - time; //这就是一轮需要的时间 - time -= Mathf.FloorToInt(time / roundTime) * roundTime; //跳过 - } - } - - DrawFrame(); - } - - /// - /// - /// - public void SetPlaySettings() - { - SetPlaySettings(0, -1, 0, -1); - } - - /// - /// 从start帧开始,播放到end帧(-1表示结尾),重复times次(0表示无限循环),循环结束后,停止在endAt帧(-1表示参数end) - /// - /// - /// - /// - /// - public void SetPlaySettings(int start, int end, int times, int endAt) - { - _start = start; - _end = end; - if (_end == -1 || _end > _frameCount - 1) - _end = _frameCount - 1; - _times = times; - _endAt = endAt; - if (_endAt == -1) - _endAt = _end; - _status = 0; - this.frame = start; - } - - void OnAddedToStage() - { - if (_playing && _frameCount > 0) - Timers.inst.AddUpdate(_timerDelegate); - } - - void OnRemoveFromStage() - { - Timers.inst.Remove(_timerDelegate); - } - - void CheckTimer() - { - if (!Application.isPlaying) - return; - - if (_playing && _frameCount > 0 && this.stage != null) - Timers.inst.AddUpdate(_timerDelegate); - else - Timers.inst.Remove(_timerDelegate); - } - - void OnTimer(object param) - { - if (!_playing || _frameCount == 0 || _status == 3) - return; - - float dt; - if (ignoreEngineTimeScale) - { - dt = Time.unscaledDeltaTime; - if (dt > 0.1f) - dt = 0.1f; - } - else - dt = Time.deltaTime; - if (timeScale != 1) - dt *= timeScale; - - _frameElapsed += dt; - float tt = interval + _frames[_frame].addDelay; - if (_frame == 0 && _repeatedCount > 0) - tt += repeatDelay; - if (_frameElapsed < tt) - return; - - _frameElapsed -= tt; - if (_frameElapsed > interval) - _frameElapsed = interval; - - if (swing) - { - if (_reversed) - { - _frame--; - if (_frame <= 0) - { - _frame = 0; - _repeatedCount++; - _reversed = !_reversed; - } - } - else - { - _frame++; - if (_frame > _frameCount - 1) - { - _frame = Mathf.Max(0, _frameCount - 2); - _repeatedCount++; - _reversed = !_reversed; - } - } - } - else - { - _frame++; - if (_frame > _frameCount - 1) - { - _frame = 0; - _repeatedCount++; - } - } - - if (_status == 1) //new loop - { - _frame = _start; - _frameElapsed = 0; - _status = 0; - DrawFrame(); - } - else if (_status == 2) //ending - { - _frame = _endAt; - _frameElapsed = 0; - _status = 3; //ended - DrawFrame(); - - DispatchEvent("onPlayEnd", null); - } - else - { - DrawFrame(); - if (_frame == _end) - { - if (_times > 0) - { - _times--; - if (_times == 0) - _status = 2; //ending - else - _status = 1; //new loop - } - else if (_start != 0) - _status = 1; //new loop - } - } - } - - void DrawFrame() - { - if (_frameCount > 0) - { - Frame frame = _frames[_frame]; - graphics.texture = frame.texture; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs.meta deleted file mode 100644 index e656849..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5ddeeb52259b7ed4e8a604fa8cd47897 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs b/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs deleted file mode 100644 index f1caa79..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class NAudioClip - { - public static Action CustomDestroyMethod; - - /// - /// - /// - public DestroyMethod destroyMethod; - - /// - /// - /// - public AudioClip nativeClip; - - /// - /// - /// - /// - public NAudioClip(AudioClip audioClip) - { - nativeClip = audioClip; - } - - /// - /// - /// - public void Unload() - { - if (nativeClip == null) - return; - - if (destroyMethod == DestroyMethod.Unload) - Resources.UnloadAsset(nativeClip); - else if (destroyMethod == DestroyMethod.Destroy) - UnityEngine.Object.DestroyImmediate(nativeClip, true); - else if (destroyMethod == DestroyMethod.Custom) - { - if (CustomDestroyMethod == null) - Debug.LogWarning("NAudioClip.CustomDestroyMethod must be set to handle DestroyMethod.Custom"); - else - CustomDestroyMethod(nativeClip); - } - - nativeClip = null; - } - - /// - /// - /// - /// - public void Reload(AudioClip audioClip) - { - if (nativeClip != null && nativeClip != audioClip) - Unload(); - - nativeClip = audioClip; - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - CustomDestroyMethod = null; - } -#endif - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs.meta deleted file mode 100644 index 4b6366f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e081bc28928c3474194543c862fadec5 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs b/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs deleted file mode 100644 index cdbd3f9..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs +++ /dev/null @@ -1,880 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; -using Object = UnityEngine.Object; - -namespace FairyGUI -{ - /// - /// - /// - public class NGraphics : IMeshFactory, IBatchable - { - /// - /// - /// - public GameObject gameObject { get; private set; } - - /// - /// - /// - public MeshFilter meshFilter { get; private set; } - - /// - /// - /// - public MeshRenderer meshRenderer { get; private set; } - - /// - /// - /// - public Mesh mesh { get; private set; } - - /// - /// - /// - public BlendMode blendMode; - - /// - /// 不参与剪裁 - /// - public bool dontClip; - - /// - /// 当Mesh更新时触发 - /// - public event Action meshModifier; - - /// - /// - /// - public List subInstances; - - /// - /// - /// - public Vector4 userData; - - NTexture _texture; - string _shader; - Material _material; - int _customMatarial; //0-none, 1-common, 2-support internal mask, 128-owns material - MaterialManager _manager; - string[] _shaderKeywords; - int _materialFlags; - IMeshFactory _meshFactory; - - float _alpha; - Color _color; - bool _meshDirty; - Rect _contentRect; - FlipType _flip; - - public class VertexMatrix - { - public Vector3 cameraPos; - public Matrix4x4 matrix; - } - VertexMatrix _vertexMatrix; - - bool hasAlphaBackup; - List _alphaBackup; //透明度改变需要通过修改顶点颜色实现,但顶点颜色本身可能就带有透明度,所以这里要有一个备份 - - internal int _maskFlag; - StencilEraser _stencilEraser; - - MaterialPropertyBlock _propertyBlock; - bool _blockUpdated; - - internal BatchElement _batchElement; - - /// - /// - /// - /// - public NGraphics(GameObject gameObject) - { - this.gameObject = gameObject; - - _alpha = 1f; - _shader = ShaderConfig.imageShader; - _color = Color.white; - _meshFactory = this; - - meshFilter = gameObject.AddComponent(); - meshRenderer = gameObject.AddComponent(); - meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; - meshRenderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; - meshRenderer.receiveShadows = false; - - mesh = new Mesh(); - mesh.name = gameObject.name; - mesh.MarkDynamic(); - - meshFilter.mesh = mesh; - - meshFilter.hideFlags = DisplayObject.hideFlags; - meshRenderer.hideFlags = DisplayObject.hideFlags; - mesh.hideFlags = DisplayObject.hideFlags; - - Stats.LatestGraphicsCreation++; - } - - /// - /// - /// - public IMeshFactory meshFactory - { - get { return _meshFactory; } - set - { - if (_meshFactory != value) - { - _meshFactory = value; - _meshDirty = true; - } - } - } - - /// - /// - /// - /// - /// - public T GetMeshFactory() where T : IMeshFactory, new() - { - if (!(_meshFactory is T)) - { - _meshFactory = new T(); - _meshDirty = true; - } - return (T)_meshFactory; - } - - /// - /// - /// - public Rect contentRect - { - get { return _contentRect; } - set - { - _contentRect = value; - _meshDirty = true; - - if (subInstances != null) - { - foreach (var sub in subInstances) - sub.contentRect = value; - } - } - } - - /// - /// - /// - public FlipType flip - { - get { return _flip; } - set - { - if (_flip != value) - { - _flip = value; - _meshDirty = true; - } - } - } - - /// - /// - /// - public NTexture texture - { - get { return _texture; } - set - { - if (_texture != value) - { - if (value != null) - value.AddRef(); - if (_texture != null) - _texture.ReleaseRef(); - - _texture = value; - if (_customMatarial != 0 && _material != null) - _material.mainTexture = _texture != null ? _texture.nativeTexture : null; - _meshDirty = true; - UpdateManager(); - } - } - } - - /// - /// - /// - public string shader - { - get { return _shader; } - set - { - _shader = value; - UpdateManager(); - } - } - - /// - /// - /// - /// - /// - public void SetShaderAndTexture(string shader, NTexture texture) - { - _shader = shader; - if (_texture != texture) - this.texture = texture; - else - UpdateManager(); - } - - /// - /// - /// - public Material material - { - get - { - if (_customMatarial == 0 && _material == null && _manager != null) - _material = _manager.GetMaterial(_materialFlags, blendMode, 0); - return _material; - } - set - { - if ((_customMatarial & 128) != 0 && _material != null) - Object.DestroyImmediate(_material); - - _material = value; - if (_material != null) - { - _customMatarial = 1; - if (_material.HasProperty(ShaderConfig.ID_Stencil) || _material.HasProperty(ShaderConfig.ID_ClipBox)) - _customMatarial |= 2; - - meshRenderer.sharedMaterial = _material; - if (_texture != null) - _material.mainTexture = _texture.nativeTexture; - } - else - { - _customMatarial = 0; - meshRenderer.sharedMaterial = null; - } - } - } - - /// - /// Same as material property except that ownership is transferred to this object. - /// - /// - public void SetMaterial(Material material) - { - this.material = material; - _customMatarial |= 128; - } - - /// - /// - /// - public string[] materialKeywords - { - get { return _shaderKeywords; } - set - { - _shaderKeywords = value; - UpdateMaterialFlags(); - } - } - - /// - /// - /// - /// - /// - public void ToggleKeyword(string keyword, bool enabled) - { - if (enabled) - { - if (_shaderKeywords == null) - { - _shaderKeywords = new string[] { keyword }; - UpdateMaterialFlags(); - } - else if (Array.IndexOf(_shaderKeywords, keyword) == -1) - { - Array.Resize(ref _shaderKeywords, _shaderKeywords.Length + 1); - _shaderKeywords[_shaderKeywords.Length - 1] = keyword; - UpdateMaterialFlags(); - } - } - else - { - if (_shaderKeywords != null) - { - int i = Array.IndexOf(_shaderKeywords, keyword); - if (i != -1) - { - _shaderKeywords[i] = null; - UpdateMaterialFlags(); - } - } - } - } - - void UpdateManager() - { - if (_texture != null) - _manager = _texture.GetMaterialManager(_shader); - else - _manager = null; - UpdateMaterialFlags(); - } - - void UpdateMaterialFlags() - { - if (_customMatarial != 0) - { - if (material != null) - material.shaderKeywords = _shaderKeywords; - } - else if (_shaderKeywords != null && _manager != null) - _materialFlags = _manager.GetFlagsByKeywords(_shaderKeywords); - else - _materialFlags = 0; - } - - /// - /// - /// - public bool enabled - { - get { return meshRenderer.enabled; } - set { meshRenderer.enabled = value; } - } - - /// - /// - /// - [Obsolete("Use renderingOrder")] - public int sortingOrder - { - get { return meshRenderer.sortingOrder; } - set { meshRenderer.sortingOrder = value; } - } - - /// - /// - /// - public int renderingOrder - { - get { return meshRenderer.sortingOrder; } - set { meshRenderer.sortingOrder = value; } - } - - public void SetRenderingOrder(UpdateContext context, bool inBatch) - { - meshRenderer.sortingOrder = context.renderingOrder++; - - if (subInstances != null && !inBatch) - { - foreach (var sub in subInstances) - { - sub.meshRenderer.sortingOrder = context.renderingOrder++; - } - } - } - - /// - /// - /// - /// - internal void _SetStencilEraserOrder(int value) - { - _stencilEraser.meshRenderer.sortingOrder = value; - } - - /// - /// - /// - /// - public Color color - { - get { return _color; } - set { _color = value; } - } - - /// - /// - /// - public void Tint() - { - if (_meshDirty) - return; - - int vertCount = mesh.vertexCount; - if (vertCount == 0) - return; - - VertexBuffer vb = VertexBuffer.Begin(); - mesh.GetColors(vb.colors); - List colors = vb.colors; - for (int i = 0; i < vertCount; i++) - { - Color32 col = _color; - col.a = (byte)(_alpha * (hasAlphaBackup ? _alphaBackup[i] : (byte)255)); - colors[i] = col; - } - - mesh.SetColors(vb.colors); - vb.End(); - } - - void ChangeAlpha(float value) - { - _alpha = value; - - int vertCount = mesh.vertexCount; - if (vertCount == 0) - return; - - VertexBuffer vb = VertexBuffer.Begin(); - mesh.GetColors(vb.colors); - List colors = vb.colors; - for (int i = 0; i < vertCount; i++) - { - Color32 col = colors[i]; - col.a = (byte)(_alpha * (hasAlphaBackup ? _alphaBackup[i] : (byte)255)); - colors[i] = col; - } - - mesh.SetColors(vb.colors); - vb.End(); - } - - /// - /// - /// - public VertexMatrix vertexMatrix - { - get { return _vertexMatrix; } - set - { - _vertexMatrix = value; - _meshDirty = true; - - if (subInstances != null) - { - foreach (var sub in subInstances) - sub._vertexMatrix = value; - } - } - } - - /// - /// - /// - /// - public MaterialPropertyBlock materialPropertyBlock - { - get - { - if (_propertyBlock == null) - _propertyBlock = new MaterialPropertyBlock(); - - _blockUpdated = true; - return _propertyBlock; - } - } - - /// - /// - /// - public void SetMeshDirty() - { - _meshDirty = true; - - if (subInstances != null) - { - foreach (var g in subInstances) - g._meshDirty = true; - } - } - - /// - /// - /// - /// - public bool UpdateMesh() - { - bool ret = false; - if (_meshDirty) - { - UpdateMeshNow(); - ret = true; - } - - if (subInstances != null) - { - foreach (var g in subInstances) - { - if (g.UpdateMesh()) - ret = true; - } - } - - return ret; - } - - /// - /// - /// - public void Dispose() - { - if (mesh != null) - { - if (Application.isPlaying) - Object.Destroy(mesh); - else - Object.DestroyImmediate(mesh); - mesh = null; - } - if ((_customMatarial & 128) != 0 && _material != null) - Object.DestroyImmediate(_material); - - if (_texture != null) - { - _texture.ReleaseRef(); - _texture = null; - } - - _manager = null; - _material = null; - meshRenderer = null; - meshFilter = null; - _stencilEraser = null; - meshModifier = null; - - if (subInstances != null) - { - foreach (var sub in subInstances) - sub.Dispose(); - subInstances.Clear(); - } - } - - /// - /// - /// - /// - /// - /// - public void Update(UpdateContext context, float alpha, bool grayed) - { - Stats.GraphicsCount++; - - if (_meshDirty) - { - _alpha = alpha; - UpdateMeshNow(); - } - else if (_alpha != alpha) - ChangeAlpha(alpha); - - if (_propertyBlock != null && _blockUpdated) - { - meshRenderer.SetPropertyBlock(_propertyBlock); - _blockUpdated = false; - } - - if (_customMatarial != 0) - { - if ((_customMatarial & 2) != 0 && _material != null) - context.ApplyClippingProperties(_material, false); - } - else - { - if (_manager != null) - { - if (_maskFlag == 1) - { - _material = _manager.GetMaterial((int)MaterialFlags.AlphaMask | _materialFlags, BlendMode.Normal, context.clipInfo.clipId); - context.ApplyAlphaMaskProperties(_material, false); - } - else - { - int matFlags = _materialFlags; - if (grayed) - matFlags |= (int)MaterialFlags.Grayed; - - if (context.clipped) - { - if (context.stencilReferenceValue > 0) - matFlags |= (int)MaterialFlags.StencilTest; - if (context.rectMaskDepth > 0) - { - if (context.clipInfo.soft) - matFlags |= (int)MaterialFlags.SoftClipped; - else - matFlags |= (int)MaterialFlags.Clipped; - } - - _material = _manager.GetMaterial(matFlags, blendMode, context.clipInfo.clipId); - if (_manager.firstMaterialInFrame) - context.ApplyClippingProperties(_material, true); - } - else - _material = _manager.GetMaterial(matFlags, blendMode, 0); - } - } - else - _material = null; - - if (!Material.ReferenceEquals(_material, meshRenderer.sharedMaterial)) - meshRenderer.sharedMaterial = _material; - } - - if (_maskFlag != 0) - { - if (_maskFlag == 1) - _maskFlag = 2; - else - { - if (_stencilEraser != null) - _stencilEraser.enabled = false; - - _maskFlag = 0; - } - } - - if (subInstances != null) - { - foreach (var sub in subInstances) - sub.Update(context, alpha, grayed); - } - } - - internal void _PreUpdateMask(UpdateContext context, uint maskId) - { - //_maskFlag: 0-new mask, 1-active mask, 2-mask complete - if (_maskFlag == 0) - { - if (_stencilEraser == null) - { - _stencilEraser = new StencilEraser(gameObject.transform); - _stencilEraser.meshFilter.mesh = mesh; - } - else - _stencilEraser.enabled = true; - } - - _maskFlag = 1; - - if (_manager != null) - { - //这里使用maskId而不是clipInfo.clipId,是因为遮罩有两个用途,一个是写入遮罩,一个是擦除,两个不能用同一个材质 - Material mat = _manager.GetMaterial((int)MaterialFlags.AlphaMask | _materialFlags, BlendMode.Normal, maskId); - if (!Material.ReferenceEquals(mat, _stencilEraser.meshRenderer.sharedMaterial)) - _stencilEraser.meshRenderer.sharedMaterial = mat; - - context.ApplyAlphaMaskProperties(mat, true); - } - } - - void UpdateMeshNow() - { - _meshDirty = false; - - if (_texture == null || _meshFactory == null) - { - if (mesh.vertexCount > 0) - { - mesh.Clear(); - - if (meshModifier != null) - meshModifier(); - } - return; - } - - VertexBuffer vb = VertexBuffer.Begin(); - vb.contentRect = _contentRect; - vb.uvRect = _texture.uvRect; - if (_texture != null) - vb.textureSize = new Vector2(_texture.width, _texture.height); - else - vb.textureSize = new Vector2(0, 0); - if (_flip != FlipType.None) - { - if (_flip == FlipType.Horizontal || _flip == FlipType.Both) - { - float tmp = vb.uvRect.xMin; - vb.uvRect.xMin = vb.uvRect.xMax; - vb.uvRect.xMax = tmp; - } - if (_flip == FlipType.Vertical || _flip == FlipType.Both) - { - float tmp = vb.uvRect.yMin; - vb.uvRect.yMin = vb.uvRect.yMax; - vb.uvRect.yMax = tmp; - } - } - vb.vertexColor = _color; - _meshFactory.OnPopulateMesh(vb); - - int vertCount = vb.currentVertCount; - if (vertCount == 0) - { - if (mesh.vertexCount > 0) - { - mesh.Clear(); - - if (meshModifier != null) - meshModifier(); - } - vb.End(); - return; - } - - if (_texture.rotated) - { - float xMin = _texture.uvRect.xMin; - float yMin = _texture.uvRect.yMin; - float yMax = _texture.uvRect.yMax; - float tmp; - for (int i = 0; i < vertCount; i++) - { - Vector2 vec = vb.uvs[i]; - tmp = vec.y; - vec.y = yMin + vec.x - xMin; - vec.x = xMin + yMax - tmp; - vb.uvs[i] = vec; - } - } - - hasAlphaBackup = vb._alphaInVertexColor; - if (hasAlphaBackup) - { - if (_alphaBackup == null) - _alphaBackup = new List(); - else - _alphaBackup.Clear(); - for (int i = 0; i < vertCount; i++) - { - Color32 col = vb.colors[i]; - _alphaBackup.Add(col.a); - - col.a = (byte)(col.a * _alpha); - vb.colors[i] = col; - } - } - else if (_alpha != 1) - { - for (int i = 0; i < vertCount; i++) - { - Color32 col = vb.colors[i]; - col.a = (byte)(col.a * _alpha); - vb.colors[i] = col; - } - } - - if (_vertexMatrix != null) - { - Vector3 camPos = _vertexMatrix.cameraPos; - Vector3 center = new Vector3(camPos.x, camPos.y, 0); - center -= _vertexMatrix.matrix.MultiplyPoint(center); - for (int i = 0; i < vertCount; i++) - { - Vector3 pt = vb.vertices[i]; - pt = _vertexMatrix.matrix.MultiplyPoint(pt); - pt += center; - Vector3 vec = pt - camPos; - float lambda = -camPos.z / vec.z; - pt.x = camPos.x + lambda * vec.x; - pt.y = camPos.y + lambda * vec.y; - pt.z = 0; - - vb.vertices[i] = pt; - } - } - - mesh.Clear(); - mesh.SetVertices(vb.vertices); - if (vb._isArbitraryQuad) - mesh.SetUVs(0, vb.FixUVForArbitraryQuad()); - else - mesh.SetUVs(0, vb.uvs); - mesh.SetColors(vb.colors); - mesh.SetTriangles(vb.triangles, 0); - if (vb.uvs2.Count == vb.uvs.Count) - mesh.SetUVs(1, vb.uvs2); - vb.End(); - - if (meshModifier != null) - meshModifier(); - } - - public void OnPopulateMesh(VertexBuffer vb) - { - Rect rect = texture.GetDrawRect(vb.contentRect, flip); - - vb.AddQuad(rect, vb.vertexColor, vb.uvRect); - vb.AddTriangles(); - vb._isArbitraryQuad = _vertexMatrix != null; - } - - public NGraphics CreateSubInstance(string name) - { - if (subInstances == null) - subInstances = new List(); - - GameObject newGameObject = new GameObject(name); - newGameObject.transform.SetParent(gameObject.transform, false); - newGameObject.layer = gameObject.layer; - newGameObject.hideFlags = gameObject.hideFlags; - - var newGraphics = new NGraphics(newGameObject); - newGraphics._vertexMatrix = _vertexMatrix; - return newGraphics; - } - - class StencilEraser - { - public GameObject gameObject; - public MeshFilter meshFilter; - public MeshRenderer meshRenderer; - - public StencilEraser(Transform parent) - { - gameObject = new GameObject("StencilEraser"); - gameObject.transform.SetParent(parent, false); - - meshFilter = gameObject.AddComponent(); - meshRenderer = gameObject.AddComponent(); - meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; - meshRenderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; - meshRenderer.receiveShadows = false; - - gameObject.layer = parent.gameObject.layer; - gameObject.hideFlags = parent.gameObject.hideFlags; - meshFilter.hideFlags = parent.gameObject.hideFlags; - meshRenderer.hideFlags = parent.gameObject.hideFlags; - } - - public bool enabled - { - get { return meshRenderer.enabled; } - set { meshRenderer.enabled = value; } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs.meta deleted file mode 100644 index 020c3c8..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b84f79fb60acc974cb58c5368b257716 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs b/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs deleted file mode 100644 index 3d3e34a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs +++ /dev/null @@ -1,555 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using Object = UnityEngine.Object; - -namespace FairyGUI -{ - /// - /// - /// - public enum DestroyMethod - { - Destroy, - Unload, - None, - ReleaseTemp, - Custom - } - - /// - /// - /// - public class NTexture - { - /// - /// This event will trigger when a texture is destroying if its destroyMethod is Custom - /// - public static event Action CustomDestroyMethod; - - /// - /// - /// - public Rect uvRect; - - /// - /// - /// - public bool rotated; - - /// - /// - /// - public int refCount; - - /// - /// - /// - public float lastActive; - - /// - /// - /// - public DestroyMethod destroyMethod; - - /// - /// This event will trigger when texture reloaded and size changed. - /// - public event Action onSizeChanged; - - /// - /// This event will trigger when ref count is zero. - /// - public event Action onRelease; - - Texture _nativeTexture; - Texture _alphaTexture; - - Rect _region; - Vector2 _offset; - Vector2 _originalSize; - - NTexture _root; - Dictionary _materialManagers; - - internal static Texture2D CreateEmptyTexture() - { - Texture2D emptyTexture = new Texture2D(1, 1, TextureFormat.RGB24, false); - emptyTexture.name = "White Texture"; - emptyTexture.hideFlags = DisplayObject.hideFlags; - emptyTexture.SetPixel(0, 0, Color.white); - emptyTexture.Apply(); - return emptyTexture; - } - - static NTexture _empty; - - /// - /// - /// - public static NTexture Empty - { - get - { - if (_empty == null) - _empty = new NTexture(CreateEmptyTexture()); - - return _empty; - } - } - - /// - /// - /// - public static void DisposeEmpty() - { - if (_empty != null) - { - NTexture tmp = _empty; - _empty = null; - tmp.Dispose(); - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - DisposeEmpty(); - CustomDestroyMethod = null; - } -#endif - - /// - /// - /// - /// - public NTexture(Texture texture) : this(texture, null, 1, 1) - { - } - - /// - /// - /// - /// - /// - /// - public NTexture(Texture texture, Texture alphaTexture, float xScale, float yScale) - { - _root = this; - _nativeTexture = texture; - _alphaTexture = alphaTexture; - uvRect = new Rect(0, 0, xScale, yScale); - if (yScale < 0) - { - uvRect.y = -yScale; - uvRect.yMax = 0; - } - if (xScale < 0) - { - uvRect.x = -xScale; - uvRect.xMax = 0; - } - if (_nativeTexture != null) - _originalSize = new Vector2(_nativeTexture.width, _nativeTexture.height); - _region = new Rect(0, 0, _originalSize.x, _originalSize.y); - } - - /// - /// - /// - /// - /// - public NTexture(Texture texture, Rect region) - { - _root = this; - _nativeTexture = texture; - _region = region; - _originalSize = new Vector2(_region.width, _region.height); - if (_nativeTexture != null) - uvRect = new Rect(region.x / _nativeTexture.width, 1 - region.yMax / _nativeTexture.height, - region.width / _nativeTexture.width, region.height / _nativeTexture.height); - else - uvRect.Set(0, 0, 1, 1); - } - - /// - /// - /// - /// - /// - /// - public NTexture(NTexture root, Rect region, bool rotated) - { - _root = root; - this.rotated = rotated; - region.x += root._region.x; - region.y += root._region.y; - uvRect = new Rect(region.x * root.uvRect.width / root.width, 1 - region.yMax * root.uvRect.height / root.height, - region.width * root.uvRect.width / root.width, region.height * root.uvRect.height / root.height); - if (rotated) - { - float tmp = region.width; - region.width = region.height; - region.height = tmp; - - tmp = uvRect.width; - uvRect.width = uvRect.height; - uvRect.height = tmp; - } - _region = region; - _originalSize = _region.size; - } - - /// - /// - /// - /// - /// - /// - /// - /// - public NTexture(NTexture root, Rect region, bool rotated, Vector2 originalSize, Vector2 offset) - : this(root, region, rotated) - { - _originalSize = originalSize; - _offset = offset; - } - - /// - /// - /// - /// - public NTexture(Sprite sprite) - { - Rect rect = sprite.textureRect; - rect.y = sprite.texture.height - rect.yMax; - - _root = this; - _nativeTexture = sprite.texture; - _region = rect; - _originalSize = new Vector2(_region.width, _region.height); - uvRect = new Rect(_region.x / _nativeTexture.width, 1 - _region.yMax / _nativeTexture.height, - _region.width / _nativeTexture.width, _region.height / _nativeTexture.height); - } - - /// - /// - /// - public int width - { - get { return (int)_region.width; } - } - - /// - /// - /// - public int height - { - get { return (int)_region.height; } - } - - /// - /// - /// - public Vector2 offset - { - get { return _offset; } - set { _offset = value; } - } - - /// - /// - /// - public Vector2 originalSize - { - get { return _originalSize; } - set { _originalSize = value; } - } - - /// - /// - /// - /// - /// - public Rect GetDrawRect(Rect drawRect) - { - return GetDrawRect(drawRect, FlipType.None); - } - - /// - /// - /// - /// - /// - /// - public Rect GetDrawRect(Rect drawRect, FlipType flip) - { - if (_originalSize.x == _region.width && _originalSize.y == _region.height) - return drawRect; - - float sx = drawRect.width / _originalSize.x; - float sy = drawRect.height / _originalSize.y; - Rect rect = new Rect(_offset.x * sx, _offset.y * sy, _region.width * sx, _region.height * sy); - - if (flip != FlipType.None) - { - if (flip == FlipType.Horizontal || flip == FlipType.Both) - { - rect.x = drawRect.width - rect.xMax; - } - if (flip == FlipType.Vertical || flip == FlipType.Both) - { - rect.y = drawRect.height - rect.yMax; - } - } - - return rect; - } - - /// - /// - /// - /// - public void GetUV(Vector2[] uv) - { - uv[0] = uvRect.position; - uv[1] = new Vector2(uvRect.xMin, uvRect.yMax); - uv[2] = new Vector2(uvRect.xMax, uvRect.yMax); - uv[3] = new Vector2(uvRect.xMax, uvRect.yMin); - if (rotated) - { - float xMin = uvRect.xMin; - float yMin = uvRect.yMin; - float yMax = uvRect.yMax; - - float tmp; - for (int i = 0; i < 4; i++) - { - Vector2 m = uv[i]; - tmp = m.y; - m.y = yMin + m.x - xMin; - m.x = xMin + yMax - tmp; - uv[i] = m; - } - } - } - - /// - /// - /// - public NTexture root - { - get { return _root; } - } - - /// - /// - /// - public bool disposed - { - get { return _root == null; } - } - - /// - /// - /// - public Texture nativeTexture - { - get { return _root != null ? _root._nativeTexture : null; } - } - - /// - /// - /// - public Texture alphaTexture - { - get { return _root != null ? _root._alphaTexture : null; } - } - - /// - /// - /// - public MaterialManager GetMaterialManager(string shaderName) - { - if (_root != this) - { - if (_root == null) - return null; - else - return _root.GetMaterialManager(shaderName); - } - - if (_materialManagers == null) - _materialManagers = new Dictionary(); - - MaterialManager mm; - if (!_materialManagers.TryGetValue(shaderName, out mm)) - { - mm = new MaterialManager(this, ShaderConfig.GetShader(shaderName)); - _materialManagers.Add(shaderName, mm); - } - - return mm; - } - - /// - /// - /// - public void Unload() - { - Unload(false); - } - - /// - /// - /// - public void Unload(bool destroyMaterials) - { - if (this == _empty) - return; - - if (_root != this) - throw new Exception("Unload is not allow to call on none root NTexture."); - - if (_nativeTexture != null) - { - DestroyTexture(); - - if (destroyMaterials) - DestroyMaterials(); - else - RefreshMaterials(); - } - } - - /// - /// - /// - /// - /// - public void Reload(Texture nativeTexture, Texture alphaTexture) - { - if (_root != this) - throw new System.Exception("Reload is not allow to call on none root NTexture."); - - if (_nativeTexture != null && _nativeTexture != nativeTexture) - DestroyTexture(); - - _nativeTexture = nativeTexture; - _alphaTexture = alphaTexture; - - Vector2 lastSize = _originalSize; - if (_nativeTexture != null) - _originalSize = new Vector2(_nativeTexture.width, _nativeTexture.height); - else - _originalSize = Vector2.zero; - _region = new Rect(0, 0, _originalSize.x, _originalSize.y); - - RefreshMaterials(); - - if (onSizeChanged != null && lastSize != _originalSize) - onSizeChanged(this); - } - - void DestroyTexture() - { - switch (destroyMethod) - { - case DestroyMethod.Destroy: - Object.DestroyImmediate(_nativeTexture, true); - if (_alphaTexture != null) - Object.DestroyImmediate(_alphaTexture, true); - break; - case DestroyMethod.Unload: - Resources.UnloadAsset(_nativeTexture); - if (_alphaTexture != null) - Resources.UnloadAsset(_alphaTexture); - break; - case DestroyMethod.ReleaseTemp: - RenderTexture.ReleaseTemporary((RenderTexture)_nativeTexture); - if (_alphaTexture is RenderTexture) - RenderTexture.ReleaseTemporary((RenderTexture)_alphaTexture); - break; - case DestroyMethod.Custom: - if (CustomDestroyMethod == null) - Debug.LogWarning("NTexture.CustomDestroyMethod must be set to handle DestroyMethod.Custom"); - else - { - CustomDestroyMethod(_nativeTexture); - if (_alphaTexture != null) - CustomDestroyMethod(_alphaTexture); - } - break; - } - - _nativeTexture = null; - _alphaTexture = null; - } - - void RefreshMaterials() - { - if (_materialManagers != null && _materialManagers.Count > 0) - { - Dictionary.Enumerator iter = _materialManagers.GetEnumerator(); - while (iter.MoveNext()) - iter.Current.Value.RefreshMaterials(); - iter.Dispose(); - } - } - - void DestroyMaterials() - { - if (_materialManagers != null && _materialManagers.Count > 0) - { - Dictionary.Enumerator iter = _materialManagers.GetEnumerator(); - while (iter.MoveNext()) - iter.Current.Value.DestroyMaterials(); - iter.Dispose(); - } - } - - public void AddRef() - { - if (_root == null) //disposed - return; - - if (_root != this && refCount == 0) - _root.AddRef(); - - refCount++; - } - - public void ReleaseRef() - { - if (_root == null) //disposed - return; - - refCount--; - - if (refCount == 0) - { - if (_root != this) - _root.ReleaseRef(); - - if (onRelease != null) - onRelease(this); - } - } - - /// - /// - /// - public void Dispose() - { - if (this == _empty) - return; - - if (_root == this) - Unload(true); - _root = null; - onSizeChanged = null; - onRelease = null; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs.meta deleted file mode 100644 index d4340ed..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: cdb420f5e4ef87d419c4467d1b8f2ddf -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs b/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs deleted file mode 100644 index c7e83e0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs +++ /dev/null @@ -1,103 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public static class ShaderConfig - { - /// - /// - /// - /// - /// - public delegate Shader GetFunction(string name); - - /// - /// - /// - public static GetFunction Get = Shader.Find; - - /// - /// - /// - public static string imageShader = "FairyGUI/Image"; - - /// - /// - /// - public static string textShader = "FairyGUI/Text"; - - /// - /// - /// - public static string bmFontShader = "FairyGUI/BMFont"; - - /// - /// - /// - public static string TMPFontShader = "FairyGUI/TMP"; - - public static int ID_ClipBox; - public static int ID_ClipSoftness; - public static int ID_AlphaTex; - public static int ID_StencilComp; - public static int ID_Stencil; - public static int ID_StencilOp; - public static int ID_StencilReadMask; - public static int ID_ColorMask; - public static int ID_ColorMatrix; - public static int ID_ColorOffset; - public static int ID_BlendSrcFactor; - public static int ID_BlendDstFactor; - public static int ID_ColorOption; - - public static int ID_Stencil2; - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - Get = Shader.Find; - } -#endif - - static ShaderConfig() - { - ID_ClipBox = Shader.PropertyToID("_ClipBox"); - ID_ClipSoftness = Shader.PropertyToID("_ClipSoftness"); - ID_AlphaTex = Shader.PropertyToID("_AlphaTex"); - ID_StencilComp = Shader.PropertyToID("_StencilComp"); - ID_Stencil = Shader.PropertyToID("_Stencil"); - ID_StencilOp = Shader.PropertyToID("_StencilOp"); - ID_StencilReadMask = Shader.PropertyToID("_StencilReadMask"); - ID_ColorMask = Shader.PropertyToID("_ColorMask"); - ID_ColorMatrix = Shader.PropertyToID("_ColorMatrix"); - ID_ColorOffset = Shader.PropertyToID("_ColorOffset"); - ID_BlendSrcFactor = Shader.PropertyToID("_BlendSrcFactor"); - ID_BlendDstFactor = Shader.PropertyToID("_BlendDstFactor"); - ID_ColorOption = Shader.PropertyToID("_ColorOption"); - - ID_Stencil2 = Shader.PropertyToID("_StencilRef"); - } - - /// - /// - /// - /// - /// - public static Shader GetShader(string name) - { - Shader shader = Get(name); - if (shader == null) - { - Debug.LogWarning("FairyGUI: shader not found: " + name); - shader = Shader.Find("UI/Default"); - } - shader.hideFlags = DisplayObject.hideFlags; - - return shader; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs.meta deleted file mode 100644 index eec7dfb..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c4eae4be32683c04a96ac1c4cd1834ab -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs deleted file mode 100644 index 365e52a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs +++ /dev/null @@ -1,250 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class Shape : DisplayObject - { - /// - /// - /// - public Shape() - { - CreateGameObject("Shape"); - graphics = new NGraphics(gameObject); - graphics.texture = NTexture.Empty; - graphics.meshFactory = null; - } - - /// - /// - /// - public Color color - { - get - { - return graphics.color; - } - set - { - graphics.color = value; - graphics.SetMeshDirty(); - } - } - - /// - /// - /// - /// - /// - /// - public void DrawRect(float lineSize, Color lineColor, Color fillColor) - { - RectMesh mesh = graphics.GetMeshFactory(); - mesh.lineWidth = lineSize; - mesh.lineColor = lineColor; - mesh.fillColor = null; - mesh.colors = null; - - graphics.color = fillColor; - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - /// - public void DrawRect(float lineSize, Color32[] colors) - { - RectMesh mesh = graphics.GetMeshFactory(); - mesh.lineWidth = lineSize; - mesh.colors = colors; - - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void DrawRoundRect(float lineSize, Color lineColor, Color fillColor, - float topLeftRadius, float topRightRadius, float bottomLeftRadius, float bottomRightRadius) - { - RoundedRectMesh mesh = graphics.GetMeshFactory(); - mesh.lineWidth = lineSize; - mesh.lineColor = lineColor; - mesh.fillColor = null; - mesh.topLeftRadius = topLeftRadius; - mesh.topRightRadius = topRightRadius; - mesh.bottomLeftRadius = bottomLeftRadius; - mesh.bottomRightRadius = bottomRightRadius; - - graphics.color = fillColor; - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - public void DrawEllipse(Color fillColor) - { - EllipseMesh mesh = graphics.GetMeshFactory(); - mesh.lineWidth = 0; - mesh.startDegree = 0; - mesh.endDegreee = 360; - mesh.fillColor = null; - mesh.centerColor = null; - - graphics.color = fillColor; - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void DrawEllipse(float lineSize, Color centerColor, Color lineColor, Color fillColor, float startDegree, float endDegree) - { - EllipseMesh mesh = graphics.GetMeshFactory(); - mesh.lineWidth = lineSize; - if (centerColor.Equals(fillColor)) - mesh.centerColor = null; - else - mesh.centerColor = centerColor; - mesh.lineColor = lineColor; - mesh.fillColor = null; - mesh.startDegree = startDegree; - mesh.endDegreee = endDegree; - - graphics.color = fillColor; - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - /// - public void DrawPolygon(IList points, Color fillColor) - { - PolygonMesh mesh = graphics.GetMeshFactory(); - mesh.points.Clear(); - mesh.points.AddRange(points); - mesh.fillColor = null; - mesh.colors = null; - - graphics.color = fillColor; - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - /// - public void DrawPolygon(IList points, Color32[] colors) - { - PolygonMesh mesh = graphics.GetMeshFactory(); - mesh.points.Clear(); - mesh.points.AddRange(points); - mesh.fillColor = null; - mesh.colors = colors; - - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - /// - /// - /// - public void DrawPolygon(IList points, Color fillColor, float lineSize, Color lineColor) - { - PolygonMesh mesh = graphics.GetMeshFactory(); - mesh.points.Clear(); - mesh.points.AddRange(points); - mesh.fillColor = null; - mesh.lineWidth = lineSize; - mesh.lineColor = lineColor; - mesh.colors = null; - - graphics.color = fillColor; - graphics.SetMeshDirty(); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void DrawRegularPolygon(int sides, float lineSize, Color? centerColor, Color lineColor, Color fillColor, float rotation, float[] distances) - { - RegularPolygonMesh mesh = graphics.GetMeshFactory(); - mesh.sides = sides; - mesh.lineWidth = lineSize; - mesh.centerColor = centerColor; - mesh.lineColor = lineColor; - mesh.fillColor = null; - mesh.rotation = rotation; - mesh.distances = distances; - - graphics.color = fillColor; - graphics.SetMeshDirty(); - } - - /// - /// - /// - public void Clear() - { - graphics.meshFactory = null; - } - - /// - /// - /// - public bool isEmpty - { - get { return graphics.meshFactory == null; } - } - - protected override DisplayObject HitTest() - { - if (graphics.meshFactory == null) - return null; - - Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); - - IHitTest ht = graphics.meshFactory as IHitTest; - if (ht != null) - return ht.HitTest(_contentRect, localPoint) ? this : null; - else if (_contentRect.Contains(localPoint)) - return this; - else - return null; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs.meta deleted file mode 100644 index 7e6d83d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: cbcf11c269a33474aa9adaafd9867711 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs deleted file mode 100644 index 5dd5d26..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs +++ /dev/null @@ -1,1815 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; -using UnityEngine.SceneManagement; - -#if FAIRYGUI_INPUT_SYSTEM -using UnityEngine.InputSystem; -using UnityEngine.InputSystem.EnhancedTouch; -using TouchPhase = UnityEngine.InputSystem.TouchPhase; -using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch; -#endif - -namespace FairyGUI -{ - /// - /// - /// - public class Stage : Container - { - [Obsolete("Use size.y")] - public int stageHeight { get { return (int)_contentRect.height; } } - - [Obsolete("Use size.x")] - public int stageWidth { get { return (int)_contentRect.width; } } - - /// - /// - /// - public float soundVolume { get; set; } - - public event Action beforeUpdate; - public event Action afterUpdate; - - DisplayObject _touchTarget; - DisplayObject _focused; - InputTextField _lastInput; - UpdateContext _updateContext; - List _rollOutChain; - List _rollOverChain; - TouchInfo[] _touches; - int _touchCount; - Vector2 _touchPosition; - int _frameGotHitTarget; - int _frameGotTouchPosition; - bool _customInput; - Vector2 _customInputPos; - bool _customInputButtonDown; - AudioSource _audio; - List _toCollectTextures = new List(); - EventListener _onStageResized; - List _focusOutChain; - List _focusInChain; - List _focusHistory; - Container _nextFocus; - class CursorDef - { - public Texture2D texture; - public Vector2 hotspot; - } - Dictionary _cursors; - string _currentCursor; - - static bool _touchScreen; - static bool _keyboardInput; - static bool _touchSupportDetected; - internal static int _clickTestThreshold; - static IKeyboard _keyboard; - static bool _keyboardOpened; - - static Stage _inst; - /// - /// - /// - public static Stage inst - { - get - { - if (_inst == null) - Instantiate(); - - return _inst; - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - if (_inst != null) - { - _inst.Dispose(); - _inst = null; - } - - _touchSupportDetected = false; - } -#endif - - /// - /// - /// - public static void Instantiate() - { - if (_inst == null) - { - _inst = new Stage(); - GRoot._inst = new GRoot(); - GRoot._inst.ApplyContentScaleFactor(); - _inst.AddChild(GRoot._inst.displayObject); - - StageCamera.CheckMainCamera(); - } - } - - /// - /// 如果是true,表示触摸输入,将使用Input.GetTouch接口读取触摸屏输入。 - /// 如果是false,表示使用鼠标输入,将使用Input.GetMouseButtonXXX接口读取鼠标输入。 - /// 一般来说,不需要设置,底层会自动根据系统环境设置正确的值。 - /// - public static bool touchScreen - { - get { return _touchScreen; } - set - { - _touchScreen = value; - if (_touchScreen) - { -#if !(UNITY_WEBPLAYER || UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || UNITY_EDITOR) - keyboardInput = true; -#endif - _clickTestThreshold = 50; - _touchSupportDetected = true; - } - else - { - keyboardInput = false; - _keyboardOpened = false; - inst.ResetInputState(); - _clickTestThreshold = 10; - } - } - } - - /// - /// 如果是true,表示使用屏幕上弹出的键盘输入文字。常见于移动设备。 - /// 如果是false,表示是接受按键消息输入文字。常见于PC。 - /// 一般来说,不需要设置,底层会自动根据系统环境设置正确的值。 - /// - public static bool keyboardInput - { - get { return _keyboardInput; } - set - { - _keyboardInput = value; - if (value && _keyboard == null) - { -#if !(UNITY_WEBPLAYER || UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || UNITY_EDITOR) - _keyboard = new TouchScreenKeyboard(); -#endif - } - } - } - - /// - /// - /// - public static IKeyboard keyboard - { - get { return _keyboard; } - set { _keyboard = value; } - } - - /// - /// - /// - public static bool isTouchOnUI - { - get - { - return _inst != null && _inst.touchTarget != null; - } - } - - /// - /// As unity does not provide ways to detect this, you should set it by yourself. - /// This will effect: - /// 1. compoistion cursor pos. - /// 2. mouse wheel speed. - /// - public static float devicePixelRatio - { - get; set; - } - - /// - /// The scale of the mouse scroll delta. - /// - public static float mouseWheelScale - { - get; set; - } - - /// - /// - /// - public Stage() : base() - { - _inst = this; - soundVolume = 1; - - _updateContext = new UpdateContext(); - _frameGotHitTarget = -1; - - _touches = new TouchInfo[5]; - for (int i = 0; i < _touches.Length; i++) - _touches[i] = new TouchInfo(); - -#if FAIRYGUI_INPUT_SYSTEM - if (Touchscreen.current != null && !EnhancedTouchSupport.enabled) - EnhancedTouchSupport.Enable(); -#endif - - bool isOSX = Application.platform == RuntimePlatform.OSXPlayer - || Application.platform == RuntimePlatform.OSXEditor; - - if (Application.platform == RuntimePlatform.WindowsPlayer - || Application.platform == RuntimePlatform.WindowsEditor - || Application.platform == RuntimePlatform.WebGLPlayer - || isOSX) - touchScreen = false; - else - { -#if FAIRYGUI_INPUT_SYSTEM - touchScreen = Touchscreen.current != null; -#else - touchScreen = Input.touchSupported; -#endif - } - - // 在PC上,是否retina屏对输入法位置,鼠标滚轮速度都有影响,但现在没发现Unity有获得的方式。仅判断是否Mac可能不够(外接显示器的情况)。所以最好自行设置。 - devicePixelRatio = (isOSX && Screen.dpi > 96) ? 2 : 1; - mouseWheelScale = 1; - - _rollOutChain = new List(); - _rollOverChain = new List(); - _focusOutChain = new List(); - _focusInChain = new List(); - _focusHistory = new List(); - _cursors = new Dictionary(); - - SetSize(Screen.width, Screen.height); - cachedTransform.localScale = new Vector3(StageCamera.DefaultUnitsPerPixel, StageCamera.DefaultUnitsPerPixel, StageCamera.DefaultUnitsPerPixel); - -#if UNITY_2022_2_OR_NEWER - StageEngine engine = GameObject.FindFirstObjectByType(); -#else - StageEngine engine = GameObject.FindObjectOfType(); -#endif - if (engine != null) - UnityEngine.Object.Destroy(engine.gameObject); - - gameObject.name = "Stage"; - gameObject.layer = LayerMask.NameToLayer(StageCamera.LayerName); - gameObject.AddComponent(); - gameObject.AddComponent(); - gameObject.SetActive(true); - UnityEngine.Object.DontDestroyOnLoad(gameObject); - - EnableSound(); - - Timers.inst.Add(5, 0, RunTextureCollector); - - SceneManager.sceneLoaded += SceneManager_sceneLoaded; - -#if FAIRYGUI_INPUT_SYSTEM - InputTextField.RegisterEvent(); -#endif - } - - void SceneManager_sceneLoaded(Scene scene, LoadSceneMode mode) - { - StageCamera.CheckMainCamera(); - } - - public override void Dispose() - { - base.Dispose(); - -#if FAIRYGUI_INPUT_SYSTEM - InputTextField.UnregisterEvent(); -#endif - - Timers.inst.Remove(RunTextureCollector); - - SceneManager.sceneLoaded -= SceneManager_sceneLoaded; - } - - /// - /// - /// - public EventListener onStageResized - { - get { return _onStageResized ?? (_onStageResized = new EventListener(this, "onStageResized")); } - } - - /// - /// - /// - public DisplayObject touchTarget - { - get - { - if (_frameGotHitTarget != Time.frameCount) - GetHitTarget(); - - if (_touchTarget == this) - return null; - else - return _touchTarget; - } - } - - /// - /// - /// - public DisplayObject focus - { - get - { - if (_focused != null && _focused.isDisposed) - _focused = null; - return _focused; - } - set - { - SetFocus(value); - } - } - - public void SetFocus(DisplayObject newFocus, bool byKey = false) - { - if (newFocus == this) - newFocus = null; - - _nextFocus = null; - - if (_focused == newFocus) - return; - - Container navRoot = null; - DisplayObject element = newFocus; - while (element != null) - { - if (!element.focusable) - return; - else if ((element is Container) && ((Container)element).tabStopChildren) - { - if (navRoot == null) - navRoot = element as Container; - } - - element = element.parent; - } - - DisplayObject oldFocus = _focused; - _focused = newFocus; - - if (navRoot != null) - { - navRoot._lastFocus = _focused; - int pos = _focusHistory.IndexOf(navRoot); - if (pos != -1) - { - if (pos < _focusHistory.Count - 1) - _focusHistory.RemoveRange(pos + 1, _focusHistory.Count - pos - 1); - } - else - { - _focusHistory.Add(navRoot); - if (_focusHistory.Count > 10) - _focusHistory.RemoveAt(0); - } - } - - _focusInChain.Clear(); - _focusOutChain.Clear(); - - element = oldFocus; - while (element != null) - { - if (element.focusable) - _focusOutChain.Add(element); - element = element.parent; - } - - element = _focused; - int i; - while (element != null) - { - i = _focusOutChain.IndexOf(element); - if (i != -1) - { - _focusOutChain.RemoveRange(i, _focusOutChain.Count - i); - break; - } - if (element.focusable) - _focusInChain.Add(element); - - element = element.parent; - } - - int cnt = _focusOutChain.Count; - if (cnt > 0) - { - for (i = 0; i < cnt; i++) - { - element = _focusOutChain[i]; - if (element.stage != null) - { - element.DispatchEvent("onFocusOut", null); - if (_focused != newFocus) //focus changed in event - return; - } - } - _focusOutChain.Clear(); - } - - cnt = _focusInChain.Count; - if (cnt > 0) - { - for (i = 0; i < cnt; i++) - { - element = _focusInChain[i]; - if (element.stage != null) - { - element.DispatchEvent("onFocusIn", byKey ? "key" : null); - if (_focused != newFocus) //focus changed in event - return; - } - } - _focusInChain.Clear(); - } - - if (_focused is InputTextField) - _lastInput = (InputTextField)_focused; - } - - internal void _OnFocusRemoving(Container sender) - { - _nextFocus = sender; - if (_focusHistory.Count > 0) - { - int i = _focusHistory.Count - 1; - DisplayObject test = _focusHistory[i]; - DisplayObject element = _focused; - while (element != null && element != sender) - { - if ((element is Container) && ((Container)element).tabStopChildren && element == test) - { - i--; - if (i < 0) - break; - - test = _focusHistory[i]; - } - - element = element.parent; - } - - if (i != _focusHistory.Count - 1) - { - _focusHistory.RemoveRange(i + 1, _focusHistory.Count - i - 1); - if (_focusHistory.Count > 0) - _nextFocus = _focusHistory[_focusHistory.Count - 1]; - } - } - - if (_focused is InputTextField) - _lastInput = null; - _focused = null; - } - - /// - /// - /// - /// - public void DoKeyNavigate(bool backward) - { - Container navBase = null; - DisplayObject element = _focused; - while (element != null) - { - if ((element is Container) && ((Container)element).tabStopChildren) - { - navBase = element as Container; - break; - } - - element = element.parent; - } - - if (navBase == null) - navBase = this; - - var it = navBase.GetDescendants(backward); - bool started = _focused == null; - DisplayObject test2 = _focused != null ? _focused.parent : null; - - while (it.MoveNext()) - { - DisplayObject dobj = it.Current; - if (started) - { - if (dobj == test2) - test2 = test2.parent; - else if (dobj._AcceptTab()) - return; - } - else if (dobj == _focused) - started = true; - } - - if (started) - { - it.Reset(); - while (it.MoveNext()) - { - DisplayObject dobj = it.Current; - if (dobj == _focused) - break; - - if (dobj == test2) - test2 = test2.parent; - else if (dobj._AcceptTab()) - return; - } - } - } - - /// - /// - /// - public Vector2 touchPosition - { - get - { - UpdateTouchPosition(); - return _touchPosition; - } - } - - /// - /// - /// - /// - /// - public Vector2 GetTouchPosition(int touchId) - { - UpdateTouchPosition(); - - if (touchId < 0) - return _touchPosition; - - for (int j = 0; j < 5; j++) - { - TouchInfo touch = _touches[j]; - if (touch.touchId == touchId) - return new Vector2(touch.x, touch.y); - } - - return _touchPosition; - } - - /// - /// - /// - /// - /// - public DisplayObject GetTouchTarget(int touchId) - { - if (_frameGotHitTarget != Time.frameCount) - GetHitTarget(); - - for (int j = 0; j < 5; j++) - { - TouchInfo touch = _touches[j]; - if (touch.touchId == touchId) - return touch.target != this ? touch.target : null; - } - - return null; - } - - - /// - /// - /// - public int touchCount - { - get { return _touchCount; } - } - - public int[] GetAllTouch(int[] result) - { - if (result == null) - result = new int[_touchCount]; - int i = 0; - for (int j = 0; j < 5; j++) - { - TouchInfo touch = _touches[j]; - if (touch.touchId != -1) - { - result[i++] = touch.touchId; - if (i >= result.Length) - break; - } - } - return result; - } - - /// - /// - /// - public void ResetInputState() - { - for (int j = 0; j < 5; j++) - _touches[j].Reset(); - - if (!touchScreen) - _touches[0].touchId = 0; - - _touchCount = 0; - } - - - /// - /// - /// - /// - public void CancelClick(int touchId) - { - for (int j = 0; j < 5; j++) - { - TouchInfo touch = _touches[j]; - if (touch.touchId == touchId) - touch.clickCancelled = true; - } - } - - /// - /// - /// - public void EnableSound() - { - if (_audio == null) - { - _audio = gameObject.AddComponent(); - _audio.bypassEffects = true; - } - } - - /// - /// - /// - public void DisableSound() - { - if (_audio != null) - { - UnityEngine.Object.Destroy(_audio); - _audio = null; - } - } - - /// - /// - /// - /// - /// - public void PlayOneShotSound(AudioClip clip, float volumeScale) - { - if (_audio != null && this.soundVolume > 0) - _audio.PlayOneShot(clip, volumeScale * this.soundVolume); - } - - /// - /// - /// - /// - public void PlayOneShotSound(AudioClip clip) - { - if (_audio != null && this.soundVolume > 0) - _audio.PlayOneShot(clip, this.soundVolume); - } - - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void OpenKeyboard(string text, bool autocorrection, bool multiline, bool secure, - bool alert, string textPlaceholder, int keyboardType, bool hideInput) - { - if (_keyboard != null) - { - _keyboard.Open(text, autocorrection, multiline, secure, alert, textPlaceholder, keyboardType, hideInput); - _keyboardOpened = true; - } - } - - /// - /// - /// - public void CloseKeyboard() - { - if (_keyboard != null) - { - _keyboard.Close(); - } - } - - /// - /// 输入字符到当前光标位置 - /// - /// - public void InputString(string value) - { - if (_lastInput != null) - _lastInput.ReplaceSelection(value); - } - - /// - /// - /// - /// - /// - public void SetCustomInput(Vector2 screenPos, bool buttonDown) - { - _customInput = true; - _customInputButtonDown = buttonDown; - _customInputPos = screenPos; - _frameGotHitTarget = 0; - } - - /// - /// - /// - /// - /// - /// - public void SetCustomInput(Vector2 screenPos, bool buttonDown, bool buttonUp) - { - _customInput = true; - if (buttonDown) - _customInputButtonDown = true; - else if (buttonUp) - _customInputButtonDown = false; - _customInputPos = screenPos; - _frameGotHitTarget = 0; - } - - /// - /// - /// - /// - /// - public void SetCustomInput(ref RaycastHit hit, bool buttonDown) - { - Vector2 screenPos = HitTestContext.cachedMainCamera.WorldToScreenPoint(hit.point); - HitTestContext.CacheRaycastHit(HitTestContext.cachedMainCamera, ref hit); - SetCustomInput(screenPos, buttonDown); - } - - /// - /// - /// - /// - /// - /// - public void SetCustomInput(ref RaycastHit hit, bool buttonDown, bool buttonUp) - { - Vector2 screenPos = HitTestContext.cachedMainCamera.WorldToScreenPoint(hit.point); - HitTestContext.CacheRaycastHit(HitTestContext.cachedMainCamera, ref hit); - SetCustomInput(screenPos, buttonDown, buttonUp); - } - - public void ForceUpdate() - { - _updateContext.Begin(); - Update(_updateContext); - _updateContext.End(); - } - - internal void InternalUpdate() - { - HandleEvents(); - - if (_nextFocus != null) - { - if (_nextFocus.stage != null) - { - if (_nextFocus.tabStopChildren) - { - if (_nextFocus._lastFocus != null && _nextFocus.IsAncestorOf(_nextFocus._lastFocus)) - SetFocus(_nextFocus._lastFocus); - else - SetFocus(_nextFocus); - } - else - SetFocus(_nextFocus); - } - _nextFocus = null; - } - - if (beforeUpdate != null) - beforeUpdate(); - - _updateContext.Begin(); - Update(_updateContext); - _updateContext.End(); - - if (BaseFont.textRebuildFlag) - { - //字体贴图更改了,重新渲染一遍,防止本帧文字显示错误 - _updateContext.Begin(); - Update(_updateContext); - _updateContext.End(); - - BaseFont.textRebuildFlag = false; - } - - if (afterUpdate != null) - afterUpdate(); - } - - void GetHitTarget() - { - if (_frameGotHitTarget == Time.frameCount) - return; - - _frameGotHitTarget = Time.frameCount; - - if (_customInput) - { - Vector2 pos = _customInputPos; - pos.y = _contentRect.height - pos.y; - - TouchInfo touch = _touches[0]; - _touchTarget = HitTest(pos, true); - touch.target = _touchTarget; - } - else if (touchScreen) - { - _touchTarget = null; - -#if FAIRYGUI_INPUT_SYSTEM - foreach (Touch uTouch in Touch.activeTouches) - { - Vector2 pos = uTouch.screenPosition; - int touchId = uTouch.touchId; -#else - for (int i = 0; i < Input.touchCount; ++i) - { - Touch uTouch = Input.GetTouch(i); - Vector2 pos = uTouch.position; - int touchId = uTouch.fingerId; -#endif - - pos.y = _contentRect.height - pos.y; - - TouchInfo touch = null; - TouchInfo free = null; - for (int j = 0; j < 5; j++) - { - if (_touches[j].touchId == touchId) - { - touch = _touches[j]; - break; - } - - if (_touches[j].touchId == -1) - free = _touches[j]; - } - if (touch == null) - { - touch = free; - if (touch == null || uTouch.phase != TouchPhase.Began) - continue; - - touch.touchId = touchId; - } - - if (uTouch.phase == TouchPhase.Stationary) - _touchTarget = touch.target; - else - { - _touchTarget = HitTest(pos, true); - touch.target = _touchTarget; - } - } - } - else - { - Vector2 pos = Vector2.zero; -#if FAIRYGUI_INPUT_SYSTEM - Mouse mouse = Mouse.current; - if (mouse != null) - pos = mouse.position.ReadValue(); -#else - pos = Input.mousePosition; -#endif - pos.y = Screen.height - pos.y; - TouchInfo touch = _touches[0]; - if (float.IsNaN(pos.x) || float.IsNaN(pos.y) || float.IsInfinity(pos.x) || float.IsInfinity(pos.y)) //not a valid position - _touchTarget = this; - else if (pos.x < 0 || pos.y < 0) // outside of the window - _touchTarget = this; - else - _touchTarget = HitTest(pos, true); - touch.target = _touchTarget; - } - - HitTestContext.ClearRaycastHitCache(); - } - - internal void HandleScreenSizeChanged(int screenWidth, int screenHeight, float unitsPerPixel) - { - SetSize(screenWidth, screenHeight); - this.cachedTransform.localScale = new Vector3(unitsPerPixel, unitsPerPixel, unitsPerPixel); - - if (!DispatchEvent("onStageResized", null)) - { - UIContentScaler scaler = this.gameObject.GetComponent(); - scaler.ApplyChange(); - GRoot.inst.ApplyContentScaleFactor(); - } - } - - internal void HandleGUIEvents(Event evt) - { - if (evt.rawType == EventType.KeyDown) - { - if (InputTextField.EatKeyEvent(evt)) - return; - - TouchInfo touch = _touches[0]; - touch.keyCode = evt.keyCode; - touch.modifiers = evt.modifiers; - touch.character = evt.character; - - touch.UpdateEvent(); - DisplayObject f = this.focus; - if (f != null) - f.BubbleEvent("onKeyDown", touch.evt); - else - DispatchEvent("onKeyDown", touch.evt); - } - else if (evt.rawType == EventType.KeyUp) - { - if (InputTextField.EatKeyEvent(evt)) - return; - - TouchInfo touch = _touches[0]; - touch.keyCode = evt.keyCode; - touch.modifiers = evt.modifiers; - touch.character = evt.character; - - touch.UpdateEvent(); - DisplayObject f = this.focus; - if (f != null) - f.BubbleEvent("onKeyUp", touch.evt); - else - DispatchEvent("onKeyUp", touch.evt); - } -#if UNITY_2017_1_OR_NEWER - else if (evt.type == EventType.ScrollWheel) -#else - else if (evt.type == EventType.scrollWheel) -#endif - { - if (_touchTarget != null) - { - TouchInfo touch = _touches[0]; - touch.mouseWheelDelta = evt.delta.y * Stage.mouseWheelScale; - touch.UpdateEvent(); - _touchTarget.BubbleEvent("onMouseWheel", touch.evt); - touch.mouseWheelDelta = 0; - } - } - } - - void HandleEvents() - { - GetHitTarget(); - - UpdateTouchPosition(); - - if (_customInput) - { - HandleCustomInput(); - _customInput = false; - } - else - { - if (!_touchSupportDetected) - { - if (Application.platform == RuntimePlatform.WebGLPlayer) - { -#if FAIRYGUI_INPUT_SYSTEM - if (Touch.activeTouches.Count > 0) - touchScreen = true; -#else - if (Input.touchCount > 0) - touchScreen = true; -#endif - } - else - _touchSupportDetected = true; - } - if (touchScreen) - HandleTouchEvents(); - else - HandleMouseEvents(); - } - - if (_keyboardOpened) - HandleKeyboardInput(); - } - - void UpdateTouchPosition() - { - if (_frameGotTouchPosition != Time.frameCount) - { - _frameGotTouchPosition = Time.frameCount; - if (_customInput) - { - _touchPosition = _customInputPos; - _touchPosition.y = _contentRect.height - _touchPosition.y; - } - else if (touchScreen) - { -#if FAIRYGUI_INPUT_SYSTEM - if (Touch.activeTouches.Count > 0) - { - _touchPosition = Touch.activeTouches[Touch.activeTouches.Count - 1].screenPosition; - _touchPosition.y = _contentRect.height - _touchPosition.y; - } -#else - if (Input.touchCount > 0) - { - _touchPosition = Input.GetTouch(Input.touchCount - 1).position; - _touchPosition.y = _contentRect.height - _touchPosition.y; - } -#endif - } - else - { - Vector2 pos = Vector2.zero; -#if FAIRYGUI_INPUT_SYSTEM - Mouse mouse = Mouse.current; - if (mouse != null) - pos = mouse.position.ReadValue(); -#else - pos = Input.mousePosition; -#endif - if (pos.x >= 0 && pos.y >= 0) // 编辑器环境下坐标有时是负 - { - pos.y = _contentRect.height - pos.y; - _touchPosition = pos; - } - } - } - } - - void HandleKeyboardInput() - { - string s = _keyboard.GetInput(); - if (s != null) - { - InputTextField textField = _focused as InputTextField; - if (textField != null) - { - if (_keyboard.supportsCaret) - textField.ReplaceSelection(s); - else - textField.ReplaceText(s); - } - } - - if (_keyboard.done) - { - SetFocus(null); - _keyboardOpened = false; - } - } - - void HandleCustomInput() - { - Vector2 pos = _customInputPos; - pos.y = _contentRect.height - pos.y; - TouchInfo touch = _touches[0]; - - if (touch.x != pos.x || touch.y != pos.y) - { - touch.x = pos.x; - touch.y = pos.y; - touch.Move(); - } - - if (touch.lastRollOver != touch.target) - HandleRollOver(touch); - - if (_customInputButtonDown) - { - if (!touch.began) - { - _touchCount = 1; - touch.Begin(); - touch.button = 0; - touch.touchId = 0; - SetFocus(touch.target); - - touch.UpdateEvent(); - touch.target.BubbleEvent("onTouchBegin", touch.evt); - } - } - else if (touch.began) - { - _touchCount = 0; - touch.End(); - - DisplayObject clickTarget = touch.ClickTest(); - if (clickTarget != null) - { - touch.UpdateEvent(); - clickTarget.BubbleEvent("onClick", touch.evt); - } - - touch.button = -1; - } - } - - void HandleMouseEvents() - { - TouchInfo touch = _touches[0]; - if (touch.x != _touchPosition.x || touch.y != _touchPosition.y) - { - touch.x = _touchPosition.x; - touch.y = _touchPosition.y; - touch.Move(); - } - - if (touch.lastRollOver != touch.target) - HandleRollOver(touch); - -#if FAIRYGUI_INPUT_SYSTEM - Mouse mouse = Mouse.current; - if (mouse == null) - return; - - if (mouse.leftButton.wasPressedThisFrame || mouse.rightButton.wasPressedThisFrame || mouse.middleButton.wasPressedThisFrame) -#else - if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2)) -#endif - { - if (!touch.began) - { - _touchCount = 1; - touch.Begin(); -#if FAIRYGUI_INPUT_SYSTEM - touch.button = mouse.middleButton.wasPressedThisFrame ? 2 : (mouse.rightButton.wasPressedThisFrame ? 1 : 0); -#else - touch.button = Input.GetMouseButtonDown(2) ? 2 : (Input.GetMouseButtonDown(1) ? 1 : 0); -#endif - SetFocus(touch.target); - - touch.UpdateEvent(); - touch.target.BubbleEvent("onTouchBegin", touch.evt); - } - } - -#if FAIRYGUI_INPUT_SYSTEM - if (mouse.leftButton.wasReleasedThisFrame || mouse.rightButton.wasReleasedThisFrame || mouse.middleButton.wasReleasedThisFrame) -#else - if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(2)) -#endif - { - if (touch.began) - { - _touchCount = 0; - touch.End(); - - DisplayObject clickTarget = touch.ClickTest(); - if (clickTarget != null) - { - touch.UpdateEvent(); - -#if FAIRYGUI_INPUT_SYSTEM - if (mouse.rightButton.wasReleasedThisFrame || mouse.middleButton.wasReleasedThisFrame) -#else - if (Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(2)) -#endif - clickTarget.BubbleEvent("onRightClick", touch.evt); - else - clickTarget.BubbleEvent("onClick", touch.evt); - } - - touch.button = -1; - } - } - - // We have to do this, coz the cursor will auto change back after a click or dragging -#if FAIRYGUI_INPUT_SYSTEM - if (mouse.leftButton.wasReleasedThisFrame && _currentCursor != null) -#else - if (Input.GetMouseButtonUp(0) && _currentCursor != null) -#endif - _ChangeCursor(_currentCursor); - } - - void HandleTouchEvents() - { -#if FAIRYGUI_INPUT_SYSTEM - foreach (Touch uTouch in Touch.activeTouches) - { -#else - for (int i = 0; i < Input.touchCount; i++) - { - Touch uTouch = Input.GetTouch(i); -#endif - - if (uTouch.phase == TouchPhase.Stationary) - continue; - -#if FAIRYGUI_INPUT_SYSTEM - Vector2 pos = uTouch.screenPosition; -#else - Vector2 pos = uTouch.position; -#endif - pos.y = _contentRect.height - pos.y; - - TouchInfo touch = null; - for (int j = 0; j < 5; j++) - { -#if FAIRYGUI_INPUT_SYSTEM - if (_touches[j].touchId == uTouch.touchId) -#else - if (_touches[j].touchId == uTouch.fingerId) -#endif - { - touch = _touches[j]; - break; - } - } - if (touch == null) - continue; - - if (touch.x != pos.x || touch.y != pos.y) - { - touch.x = pos.x; - touch.y = pos.y; - if (touch.began) - touch.Move(); - } - - if (touch.lastRollOver != touch.target) - HandleRollOver(touch); - - if (uTouch.phase == TouchPhase.Began) - { - if (!touch.began) - { - _touchCount++; - touch.Begin(); - touch.button = 0; - SetFocus(touch.target); - - touch.UpdateEvent(); - touch.target.BubbleEvent("onTouchBegin", touch.evt); - } - } - else if (uTouch.phase == TouchPhase.Canceled || uTouch.phase == TouchPhase.Ended) - { - if (touch.began) - { - _touchCount--; - touch.End(); - - if (uTouch.phase != TouchPhase.Canceled) - { - DisplayObject clickTarget = touch.ClickTest(); - if (clickTarget != null) - { - touch.clickCount = uTouch.tapCount; - touch.UpdateEvent(); - clickTarget.BubbleEvent("onClick", touch.evt); - } - } - - touch.target = null; - HandleRollOver(touch); - - touch.touchId = -1; - } - } - } - } - - void HandleRollOver(TouchInfo touch) - { - DisplayObject element; - _rollOverChain.Clear(); - _rollOutChain.Clear(); - - element = touch.lastRollOver; - while (element != null) - { - _rollOutChain.Add(element); - element = element.parent; - } - - touch.lastRollOver = touch.target; - - string cursor = this.cursor; - if (cursor == null) - { - element = touch.target; - while (element != null) - { - if (element.cursor != null && cursor == null) - cursor = element.cursor; - element = element.parent; - } - } - - element = touch.target; - int i; - while (element != null) - { - i = _rollOutChain.IndexOf(element); - if (i != -1) - { - _rollOutChain.RemoveRange(i, _rollOutChain.Count - i); - break; - } - _rollOverChain.Add(element); - - element = element.parent; - } - - int cnt = _rollOutChain.Count; - if (cnt > 0) - { - for (i = 0; i < cnt; i++) - { - element = _rollOutChain[i]; - if (element.stage != null) - element.DispatchEvent("onRollOut", null); - } - _rollOutChain.Clear(); - } - - cnt = _rollOverChain.Count; - if (cnt > 0) - { - for (i = 0; i < cnt; i++) - { - element = _rollOverChain[i]; - if (element.stage != null) - element.DispatchEvent("onRollOver", null); - } - _rollOverChain.Clear(); - } - - if (cursor != _currentCursor) - _ChangeCursor(cursor); - } - - /// - /// 设置UIPanel/UIPainter等的渲染层次,由UIPanel等内部调用。开发者不需要调用。 - /// - /// - /// - public void ApplyPanelOrder(Container target) - { - int sortingOrder = target._panelOrder; - int numChildren = this.numChildren; - int i = 0; - int j; - int curIndex = -1; - for (; i < numChildren; i++) - { - DisplayObject obj = GetChildAt(i); - if (obj == target) - { - curIndex = i; - continue; - } - - if (obj == GRoot.inst.displayObject) - j = 1000; - else if (obj is Container) - j = ((Container)obj)._panelOrder; - else - continue; - - if (sortingOrder <= j) - { - if (curIndex != -1) - AddChildAt(target, i - 1); - else - AddChildAt(target, i); - break; - } - } - if (i == numChildren) - AddChild(target); - } - - - static List sTempList1; - static List sTempList2; - static Dictionary sTempDict; - - /// - /// Adjust display order of all UIPanels rendering in worldspace by their z order. - /// - /// Only UIPanel.sortingOrder equals to this value will be involve in this sorting - public void SortWorldSpacePanelsByZOrder(int panelSortingOrder) - { - if (sTempList1 == null) - { - sTempList1 = new List(); - sTempList2 = new List(); - sTempDict = new Dictionary(); - } - - int numChildren = this.numChildren; - for (int i = 0; i < numChildren; i++) - { - Container obj = GetChildAt(i) as Container; - if (obj == null || obj.renderMode != RenderMode.WorldSpace || obj._panelOrder != panelSortingOrder) - continue; - - sTempDict[obj.id] = i; - - sTempList1.Add(obj); - sTempList2.Add(i); - } - - sTempList1.Sort((DisplayObject c1, DisplayObject c2) => - { - int ret = c2.cachedTransform.position.z.CompareTo(c1.cachedTransform.position.z); - if (ret == 0) - { - //如果大家z值一样,使用原来的顺序,防止不停交换顺序(闪烁) - return sTempDict[c1.id].CompareTo(sTempDict[c2.id]); - } - else - return ret; - }); - - ChangeChildrenOrder(sTempList2, sTempList1); - - sTempList1.Clear(); - sTempList2.Clear(); - sTempDict.Clear(); - } - - /// - /// - /// - /// - public void MonitorTexture(NTexture texture) - { - if (_toCollectTextures.IndexOf(texture) == -1) - _toCollectTextures.Add(texture); - } - - void RunTextureCollector(object param) - { - int cnt = _toCollectTextures.Count; - float curTime = Time.time; - int i = 0; - while (i < cnt) - { - NTexture texture = _toCollectTextures[i]; - if (texture.disposed) - { - _toCollectTextures.RemoveAt(i); - cnt--; - } - else if (curTime - texture.lastActive > 5) - { - texture.Dispose(); - _toCollectTextures.RemoveAt(i); - cnt--; - } - else - i++; - } - } - - public void AddTouchMonitor(int touchId, EventDispatcher target) - { - TouchInfo touch = null; - for (int j = 0; j < 5; j++) - { - touch = _touches[j]; - if (touchId == -1 && touch.touchId != -1 - || touchId != -1 && touch.touchId == touchId) - break; - } - if (touch.touchMonitors.IndexOf(target) == -1) - touch.touchMonitors.Add(target); - } - - public void RemoveTouchMonitor(EventDispatcher target) - { - for (int j = 0; j < 5; j++) - { - TouchInfo touch = _touches[j]; - int i = touch.touchMonitors.IndexOf(target); - if (i != -1) - touch.touchMonitors[i] = null; - } - } - - public bool IsTouchMonitoring(EventDispatcher target) - { - for (int j = 0; j < 5; j++) - { - TouchInfo touch = _touches[j]; - int i = touch.touchMonitors.IndexOf(target); - if (i != -1) - return true; - } - - return false; - } - - internal Transform CreatePoolManager(string name) - { - GameObject go = new GameObject("[" + name + "]"); - go.SetActive(false); - - Transform t = go.transform; - t.SetParent(cachedTransform, false); - - return t; - } - - /// - /// - /// - /// - /// - /// - public void RegisterCursor(string cursorName, Texture2D texture, Vector2 hotspot) - { - _cursors[cursorName] = new CursorDef() { texture = texture, hotspot = hotspot }; - } - - /// - /// - /// - /// - public string activeCursor - { - get { return _currentCursor; } - } - - /// - /// - /// - /// - internal void _ChangeCursor(string cursorName) - { - CursorDef cursorDef; - if (cursorName != null && _cursors.TryGetValue(cursorName, out cursorDef)) - { - if (_currentCursor == cursorName) - Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); - _currentCursor = cursorName; - Cursor.SetCursor(cursorDef.texture, cursorDef.hotspot, CursorMode.Auto); - } - else - { - _currentCursor = null; - Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); - } - } - } - - class TouchInfo - { - public float x; - public float y; - public int touchId; - public int clickCount; - public KeyCode keyCode; - public char character; - public EventModifiers modifiers; - public float mouseWheelDelta; - public int button; - - public float downX; - public float downY; - public float downTime; - public int downFrame; - public bool began; - public bool clickCancelled; - public float lastClickTime; - public float lastClickX; - public float lastClickY; - public int lastClickButton; - public float holdTime; - public DisplayObject target; - public List downTargets; - public DisplayObject lastRollOver; - public List touchMonitors; - - public InputEvent evt; - - static List sHelperChain = new List(); - - public TouchInfo() - { - evt = new InputEvent(); - downTargets = new List(); - touchMonitors = new List(); - Reset(); - } - - public void Reset() - { - touchId = -1; - x = 0; - y = 0; - clickCount = 0; - button = -1; - keyCode = KeyCode.None; - character = '\0'; - modifiers = 0; - mouseWheelDelta = 0; - lastClickTime = 0; - began = false; - target = null; - downTargets.Clear(); - lastRollOver = null; - clickCancelled = false; - touchMonitors.Clear(); - } - - public void UpdateEvent() - { - evt.touchId = this.touchId; - evt.x = this.x; - evt.y = this.y; - evt.clickCount = this.clickCount; - evt.keyCode = this.keyCode; - evt.character = this.character; - evt.modifiers = this.modifiers; - evt.mouseWheelDelta = this.mouseWheelDelta; - evt.button = this.button; - evt.holdTime = this.holdTime; - } - - public void Begin() - { - began = true; - clickCancelled = false; - downX = x; - downY = y; - downTime = Time.unscaledTime; - downFrame = Time.frameCount; - holdTime = 0; - - downTargets.Clear(); - if (target != null) - { - downTargets.Add(target); - DisplayObject obj = target; - while (obj != null) - { - downTargets.Add(obj); - obj = obj.parent; - } - } - } - - public void Move() - { - if (began) - holdTime = (Time.frameCount - downFrame) == 1 ? (1f / Application.targetFrameRate) : (Time.unscaledTime - downTime); - - UpdateEvent(); - - if (Mathf.Abs(x - downX) > 50 || Mathf.Abs(y - downY) > 50) clickCancelled = true; - - if (touchMonitors.Count > 0) - { - int len = touchMonitors.Count; - for (int i = 0; i < len; i++) - { - EventDispatcher e = touchMonitors[i]; - if (e != null) - { - if ((e is DisplayObject) && ((DisplayObject)e).stage == null) - continue; - if ((e is GObject) && !((GObject)e).onStage) - continue; - e.GetChainBridges("onTouchMove", sHelperChain, false); - } - } - - Stage.inst.BubbleEvent("onTouchMove", evt, sHelperChain); - sHelperChain.Clear(); - } - else - Stage.inst.DispatchEvent("onTouchMove", evt); - } - - public void End() - { - began = false; - - if (downTargets.Count == 0 - || clickCancelled - || Mathf.Abs(x - downX) > Stage._clickTestThreshold - || Mathf.Abs(y - downY) > Stage._clickTestThreshold) - { - clickCancelled = true; - lastClickTime = 0; - clickCount = 1; - } - else - { - if (Time.unscaledTime - lastClickTime < 0.35f - && Mathf.Abs(x - lastClickX) < Stage._clickTestThreshold - && Mathf.Abs(y - lastClickY) < Stage._clickTestThreshold - && lastClickButton == button) - { - if (clickCount == 2) - clickCount = 1; - else - clickCount++; - } - else - clickCount = 1; - lastClickTime = Time.unscaledTime; - lastClickX = x; - lastClickY = y; - lastClickButton = button; - } - - //当间隔一帧时,使用帧率计算时间,避免掉帧因素 - holdTime = (Time.frameCount - downFrame) == 1 ? (1f / Application.targetFrameRate) : (Time.unscaledTime - downTime); - UpdateEvent(); - - if (touchMonitors.Count > 0) - { - int len = touchMonitors.Count; - for (int i = 0; i < len; i++) - { - EventDispatcher e = touchMonitors[i]; - if (e != null) - e.GetChainBridges("onTouchEnd", sHelperChain, false); - } - target.BubbleEvent("onTouchEnd", evt, sHelperChain); - - touchMonitors.Clear(); - sHelperChain.Clear(); - } - else - target.BubbleEvent("onTouchEnd", evt); - } - - public DisplayObject ClickTest() - { - if (clickCancelled) - { - downTargets.Clear(); - return null; - } - - DisplayObject obj = downTargets[0]; - if (obj.stage != null) //依然派发到原来的downTarget,虽然可能它已经偏离当前位置,主要是为了正确处理点击缩放的效果 - { - downTargets.Clear(); - return obj; - } - - obj = target; - while (obj != null) - { - int i = downTargets.IndexOf(obj); - if (i != -1 && obj.stage != null) - break; - - obj = obj.parent; - } - - downTargets.Clear(); - - return obj; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs.meta deleted file mode 100644 index e7a4c01..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 6650441f8140eae4c896682b7fd5b3e6 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs b/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs deleted file mode 100644 index c72a41e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs +++ /dev/null @@ -1,201 +0,0 @@ -using System; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// Stage Camera is an orthographic camera for UI rendering. - /// - [ExecuteInEditMode] - [AddComponentMenu("FairyGUI/UI Camera")] - public class StageCamera : MonoBehaviour - { - /// - /// - /// - public bool constantSize = true; - - /// - /// - /// - [NonSerialized] - public float unitsPerPixel = 0.02f; - - [NonSerialized] - public Transform cachedTransform; - [NonSerialized] - public Camera cachedCamera; - - [NonSerialized] - int screenWidth; - [NonSerialized] - int screenHeight; - [NonSerialized] - bool isMain; - [NonSerialized] - Display _display; - - /// - /// - /// - [NonSerialized] - public static Camera main; - - /// - /// - /// - [NonSerialized] - public static int screenSizeVer = 1; - - public const string Name = "Stage Camera"; - public const string LayerName = "UI"; - - public static float DefaultCameraSize = 5; - public static float DefaultUnitsPerPixel = 0.02f; - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void Init() - { - main = null; - } -#endif - - void OnEnable() - { - cachedTransform = this.transform; - cachedCamera = this.GetComponent(); - if (this.gameObject.name == Name) - { - main = cachedCamera; - isMain = true; - } - - if (Display.displays.Length > 1 && cachedCamera.targetDisplay != 0 && cachedCamera.targetDisplay < Display.displays.Length) - _display = Display.displays[cachedCamera.targetDisplay]; - - if (_display == null) - OnScreenSizeChanged(Screen.width, Screen.height); - else - OnScreenSizeChanged(_display.renderingWidth, _display.renderingHeight); - } - - void Update() - { - if (_display == null) - { - if (screenWidth != Screen.width || screenHeight != Screen.height) - OnScreenSizeChanged(Screen.width, Screen.height); - } - else - { - if (screenWidth != _display.renderingWidth || screenHeight != _display.renderingHeight) - OnScreenSizeChanged(_display.renderingWidth, _display.renderingHeight); - } - } - - void OnScreenSizeChanged(int newWidth, int newHeight) - { - if (newWidth == 0 || newHeight == 0) - return; - - screenWidth = newWidth; - screenHeight = newHeight; - - if (constantSize) - { - cachedCamera.orthographicSize = DefaultCameraSize; - unitsPerPixel = cachedCamera.orthographicSize * 2 / screenHeight; - } - else - { - unitsPerPixel = DefaultUnitsPerPixel; - cachedCamera.orthographicSize = screenHeight / 2 * unitsPerPixel; - } - cachedTransform.localPosition = new Vector3(cachedCamera.orthographicSize * screenWidth / screenHeight, -cachedCamera.orthographicSize); - - if (isMain) - { - screenSizeVer++; - if (Application.isPlaying) - Stage.inst.HandleScreenSizeChanged(screenWidth, screenHeight, unitsPerPixel); - else - { -#if UNITY_2022_2_OR_NEWER - UIContentScaler scaler = GameObject.FindFirstObjectByType(); -#else - UIContentScaler scaler = GameObject.FindObjectOfType(); -#endif - if (scaler != null) - scaler.ApplyChange(); - else - UIContentScaler.scaleFactor = 1; - } - } - } - - void OnRenderObject() - { - //Update和OnGUI在EditMode的调用都不那么及时,OnRenderObject则比较频繁,可以保证界面及时刷新。所以使用OnRenderObject - if (isMain && !Application.isPlaying) - { - EMRenderSupport.Update(); - } - } - - public void ApplyModifiedProperties() - { - screenWidth = 0; //force OnScreenSizeChanged called in next update - } - - /// - /// Check if there is a stage camera in the scene. If none, create one. - /// - public static void CheckMainCamera() - { - if (GameObject.Find(Name) == null) - { - int layer = LayerMask.NameToLayer(LayerName); - CreateCamera(Name, 1 << layer); - } - - HitTestContext.cachedMainCamera = Camera.main; - } - - /// - /// - /// - public static void CheckCaptureCamera() - { - if (GameObject.Find(Name) == null) - { - int layer = LayerMask.NameToLayer(LayerName); - CreateCamera(Name, 1 << layer); - } - } - - /// - /// - /// - /// - /// - /// - public static Camera CreateCamera(string name, int cullingMask) - { - GameObject cameraObject = new GameObject(name); - Camera camera = cameraObject.AddComponent(); - camera.depth = 1; - camera.cullingMask = cullingMask; - camera.clearFlags = CameraClearFlags.Depth; - camera.orthographic = true; - camera.orthographicSize = DefaultCameraSize; - camera.nearClipPlane = -30; - camera.farClipPlane = 30; - camera.stereoTargetEye = StereoTargetEyeMask.None; - camera.allowHDR = false; - camera.allowMSAA = false; - cameraObject.AddComponent(); - return camera; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs.meta deleted file mode 100644 index c05e992..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 367e80e3fa958344491a9a196a902b72 -timeCreated: 1460480287 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs b/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs deleted file mode 100644 index 760bf95..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class StageEngine : MonoBehaviour - { - public int ObjectsOnStage; - public int GraphicsOnStage; - - public static bool beingQuit; - - void Start() - { - useGUILayout = false; - } - - void LateUpdate() - { - Stage.inst.InternalUpdate(); - - ObjectsOnStage = Stats.ObjectCount; - GraphicsOnStage = Stats.GraphicsCount; - } - - void OnGUI() - { - Stage.inst.HandleGUIEvents(Event.current); - } - - void OnApplicationQuit() - { - if (Application.isEditor) - { - beingQuit = true; - UIPackage.RemoveAllPackages(); - Stage.inst.Dispose(); - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - beingQuit = false; - } -#endif - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs.meta deleted file mode 100644 index db1d022..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0922848d650639f479e29635982d4a4c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 100 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs deleted file mode 100644 index 16a15b4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs +++ /dev/null @@ -1,29 +0,0 @@ - -namespace FairyGUI -{ - /// - /// - /// - public class Stats - { - /// - /// - /// - public static int ObjectCount; - - /// - /// - /// - public static int GraphicsCount; - - /// - /// - /// - public static int LatestObjectCreation; - - /// - /// - /// - public static int LatestGraphicsCreation; - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs.meta deleted file mode 100644 index 480d069..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: baddfd53a8a771f4eaa567ee3eb2ccc0 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text.meta deleted file mode 100644 index bc0f9b0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b6a329985f59cbd4ba1618ac71c89d7d -folderAsset: yes -timeCreated: 1460480287 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs deleted file mode 100644 index 1e633c5..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// Base class for all kind of fonts. - /// - public class BaseFont - { - /// - /// The name of this font object. - /// - public string name; - - /// - /// The texture of this font object. - /// - public NTexture mainTexture; - - /// - /// Can this font be tinted? Will be true for dynamic font and fonts generated by BMFont. - /// - public bool canTint; - - /// - /// If true, it will use extra vertices to enhance bold effect - /// - public bool customBold; - - /// - /// If true, it will use extra vertices to enhance bold effect ONLY when it is in italic style. - /// - public bool customBoldAndItalic; - - /// - /// If true, it will use extra vertices(4 direction) to enhance outline effect - /// - public bool customOutline; - - /// - /// The shader for this font object. - /// - public string shader; - - /// - /// Keep text crisp. - /// - public bool keepCrisp; - - /// - /// - /// - public int version; - - protected internal static bool textRebuildFlag; - - protected const float SupScale = 0.58f; - protected const float SupOffset = 0.33f; - - virtual public void SetFormat(TextFormat format, float fontSizeScale) - { - } - - virtual public void PrepareCharacters(string text, TextFormat format, float fontSizeScale) - { - } - - virtual public void Prepare(TextFormat format) - { - } - - virtual public bool BuildGraphics(NGraphics graphics) - { - return false; - } - - virtual public void StartDraw(NGraphics graphics) - { - } - - virtual public bool GetGlyph(char ch, out float width, out float height, out float baseline) - { - width = 0; - height = 0; - baseline = 0; - return false; - } - - virtual public void DrawGlyph(VertexBuffer vb, float x, float y2) - { - } - - virtual public void DrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) - { - } - - virtual public bool HasCharacter(char ch) - { - return false; - } - - virtual public int GetLineHeight(int size) - { - return 0; - } - - virtual public void Dispose() - { - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs.meta deleted file mode 100644 index 7a7dea3..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 242acb07eafac7a43a60dc4107fbd6b4 -timeCreated: 1460480287 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs deleted file mode 100644 index bcca2b2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs +++ /dev/null @@ -1,174 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class BitmapFont : BaseFont - { - /// - /// - /// - public class BMGlyph - { - public float x; - public float y; - public float width; - public float height; - public int advance; - public int lineHeight; - public Vector2[] uv = new Vector2[4]; - public int channel;//0-n/a, 1-r,2-g,3-b,4-alpha - } - - /// - /// - /// - public int size; - - /// - /// - /// - public bool resizable; - - /// - /// Font generated by BMFont use channels. - /// - public bool hasChannel; - - protected Dictionary _dict; - protected BMGlyph _glyph; - float _scale; - - public BitmapFont() - { - this.canTint = true; - this.hasChannel = false; - this.customOutline = true; - this.shader = ShaderConfig.bmFontShader; - - _dict = new Dictionary(); - _scale = 1; - } - - public void AddChar(char ch, BMGlyph glyph) - { - _dict[ch] = glyph; - } - - override public void SetFormat(TextFormat format, float fontSizeScale) - { - if (resizable) - _scale = (float)format.size / size * fontSizeScale; - else - _scale = fontSizeScale; - - if (canTint) - format.FillVertexColors(vertexColors); - } - - override public bool GetGlyph(char ch, out float width, out float height, out float baseline) - { - if (ch == ' ') - { - width = Mathf.RoundToInt(size * _scale / 2); - height = Mathf.RoundToInt(size * _scale); - baseline = height; - _glyph = null; - return true; - } - else if (_dict.TryGetValue((int)ch, out _glyph)) - { - width = Mathf.RoundToInt(_glyph.advance * _scale); - height = Mathf.RoundToInt(_glyph.lineHeight * _scale); - baseline = height; - return true; - } - else - { - width = 0; - height = 0; - baseline = 0; - return false; - } - } - - static Vector3 bottomLeft; - static Vector3 topLeft; - static Vector3 topRight; - static Vector3 bottomRight; - - static Color32[] vertexColors = new Color32[4]; - - override public void DrawGlyph(VertexBuffer vb, float x, float y) - { - if (_glyph == null) //space - return; - - topLeft.x = x + _glyph.x * _scale; - topLeft.y = y + (_glyph.lineHeight - _glyph.y) * _scale; - bottomRight.x = x + (_glyph.x + _glyph.width) * _scale; - bottomRight.y = topLeft.y - _glyph.height * _scale; - - topRight.x = bottomRight.x; - topRight.y = topLeft.y; - bottomLeft.x = topLeft.x; - bottomLeft.y = bottomRight.y; - - vb.vertices.Add(bottomLeft); - vb.vertices.Add(topLeft); - vb.vertices.Add(topRight); - vb.vertices.Add(bottomRight); - - vb.uvs.AddRange(_glyph.uv); - - if (hasChannel) - { - Vector2 channel = new Vector2(_glyph.channel, 0); - vb.uvs2.Add(channel); - vb.uvs2.Add(channel); - vb.uvs2.Add(channel); - vb.uvs2.Add(channel); - } - - if (canTint) - { - vb.colors.Add(vertexColors[0]); - vb.colors.Add(vertexColors[1]); - vb.colors.Add(vertexColors[2]); - vb.colors.Add(vertexColors[3]); - } - else - { - vb.colors.Add(Color.white); - vb.colors.Add(Color.white); - vb.colors.Add(Color.white); - vb.colors.Add(Color.white); - } - } - - override public bool HasCharacter(char ch) - { - return ch == ' ' || _dict.ContainsKey((int)ch); - } - - override public int GetLineHeight(int size) - { - if (_dict.Count > 0) - { - using (var et = _dict.GetEnumerator()) - { - et.MoveNext(); - if (resizable) - return Mathf.RoundToInt((float)et.Current.Value.lineHeight * size / this.size); - else - return et.Current.Value.lineHeight; - } - } - else - return 0; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs.meta deleted file mode 100644 index 7ce9d70..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b1441c09e3389a046827b23ee409a37a -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs deleted file mode 100644 index 06fbf56..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs +++ /dev/null @@ -1,377 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class DynamicFont : BaseFont - { - Font _font; - int _size; - float _ascent; - float _lineHeight; - float _scale; - TextFormat _format; - FontStyle _style; - bool _boldVertice; - CharacterInfo _char; - CharacterInfo _lineChar; - bool _gotLineChar; - - public DynamicFont() - { - this.canTint = true; - this.keepCrisp = true; - this.customOutline = true; - this.shader = ShaderConfig.textShader; - } - - /// - /// - /// - /// - /// - /// - public DynamicFont(string name, Font font) : this() - { - this.name = name; - this.nativeFont = font; - } - - override public void Dispose() - { - Font.textureRebuilt -= textureRebuildCallback; - } - - public Font nativeFont - { - get { return _font; } - set - { - if (_font != null) - Font.textureRebuilt -= textureRebuildCallback; - - _font = value; - Font.textureRebuilt += textureRebuildCallback; - _font.hideFlags = DisplayObject.hideFlags; - _font.material.hideFlags = DisplayObject.hideFlags; - _font.material.mainTexture.hideFlags = DisplayObject.hideFlags; - - if (mainTexture != null) - mainTexture.Dispose(); - mainTexture = new NTexture(_font.material.mainTexture); - mainTexture.destroyMethod = DestroyMethod.None; - - // _ascent = _font.ascent; - // _lineHeight = _font.lineHeight; - _ascent = _font.fontSize; - _lineHeight = _font.fontSize * 1.25f; - } - } - - override public void SetFormat(TextFormat format, float fontSizeScale) - { - _format = format; - float size = format.size * fontSizeScale; - if (keepCrisp) - size *= UIContentScaler.scaleFactor; - if (_format.specialStyle == TextFormat.SpecialStyle.Subscript || _format.specialStyle == TextFormat.SpecialStyle.Superscript) - size *= SupScale; - _size = Mathf.FloorToInt(size); - if (_size == 0) - _size = 1; - _scale = (float)_size / _font.fontSize; - - if (format.bold && !customBold) - { - if (format.italic) - { - if (customBoldAndItalic) - _style = FontStyle.Italic; - else - _style = FontStyle.BoldAndItalic; - } - else - _style = FontStyle.Bold; - } - else - { - if (format.italic) - _style = FontStyle.Italic; - else - _style = FontStyle.Normal; - } - - _boldVertice = format.bold && (customBold || (format.italic && customBoldAndItalic)); - format.FillVertexColors(vertexColors); - } - - override public void PrepareCharacters(string text, TextFormat format, float fontSizeScale) - { - SetFormat(format, fontSizeScale); - - _font.RequestCharactersInTexture(text, _size, _style); - } - - override public bool GetGlyph(char ch, out float width, out float height, out float baseline) - { - if (!_font.GetCharacterInfo(ch, out _char, _size, _style)) - { - if (ch == ' ') - { - //space may not be prepared, try again - _font.RequestCharactersInTexture(" ", _size, _style); - _font.GetCharacterInfo(ch, out _char, _size, _style); - } - else - { - width = height = baseline = 0; - return false; - } - } - - width = _char.advance; - height = _lineHeight * _scale; - baseline = _ascent * _scale; - if (_boldVertice) - width++; - - if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) - { - height /= SupScale; - baseline /= SupScale; - } - else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) - { - height = height / SupScale + baseline * SupOffset; - baseline *= (SupOffset + 1 / SupScale); - } - - height = Mathf.RoundToInt(height); - baseline = Mathf.RoundToInt(baseline); - - if (keepCrisp) - { - width /= UIContentScaler.scaleFactor; - height /= UIContentScaler.scaleFactor; - baseline /= UIContentScaler.scaleFactor; - } - - return true; - } - - static Vector3 bottomLeft; - static Vector3 topLeft; - static Vector3 topRight; - static Vector3 bottomRight; - - static Vector2 uvBottomLeft; - static Vector2 uvTopLeft; - static Vector2 uvTopRight; - static Vector2 uvBottomRight; - - static Color32[] vertexColors = new Color32[4]; - - static Vector3[] BOLD_OFFSET = new Vector3[] - { - new Vector3(-0.5f, 0f, 0f), - new Vector3(0.5f, 0f, 0f), - new Vector3(0f, -0.5f, 0f), - new Vector3(0f, 0.5f, 0f) - }; - - override public void DrawGlyph(VertexBuffer vb, float x, float y) - { - topLeft.x = _char.minX; - topLeft.y = _char.maxY; - bottomRight.x = _char.maxX; - if (_char.glyphWidth == 0) //zero width, space etc - bottomRight.x = topLeft.x + _size / 2; - bottomRight.y = _char.minY; - - if (keepCrisp) - { - topLeft /= UIContentScaler.scaleFactor; - bottomRight /= UIContentScaler.scaleFactor; - } - - if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) - y = y - Mathf.RoundToInt(_ascent * _scale * SupOffset); - else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) - y = y + Mathf.RoundToInt(_ascent * _scale * (1 / SupScale - 1 + SupOffset)); - - topLeft.x += x; - topLeft.y += y; - bottomRight.x += x; - bottomRight.y += y; - - topRight.x = bottomRight.x; - topRight.y = topLeft.y; - bottomLeft.x = topLeft.x; - bottomLeft.y = bottomRight.y; - - vb.vertices.Add(bottomLeft); - vb.vertices.Add(topLeft); - vb.vertices.Add(topRight); - vb.vertices.Add(bottomRight); - - uvBottomLeft = _char.uvBottomLeft; - uvTopLeft = _char.uvTopLeft; - uvTopRight = _char.uvTopRight; - uvBottomRight = _char.uvBottomRight; - - vb.uvs.Add(uvBottomLeft); - vb.uvs.Add(uvTopLeft); - vb.uvs.Add(uvTopRight); - vb.uvs.Add(uvBottomRight); - - vb.colors.Add(vertexColors[0]); - vb.colors.Add(vertexColors[1]); - vb.colors.Add(vertexColors[2]); - vb.colors.Add(vertexColors[3]); - - if (_boldVertice) - { - for (int b = 0; b < 4; b++) - { - Vector3 boldOffset = BOLD_OFFSET[b]; - - vb.vertices.Add(bottomLeft + boldOffset); - vb.vertices.Add(topLeft + boldOffset); - vb.vertices.Add(topRight + boldOffset); - vb.vertices.Add(bottomRight + boldOffset); - - vb.uvs.Add(uvBottomLeft); - vb.uvs.Add(uvTopLeft); - vb.uvs.Add(uvTopRight); - vb.uvs.Add(uvBottomRight); - - vb.colors.Add(vertexColors[0]); - vb.colors.Add(vertexColors[1]); - vb.colors.Add(vertexColors[2]); - vb.colors.Add(vertexColors[3]); - } - } - } - - override public void DrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) - { - if (!_gotLineChar) - { - _gotLineChar = true; - _font.RequestCharactersInTexture("_", 50, FontStyle.Normal); - _font.GetCharacterInfo('_', out _lineChar, 50, FontStyle.Normal); - } - - float thickness; - float offset; - - thickness = Mathf.Max(1, fontSize / 16f); //guest underline size - if (type == 0) - offset = Mathf.RoundToInt(_lineChar.minY * (float)fontSize / 50 + thickness); - else - offset = Mathf.RoundToInt(_ascent * 0.4f * fontSize / _font.fontSize); - if (thickness < 1) - thickness = 1; - - topLeft.x = x; - topLeft.y = y + offset; - bottomRight.x = x + width; - bottomRight.y = topLeft.y - thickness; - - topRight.x = bottomRight.x; - topRight.y = topLeft.y; - bottomLeft.x = topLeft.x; - bottomLeft.y = bottomRight.y; - - vb.vertices.Add(bottomLeft); - vb.vertices.Add(topLeft); - vb.vertices.Add(topRight); - vb.vertices.Add(bottomRight); - - uvBottomLeft = _lineChar.uvBottomLeft; - uvTopLeft = _lineChar.uvTopLeft; - uvTopRight = _lineChar.uvTopRight; - uvBottomRight = _lineChar.uvBottomRight; - - //取中点的UV - Vector2 u0; - if (_lineChar.uvBottomLeft.x != _lineChar.uvBottomRight.x) - u0.x = (_lineChar.uvBottomLeft.x + _lineChar.uvBottomRight.x) * 0.5f; - else - u0.x = (_lineChar.uvBottomLeft.x + _lineChar.uvTopLeft.x) * 0.5f; - - if (_lineChar.uvBottomLeft.y != _lineChar.uvTopLeft.y) - u0.y = (_lineChar.uvBottomLeft.y + _lineChar.uvTopLeft.y) * 0.5f; - else - u0.y = (_lineChar.uvBottomLeft.y + _lineChar.uvBottomRight.y) * 0.5f; - - vb.uvs.Add(u0); - vb.uvs.Add(u0); - vb.uvs.Add(u0); - vb.uvs.Add(u0); - - vb.colors.Add(vertexColors[0]); - vb.colors.Add(vertexColors[1]); - vb.colors.Add(vertexColors[2]); - vb.colors.Add(vertexColors[3]); - - if (_boldVertice) - { - for (int b = 0; b < 4; b++) - { - Vector3 boldOffset = BOLD_OFFSET[b]; - - vb.vertices.Add(bottomLeft + boldOffset); - vb.vertices.Add(topLeft + boldOffset); - vb.vertices.Add(topRight + boldOffset); - vb.vertices.Add(bottomRight + boldOffset); - - vb.uvs.Add(u0); - vb.uvs.Add(u0); - vb.uvs.Add(u0); - vb.uvs.Add(u0); - - vb.colors.Add(vertexColors[0]); - vb.colors.Add(vertexColors[1]); - vb.colors.Add(vertexColors[2]); - vb.colors.Add(vertexColors[3]); - } - } - } - - override public bool HasCharacter(char ch) - { - return _font.HasCharacter(ch); - } - - override public int GetLineHeight(int size) - { - return Mathf.RoundToInt(_lineHeight * size / _font.fontSize); - } - - void textureRebuildCallback(Font targetFont) - { - if (_font != targetFont) - return; - - if (mainTexture == null || !Application.isPlaying) - { - mainTexture = new NTexture(_font.material.mainTexture); - mainTexture.destroyMethod = DestroyMethod.None; - } - else - mainTexture.Reload(_font.material.mainTexture, null); - - _gotLineChar = false; - - textRebuildFlag = true; - version++; - - //Debug.Log("Font texture rebuild: " + name + "," + mainTexture.width + "," + mainTexture.height); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs.meta deleted file mode 100644 index 14c1622..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 37b73f8527098974cb0ccf518ff95351 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs deleted file mode 100644 index e5341c0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace FairyGUI -{ - /// - /// - /// - public class Emoji - { - /// - /// 代表图片资源url。 - /// - public string url; - - /// - /// 图片宽度。不设置(0)则表示使用原始宽度。 - /// - public int width; - - /// - /// 图片高度。不设置(0)则表示使用原始高度。 - /// - public int height; - - /// - /// - /// - /// - /// - /// - public Emoji(string url, int width, int height) - { - this.url = url; - this.width = width; - this.height = height; - } - - /// - /// - /// - /// - public Emoji(string url) - { - this.url = url; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs.meta deleted file mode 100644 index a21992a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3859ae9020061394cadacd1624e04ed9 -timeCreated: 1475139464 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs deleted file mode 100644 index 388fad4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs +++ /dev/null @@ -1,163 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class FontManager - { - public static Dictionary sFontFactory = new Dictionary(); - - static bool _checkTextMeshPro; - - /// - /// - /// - /// - /// - static public void RegisterFont(BaseFont font, string alias = null) - { - sFontFactory[font.name] = font; - if (alias != null) - sFontFactory[alias] = font; - } - - /// - /// - /// - /// - static public void UnregisterFont(BaseFont font) - { - List toDelete = new List(); - foreach (KeyValuePair kv in sFontFactory) - { - if (kv.Value == font) - toDelete.Add(kv.Key); - } - - foreach (string key in toDelete) - sFontFactory.Remove(key); - } - - /// - /// - /// - /// - /// - static public BaseFont GetFont(string name) - { - BaseFont font; - if (name.StartsWith(UIPackage.URL_PREFIX)) - { - font = UIPackage.GetItemAssetByURL(name) as BaseFont; - if (font != null) - return font; - } - - if (sFontFactory.TryGetValue(name, out font)) - return font; - - object asset = Resources.Load(name); - if (asset == null) - asset = Resources.Load("Fonts/" + name); - - //Try to use new API in Uinty5 to load - if (asset == null) - { - if (name.IndexOf(",") != -1) - { - string[] arr = name.Split(','); - int cnt = arr.Length; - for (int i = 0; i < cnt; i++) - arr[i] = arr[i].Trim(); - asset = Font.CreateDynamicFontFromOSFont(arr, 16); - } - else - asset = Font.CreateDynamicFontFromOSFont(name, 16); - } - - if (asset == null) - return Fallback(name); - - if (asset is Font) - { - font = new DynamicFont(); - font.name = name; - sFontFactory.Add(name, font); - - ((DynamicFont)font).nativeFont = (Font)asset; - } -#if FAIRYGUI_TMPRO - else if (asset is TMPro.TMP_FontAsset) - { - font = new TMPFont(); - font.name = name; - sFontFactory.Add(name, font); - ((TMPFont)font).fontAsset = (TMPro.TMP_FontAsset)asset; - } -#endif - else - { - if (asset.GetType().Name.Contains("TMP_FontAsset")) - { - if (!_checkTextMeshPro) - { - _checkTextMeshPro = true; - Debug.LogWarning("To enable TextMeshPro support, add script define symbol: FAIRYGUI_TMPRO"); - } - } - - return Fallback(name); - } - - return font; - } - - static BaseFont Fallback(string name) - { - if (name != UIConfig.defaultFont) - { - BaseFont ff; - if (sFontFactory.TryGetValue(UIConfig.defaultFont, out ff)) - { - sFontFactory[name] = ff; - return ff; - } - } - - Font asset = (Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf"); - if (asset == null) - throw new Exception("Failed to load font '" + name + "'"); - - BaseFont font = new DynamicFont(); - font.name = name; - ((DynamicFont)font).nativeFont = asset; - - sFontFactory.Add(name, font); - return font; - } - - /// - /// - /// - static public void Clear() - { - foreach (KeyValuePair kv in sFontFactory) - kv.Value.Dispose(); - - sFontFactory.Clear(); - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - Clear(); - _checkTextMeshPro = false; - } -#endif - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs.meta deleted file mode 100644 index 46dca53..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5084c28e388b94a4fa4e2a80485296b3 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs deleted file mode 100644 index 15d3f85..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs +++ /dev/null @@ -1,42 +0,0 @@ -namespace FairyGUI -{ - /// - /// 用于文本输入的键盘接口 - /// - public interface IKeyboard - { - /// - /// 键盘已收回,输入已完成 - /// - bool done { get; } - - /// - /// 是否支持在光标处输入。如果为true,GetInput返回的是在当前光标处需要插入的文本,如果为false,GetInput返回的是整个文本。 - /// - bool supportsCaret { get; } - - /// - /// 用户输入的文本。 - /// - /// - string GetInput(); - - /// - /// 打开键盘 - /// - /// - /// - /// - /// - /// - /// - /// - /// - void Open(string text, bool autocorrection, bool multiline, bool secure, bool alert, string textPlaceholder, int keyboardType, bool hideInput); - - /// - /// 关闭键盘 - /// - void Close(); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs.meta deleted file mode 100644 index 786cf2b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 4e3b9d951c903b049b8495c2d16f67fe -timeCreated: 1460480287 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs deleted file mode 100644 index c1d9b11..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs +++ /dev/null @@ -1,1732 +0,0 @@ -using System; -using UnityEngine; -using System.Text; -using FairyGUI.Utils; -using System.Collections.Generic; -using System.Text.RegularExpressions; - -#if FAIRYGUI_INPUT_SYSTEM -using UnityEngine.InputSystem; -using UnityEngine.InputSystem.LowLevel; -#endif - -namespace FairyGUI -{ - /// - /// 接收用户输入的文本控件。因为支持直接输入表情,所以从RichTextField派生。 - /// - public class InputTextField : RichTextField - { - /// - /// - /// - public int maxLength { get; set; } - - /// - /// 如果是true,则当文本获得焦点时,弹出键盘进行输入,如果是false则不会。 - /// 默认是使用Stage.keyboardInput的值。 - /// - public bool keyboardInput { get; set; } - - /// - /// - /// - public int keyboardType { get; set; } - - /// - /// - /// - public bool hideInput { get; set; } - - /// - /// - /// - public bool disableIME { get; set; } - - /// - /// - /// - public bool mouseWheelEnabled { get; set; } - - /// - /// - /// - public static Action onCopy; - - /// - /// - /// - public static Action onPaste; - - /// - /// - /// - public static PopupMenu contextMenu; - - string _text; - string _restrict; - Regex _restrictPattern; - bool _displayAsPassword; - string _promptText; - string _decodedPromptText; - int _border; - int _corner; - Color _borderColor; - Color _backgroundColor; - bool _editable; - - bool _editing; - int _caretPosition; - int _selectionStart; - int _composing; - char _highSurrogateChar; - string _textBeforeEdit; - bool _usingHtmlInput; - - EventListener _onChanged; - EventListener _onSubmit; - - Shape _caret; - SelectionShape _selectionShape; - float _nextBlink; - - const int GUTTER_X = 2; - const int GUTTER_Y = 2; - - public InputTextField() - { - gameObject.name = "InputTextField"; - - _text = string.Empty; - maxLength = 0; - _editable = true; - _composing = 0; - keyboardInput = Stage.keyboardInput; - _borderColor = Color.black; - _backgroundColor = Color.clear; - mouseWheelEnabled = true; - this.tabStop = true; - cursor = "text-ibeam"; - - /* 因为InputTextField定义了ClipRect,而ClipRect是四周缩进了2个像素的(GUTTER),默认的点击测试 - * 是使用ClipRect的,那会造成无法点击四周的空白区域。所以这里自定义了一个HitArea - */ - this.hitArea = new RectHitTest(); - this.touchChildren = false; - - onFocusIn.Add(__focusIn); - onFocusOut.AddCapture(__focusOut); - onKeyDown.Add(__keydown); - onTouchBegin.AddCapture(__touchBegin); - onTouchMove.AddCapture(__touchMove); - onMouseWheel.Add(__mouseWheel); - onClick.Add(__click); - onRightClick.Add(__rightClick); - } - - /// - /// - /// - public EventListener onChanged - { - get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } - } - - /// - /// - /// - public EventListener onSubmit - { - get { return _onSubmit ?? (_onSubmit = new EventListener(this, "onSubmit")); } - } - - /// - /// - /// - public override string text - { - get - { - return _text; - } - set - { - _text = value; - ClearSelection(); - UpdateText(); - } - } - - /// - /// - /// - public override TextFormat textFormat - { - get - { - return base.textFormat; - } - set - { - base.textFormat = value; - if (_editing) - { - _caret.height = textField.textFormat.size; - _caret.DrawRect(0, Color.clear, textField.textFormat.color); - } - } - } - - /// - /// - /// - public string restrict - { - get { return _restrict; } - set - { - _restrict = value; - if (string.IsNullOrEmpty(_restrict)) - _restrictPattern = null; - else - _restrictPattern = new Regex(value); - } - } - - /// - /// - /// - public int caretPosition - { - get - { - textField.Redraw(); - return _caretPosition; - } - set - { - SetSelection(value, 0); - } - } - - public int selectionBeginIndex - { - get { return _selectionStart < _caretPosition ? _selectionStart : _caretPosition; } - } - - public int selectionEndIndex - { - get { return _selectionStart < _caretPosition ? _caretPosition : _selectionStart; } - } - - /// - /// - /// - public string promptText - { - get - { - return _promptText; - } - set - { - _promptText = value; - if (!string.IsNullOrEmpty(_promptText)) - _decodedPromptText = UBBParser.inst.Parse(XMLUtils.EncodeString(_promptText)); - else - _decodedPromptText = null; - UpdateText(); - } - } - - /// - /// - /// - public bool displayAsPassword - { - get { return _displayAsPassword; } - set - { - if (_displayAsPassword != value) - { - _displayAsPassword = value; - UpdateText(); - } - } - } - - /// - /// - /// - public bool editable - { - get { return _editable; } - set - { - _editable = value; - if (_caret != null) - _caret.visible = _editable; - } - } - - /// - /// - /// - public int border - { - get { return _border; } - set - { - _border = value; - UpdateShape(); - } - } - - /// - /// - /// - public int corner - { - get { return _corner; } - set - { - _corner = value; - UpdateShape(); - } - } - - /// - /// - /// - public Color borderColor - { - get { return _borderColor; } - set - { - _borderColor = value; - UpdateShape(); - } - } - - /// - /// - /// - public Color backgroundColor - { - get { return _backgroundColor; } - set - { - _backgroundColor = value; - UpdateShape(); - } - } - - void UpdateShape() - { - if (_border > 0 || _backgroundColor.a > 0) - { - CreateGraphics(); - - graphics.enabled = true; - RoundedRectMesh mesh = graphics.GetMeshFactory(); - mesh.lineWidth = _border; - mesh.lineColor = _borderColor; - mesh.fillColor = _backgroundColor; - mesh.topLeftRadius = mesh.topRightRadius = mesh.bottomLeftRadius = mesh.bottomRightRadius = corner; - graphics.SetMeshDirty(); - } - else - { - if (graphics != null) - graphics.enabled = false; - } - } - - /// - /// - /// - /// - /// -1 means the rest count from start - public void SetSelection(int start, int length) - { - if (!_editing) - Stage.inst.focus = this; - - _selectionStart = start; - _caretPosition = length < 0 ? int.MaxValue : (start + length); - if (!textField.Redraw()) - { - int cnt = textField.charPositions.Count; - if (_caretPosition >= cnt) - _caretPosition = cnt - 1; - if (_selectionStart >= cnt) - _selectionStart = cnt - 1; - UpdateCaret(); - } - } - - /// - /// - /// - /// - public void ReplaceSelection(string value) - { - if (keyboardInput && Stage.keyboardInput && !Stage.keyboard.supportsCaret) - { - this.text = _text + value; - OnChanged(); - return; - } - - if (!_editing) - Stage.inst.focus = this; - - textField.Redraw(); - - int t0, t1; - if (_selectionStart != _caretPosition) - { - if (_selectionStart < _caretPosition) - { - t0 = _selectionStart; - t1 = _caretPosition; - _caretPosition = _selectionStart; - } - else - { - t0 = _caretPosition; - t1 = _selectionStart; - _selectionStart = _caretPosition; - } - } - else - { - if (string.IsNullOrEmpty(value)) - return; - - t0 = t1 = _caretPosition; - } - - StringBuilder buffer = new StringBuilder(); - GetPartialText(0, t0, buffer); - if (!string.IsNullOrEmpty(value)) - { - value = ValidateInput(value); - buffer.Append(value); - - _caretPosition += GetTextlength(value); - } - GetPartialText(t1 + _composing, -1, buffer); - - string newText = buffer.ToString(); - if (maxLength > 0) - { - string newText2 = TruncateText(newText, maxLength); - if (newText2.Length != newText.Length) - _caretPosition += (newText2.Length - newText.Length); - newText = newText2; - } - - this.text = newText; - OnChanged(); - } - - /// - /// - /// - /// - public void ReplaceText(string value) - { - if (value == _text) - return; - - if (value == null) - value = string.Empty; - - value = ValidateInput(value); - - if (maxLength > 0) - value = TruncateText(value, maxLength); - - _caretPosition = value.Length; - - this.text = value; - OnChanged(); - } - - void GetPartialText(int startIndex, int endIndex, StringBuilder buffer) - { - int elementCount = textField.htmlElements.Count; - int lastIndex = startIndex; - string tt; - if (_displayAsPassword) - tt = _text; - else - tt = textField.parsedText; - if (endIndex < 0) - endIndex = tt.Length; - for (int i = 0; i < elementCount; i++) - { - HtmlElement element = textField.htmlElements[i]; - if (element.htmlObject != null && element.text != null) - { - if (element.charIndex >= startIndex && element.charIndex < endIndex) - { - buffer.Append(tt.Substring(lastIndex, element.charIndex - lastIndex)); - buffer.Append(element.text); - lastIndex = element.charIndex + 1; - } - } - } - if (lastIndex < tt.Length) - buffer.Append(tt.Substring(lastIndex, endIndex - lastIndex)); - } - - int GetTextlength(string value) - { - int textLen = value.Length; - int ret = textLen; - for (int i = 0; i < textLen; i++) - { - if (char.IsHighSurrogate(value[i])) - ret--; - } - return ret; - } - - string TruncateText(string value, int length) - { - int textLen = value.Length; - int len = 0; - int i = 0; - while (i < textLen) - { - if (len == length) - return value.Substring(0, i); - - if (char.IsHighSurrogate(value[i])) - i++; - i++; - len++; - } - return value; - } - - string ValidateInput(string source) - { - if (_restrict != null) - { - StringBuilder sb = new StringBuilder(); - Match mc = _restrictPattern.Match(source); - int lastPos = 0; - string s; - while (mc != Match.Empty) - { - if (mc.Index != lastPos) - { - //保留tab和回车 - for (int i = lastPos; i < mc.Index; i++) - { - if (source[i] == '\n' || source[i] == '\t') - sb.Append(source[i]); - } - } - - s = mc.ToString(); - lastPos = mc.Index + s.Length; - sb.Append(s); - - mc = mc.NextMatch(); - } - for (int i = lastPos; i < source.Length; i++) - { - if (source[i] == '\n' || source[i] == '\t') - sb.Append(source[i]); - } - - return sb.ToString(); - } - else - return source; - } - - void UpdateText() - { - if (!_editing && _text.Length == 0 && !string.IsNullOrEmpty(_decodedPromptText)) - { - textField.htmlText = _decodedPromptText; - return; - } - - if (_displayAsPassword) - textField.text = EncodePasswordText(_text); - else - textField.text = _text; - - _composing = compositionString.Length; - if (_composing > 0) - { - StringBuilder buffer = new StringBuilder(); - GetPartialText(0, _caretPosition, buffer); - buffer.Append(compositionString); - GetPartialText(_caretPosition, -1, buffer); - - textField.text = buffer.ToString(); - } - } - - string EncodePasswordText(string value) - { - int textLen = value.Length; - StringBuilder tmp = new StringBuilder(textLen); - int i = 0; - while (i < textLen) - { - char c = value[i]; - if (c == '\n') - tmp.Append(c); - else - { - if (char.IsHighSurrogate(c)) - i++; - tmp.Append("*"); - } - i++; - } - return tmp.ToString(); - } - - void ClearSelection() - { - if (_selectionStart != _caretPosition) - { - if (_selectionShape != null) - _selectionShape.Clear(); - _selectionStart = _caretPosition; - } - } - - public string GetSelection() - { - if (_selectionStart == _caretPosition) - return string.Empty; - - StringBuilder buffer = new StringBuilder(); - if (_selectionStart < _caretPosition) - GetPartialText(_selectionStart, _caretPosition, buffer); - else - GetPartialText(_caretPosition, _selectionStart, buffer); - return buffer.ToString(); - } - - void Scroll(int hScroll, int vScroll) - { - vScroll = Mathf.Clamp(vScroll, 0, textField.lines.Count - 1); - TextField.LineInfo line = textField.lines[vScroll]; - hScroll = Mathf.Clamp(hScroll, 0, line.charCount - 1); - - TextField.CharPosition cp = GetCharPosition(line.charIndex + hScroll); - Vector2 pt = GetCharLocation(cp); - MoveContent(new Vector2(GUTTER_X - pt.x, GUTTER_Y - pt.y), false); - } - - void AdjustCaret(TextField.CharPosition cp, bool moveSelectionHeader = false) - { - _caretPosition = cp.charIndex; - if (moveSelectionHeader) - _selectionStart = _caretPosition; - - UpdateCaret(); - } - - void UpdateCaret(bool forceUpdate = false) - { - TextField.CharPosition cp; - if (_editing) - cp = GetCharPosition(_caretPosition + compositionString.Length); - else - cp = GetCharPosition(_caretPosition); - - Vector2 pos = GetCharLocation(cp); - TextField.LineInfo line = textField.lines[cp.lineIndex]; - Vector2 offset = pos + textField.xy; - - if (offset.x < textField.textFormat.size) - offset.x += Mathf.Min(50, _contentRect.width * 0.5f); - else if (offset.x > _contentRect.width - GUTTER_X - textField.textFormat.size) - offset.x -= Mathf.Min(50, _contentRect.width * 0.5f); - - if (offset.x < GUTTER_X) - offset.x = GUTTER_X; - else if (offset.x > _contentRect.width - GUTTER_X) - offset.x = Mathf.Max(GUTTER_X, _contentRect.width - GUTTER_X); - - if (offset.y < GUTTER_Y) - offset.y = GUTTER_Y; - else if (offset.y + line.height >= _contentRect.height - GUTTER_Y) - offset.y = Mathf.Max(GUTTER_Y, _contentRect.height - line.height - GUTTER_Y); - - MoveContent(offset - pos, forceUpdate); - - if (_editing) - { - _caret.position = textField.xy + pos; - _caret.height = line.height > 0 ? line.height : textField.textFormat.size; - - if (_editable) - { - Vector2 cursorPos = _caret.LocalToWorld(new Vector2(0, _caret.height)); - cursorPos = StageCamera.main.WorldToScreenPoint(cursorPos); - - if (Application.platform == RuntimePlatform.WindowsPlayer - || Application.platform == RuntimePlatform.WindowsEditor) - { - cursorPos.y = Screen.height - cursorPos.y + 20; -#if UNITY_EDITOR - cursorPos.y += 50; -#endif - } - -#if FAIRYGUI_INPUT_SYSTEM - Keyboard keyboard = Keyboard.current; - if (keyboard != null) - keyboard.SetIMECursorPosition(cursorPos); -#endif - Input.compositionCursorPos = cursorPos; - - } - - _nextBlink = Time.time + 0.5f; - _caret.graphics.enabled = true; - - UpdateSelection(cp); - } - } - - void MoveContent(Vector2 pos, bool forceUpdate) - { - float ox = textField.x; - float oy = textField.y; - float nx = pos.x; - float ny = pos.y; - float rectWidth = _contentRect.width - 1; //-1 to avoid cursor be clipped - if (rectWidth - nx > textField.textWidth) - nx = rectWidth - textField.textWidth; - if (_contentRect.height - ny > textField.textHeight) - ny = _contentRect.height - textField.textHeight; - if (nx > 0) - nx = 0; - if (ny > 0) - ny = 0; - nx = (int)nx; - ny = (int)ny; - - if (nx != ox || ny != oy || forceUpdate) - { - if (_caret != null) - { - _caret.SetXY(nx + _caret.x - ox, ny + _caret.y - oy); - _selectionShape.SetXY(nx, ny); - } - textField.SetXY(nx, ny); - - List elements = textField.htmlElements; - int count = elements.Count; - for (int i = 0; i < count; i++) - { - HtmlElement element = elements[i]; - if (element.htmlObject != null) - element.htmlObject.SetPosition(element.position.x + nx, element.position.y + ny); - } - } - } - - void UpdateSelection(TextField.CharPosition cp) - { - if (_selectionStart == _caretPosition) - { - _selectionShape.Clear(); - return; - } - - TextField.CharPosition start; - if (_editing && compositionString.Length > 0) - { - if (_selectionStart < _caretPosition) - { - cp = GetCharPosition(_caretPosition); - start = GetCharPosition(_selectionStart); - } - else - start = GetCharPosition(_selectionStart + compositionString.Length); - } - else - start = GetCharPosition(_selectionStart); - if (start.charIndex > cp.charIndex) - { - TextField.CharPosition tmp = start; - start = cp; - cp = tmp; - } - - Vector2 v1 = GetCharLocation(start); - Vector2 v2 = GetCharLocation(cp); - - _selectionShape.rects.Clear(); - textField.GetLinesShape(start.lineIndex, v1.x, cp.lineIndex, v2.x, false, _selectionShape.rects); - _selectionShape.Refresh(); - } - - TextField.CharPosition GetCharPosition(int caretIndex) - { - if (caretIndex < 0) - caretIndex = 0; - else if (caretIndex >= textField.charPositions.Count) - caretIndex = textField.charPositions.Count - 1; - - return textField.charPositions[caretIndex]; - } - - /// - /// 通过本地坐标获得字符索引位置 - /// - /// 本地坐标 - /// - TextField.CharPosition GetCharPosition(Vector2 location) - { - if (textField.charPositions.Count <= 1) - return textField.charPositions[0]; - - location.x -= textField.x; - location.y -= textField.y; - - List lines = textField.lines; - int len = lines.Count; - TextField.LineInfo line; - int i; - for (i = 0; i < len; i++) - { - line = lines[i]; - if (line.y + line.height > location.y) - break; - } - if (i == len) - i = len - 1; - - int lineIndex = i; - - len = textField.charPositions.Count; - TextField.CharPosition v; - int firstInLine = -1; - for (i = 0; i < len; i++) - { - v = textField.charPositions[i]; - if (v.lineIndex == lineIndex) - { - if (firstInLine == -1) - firstInLine = i; - if (v.offsetX + v.width * 0.5f > location.x) - return v; - } - else if (firstInLine != -1) - { - if (textField.parsedText[i - 1] == '\n') - return textField.charPositions[i - 1]; - else - return v; - } - } - - return textField.charPositions[i - 1]; - } - - /// - /// 获得字符的坐标。 - /// - /// - /// - Vector2 GetCharLocation(TextField.CharPosition cp) - { - TextField.LineInfo line = textField.lines[cp.lineIndex]; - Vector2 pos; - if (line.charCount == 0 || textField.charPositions.Count == 0) - { - if (textField.align == AlignType.Center) - pos.x = (int)(_contentRect.width / 2); - else - pos.x = GUTTER_X; - } - else - { - TextField.CharPosition v = textField.charPositions[Math.Min(cp.charIndex, textField.charPositions.Count - 1)]; - pos.x = v.offsetX; - } - pos.y = line.y; - return pos; - } - - override internal void RefreshObjects() - { - base.RefreshObjects(); - - if (_editing) - { - SetChildIndex(_selectionShape, 0); - SetChildIndex(_caret, this.numChildren - 1); - } - - int cnt = textField.charPositions.Count; - if (_caretPosition >= cnt) - _caretPosition = cnt - 1; - if (_selectionStart >= cnt) - _selectionStart = cnt - 1; - - UpdateCaret(true); - } - - protected void OnChanged() - { - DispatchEvent("onChanged", null); - - TextInputHistory.inst.MarkChanged(this); - } - - protected override void OnSizeChanged() - { - base.OnSizeChanged(); - - Rect rect = _contentRect; - rect.x += GUTTER_X; - rect.y += GUTTER_Y; - rect.width -= GUTTER_X * 2; - rect.height -= GUTTER_Y * 2; - this.clipRect = rect; - ((RectHitTest)this.hitArea).rect = _contentRect; - } - - public override void Update(UpdateContext context) - { - base.Update(context); - - if (_editing) - { - if (_nextBlink < Time.time) - { - _nextBlink = Time.time + 0.5f; - _caret.graphics.enabled = !_caret.graphics.enabled; - } - } - } - - public override void Dispose() - { - if ((_flags & Flags.Disposed) != 0) - return; - - _editing = false; - if (_caret != null) - { - _caret.Dispose(); - _selectionShape.Dispose(); - } - - base.Dispose(); - } - - void DoCopy(string value) - { - if (onCopy != null) - { - onCopy(this, value); - return; - } - - - GUIUtility.systemCopyBuffer = value; - } - - void DoPaste() - { - if (onPaste != null) - { - onPaste(this); - return; - } - - string value = GUIUtility.systemCopyBuffer; - if (!string.IsNullOrEmpty(value)) - ReplaceSelection(value); - } - - void CreateCaret() - { - _caret = new Shape(); - _caret.gameObject.name = "Caret"; - _caret.touchable = false; - _caret._flags |= Flags.SkipBatching; - _caret.xy = textField.xy; - - _selectionShape = new SelectionShape(); - _selectionShape.gameObject.name = "Selection"; - _selectionShape.color = UIConfig.inputHighlightColor; - _selectionShape._flags |= Flags.SkipBatching; - _selectionShape.touchable = false; - _selectionShape.xy = textField.xy; - } - - void __touchBegin(EventContext context) - { - if (!_editing || textField.charPositions.Count <= 1 - || keyboardInput && Stage.keyboardInput && !Stage.keyboard.supportsCaret - || context.inputEvent.button != 0) - return; - - ClearSelection(); - - Vector3 v = Stage.inst.touchPosition; - v = this.GlobalToLocal(v); - TextField.CharPosition cp = GetCharPosition(v); - - AdjustCaret(cp, true); - - context.CaptureTouch(); - } - - void __touchMove(EventContext context) - { - if (!_editing) - return; - - Vector3 v = Stage.inst.touchPosition; - v = this.GlobalToLocal(v); - if (float.IsNaN(v.x)) - return; - - TextField.CharPosition cp = GetCharPosition(v); - if (cp.charIndex != _caretPosition) - AdjustCaret(cp); - } - - void __mouseWheel(EventContext context) - { - if (_editing && mouseWheelEnabled) - { - context.StopPropagation(); - - TextField.CharPosition cp = GetCharPosition(new Vector2(GUTTER_X, GUTTER_Y)); - int vScroll = cp.lineIndex; - int hScroll = cp.charIndex - textField.lines[cp.lineIndex].charIndex; - if (context.inputEvent.mouseWheelDelta < 0) - vScroll--; - else - vScroll++; - Scroll(hScroll, vScroll); - } - } - - void __focusIn(EventContext context) - { - if (!Application.isPlaying) - return; - - _editing = true; - _textBeforeEdit = _text; - - if (_caret == null) - CreateCaret(); - - if (!string.IsNullOrEmpty(_promptText)) - UpdateText(); - - float caretSize; - //如果界面缩小过,光标很容易看不见,这里放大一下 - if (UIConfig.inputCaretSize == 1 && UIContentScaler.scaleFactor < 1) - caretSize = UIConfig.inputCaretSize / UIContentScaler.scaleFactor; - else - caretSize = UIConfig.inputCaretSize; - _caret.SetSize(caretSize, textField.textFormat.size); - _caret.DrawRect(0, Color.clear, textField.textFormat.color); - _caret.visible = _editable; - AddChild(_caret); - - _selectionShape.Clear(); - AddChildAt(_selectionShape, 0); - - if (!textField.Redraw()) - { - TextField.CharPosition cp = GetCharPosition(_caretPosition); - AdjustCaret(cp); - } - - if (Stage.keyboardInput) - { - if (keyboardInput) - { - if (_editable) - Stage.inst.OpenKeyboard(_text, false, _displayAsPassword ? false : !textField.singleLine, - _displayAsPassword, false, null, keyboardType, hideInput); - - SetSelection(0, -1); - } - } -#if UNITY_WEBGL && FAIRYGUI_WEBGL_TEXT_INPUT - else if (!disableIME && !Application.isEditor) - { - _usingHtmlInput = true; - textField.visible = false; - _caret.visible = false; - WebGLTextInput.Start(this); - } -#endif - else - { -#if FAIRYGUI_INPUT_SYSTEM - Keyboard keyboard = Keyboard.current; - if (keyboard != null) - keyboard.SetIMEEnabled(!disableIME && !_displayAsPassword); -#endif - //Even using input system, we should use to the old input interface to enable IME (why) - if (!disableIME && !_displayAsPassword) - Input.imeCompositionMode = IMECompositionMode.On; - else - Input.imeCompositionMode = IMECompositionMode.Off; - - _composing = 0; - - if ((string)context.data == "key") //select all if got focus by tab key - SetSelection(0, -1); - - TextInputHistory.inst.StartRecord(this); - } - } - - void __focusOut(EventContext contxt) - { - if (!_editing) - return; - - _editing = false; - if (_usingHtmlInput) - { - _usingHtmlInput = false; - textField.visible = true; - _caret.visible = true; -#if UNITY_WEBGL && FAIRYGUI_WEBGL_TEXT_INPUT - WebGLTextInput.Stop(); -#endif - } - else if (Stage.keyboardInput) - { - if (keyboardInput) - Stage.inst.CloseKeyboard(); - } - else - { -#if FAIRYGUI_INPUT_SYSTEM - Keyboard keyboard = Keyboard.current; - if (keyboard != null) - keyboard.SetIMEEnabled(true); -#endif - Input.imeCompositionMode = IMECompositionMode.Auto; - - TextInputHistory.inst.StopRecord(this); - } - - if (!string.IsNullOrEmpty(_promptText)) - UpdateText(); - - _caret.RemoveFromParent(); - _selectionShape.RemoveFromParent(); - - if (contextMenu != null && contextMenu.contentPane.onStage) - contextMenu.Hide(); - } - - void __keydown(EventContext context) - { - if (!_editing) - return; - - if (HandleKey(context.inputEvent)) - context.StopPropagation(); - } - - bool HandleKey(InputEvent evt) - { - bool keyCodeHandled = true; - switch (evt.keyCode) - { - case KeyCode.Backspace: - { - if (evt.command) - { - //for mac:CMD+Backspace=Delete - if (_selectionStart == _caretPosition && _caretPosition < textField.charPositions.Count - 1) - _selectionStart = _caretPosition + 1; - } - else - { - if (_selectionStart == _caretPosition && _caretPosition > 0) - _selectionStart = _caretPosition - 1; - } - if (_editable) - ReplaceSelection(null); - break; - } - - case KeyCode.Delete: - { - if (_selectionStart == _caretPosition && _caretPosition < textField.charPositions.Count - 1) - _selectionStart = _caretPosition + 1; - if (_editable) - ReplaceSelection(null); - break; - } - - case KeyCode.LeftArrow: - { - if (!evt.shift) - ClearSelection(); - if (_caretPosition > 0) - { - if (evt.command) //mac keyboard - { - TextField.CharPosition cp = GetCharPosition(_caretPosition); - TextField.LineInfo line = textField.lines[cp.lineIndex]; - cp = GetCharPosition(new Vector2(int.MinValue, line.y + textField.y)); - AdjustCaret(cp, !evt.shift); - } - else - { - TextField.CharPosition cp = GetCharPosition(_caretPosition - 1); - AdjustCaret(cp, !evt.shift); - } - } - break; - } - - case KeyCode.RightArrow: - { - if (!evt.shift) - ClearSelection(); - if (_caretPosition < textField.charPositions.Count - 1) - { - if (evt.command) - { - TextField.CharPosition cp = GetCharPosition(_caretPosition); - TextField.LineInfo line = textField.lines[cp.lineIndex]; - cp = GetCharPosition(new Vector2(int.MaxValue, line.y + textField.y)); - AdjustCaret(cp, !evt.shift); - } - else - { - TextField.CharPosition cp = GetCharPosition(_caretPosition + 1); - AdjustCaret(cp, !evt.shift); - } - } - break; - } - - case KeyCode.UpArrow: - { - if (!evt.shift) - ClearSelection(); - - TextField.CharPosition cp = GetCharPosition(_caretPosition); - if (cp.lineIndex > 0) - { - TextField.LineInfo line = textField.lines[cp.lineIndex - 1]; - cp = GetCharPosition(new Vector2(_caret.x, line.y + textField.y)); - AdjustCaret(cp, !evt.shift); - } - break; - } - - case KeyCode.DownArrow: - { - if (!evt.shift) - ClearSelection(); - - TextField.CharPosition cp = GetCharPosition(_caretPosition); - if (cp.lineIndex == textField.lines.Count - 1) - cp.charIndex = textField.charPositions.Count - 1; - else - { - TextField.LineInfo line = textField.lines[cp.lineIndex + 1]; - cp = GetCharPosition(new Vector2(_caret.x, line.y + textField.y)); - } - AdjustCaret(cp, !evt.shift); - break; - } - - case KeyCode.PageUp: - { - ClearSelection(); - break; - } - - case KeyCode.PageDown: - { - ClearSelection(); - break; - } - - case KeyCode.Home: - { - if (!evt.shift) - ClearSelection(); - - TextField.CharPosition cp = GetCharPosition(_caretPosition); - TextField.LineInfo line = textField.lines[cp.lineIndex]; - cp = GetCharPosition(new Vector2(int.MinValue, line.y + textField.y)); - AdjustCaret(cp, !evt.shift); - break; - } - - case KeyCode.End: - { - if (!evt.shift) - ClearSelection(); - - TextField.CharPosition cp = GetCharPosition(_caretPosition); - TextField.LineInfo line = textField.lines[cp.lineIndex]; - cp = GetCharPosition(new Vector2(int.MaxValue, line.y + textField.y)); - AdjustCaret(cp, !evt.shift); - - break; - } - - //Select All - case KeyCode.A: - { - if (evt.ctrlOrCmd) - { - _selectionStart = 0; - AdjustCaret(GetCharPosition(int.MaxValue)); - } - break; - } - - //Copy - case KeyCode.C: - { - if (evt.ctrlOrCmd && !_displayAsPassword) - { - string s = GetSelection(); - if (!string.IsNullOrEmpty(s)) - DoCopy(s); - } - break; - } - - //Paste - case KeyCode.V: - { - if (evt.ctrlOrCmd && _editable) - DoPaste(); - break; - } - - //Cut - case KeyCode.X: - { - if (evt.ctrlOrCmd && !_displayAsPassword) - { - string s = GetSelection(); - if (!string.IsNullOrEmpty(s)) - { - DoCopy(s); - if (_editable) - ReplaceSelection(null); - } - } - break; - } - - case KeyCode.Z: - { - if (evt.ctrlOrCmd && _editable) - { - if (evt.shift) - TextInputHistory.inst.Redo(this); - else - TextInputHistory.inst.Undo(this); - } - break; - } - - case KeyCode.Y: - { - if (evt.ctrlOrCmd && _editable) - TextInputHistory.inst.Redo(this); - break; - } - - case KeyCode.Return: - case KeyCode.KeypadEnter: - { - if (textField.singleLine) - { - Stage.inst.focus = parent; - DispatchEvent("onSubmit", null); - DispatchEvent("onKeyDown", null); //for backward compatibility - } - break; - } - - case KeyCode.Tab: - { - if (textField.singleLine) - { - Stage.inst.DoKeyNavigate(evt.shift); - keyCodeHandled = false; - } - break; - } - - case KeyCode.Escape: - { - this.text = _textBeforeEdit; - Stage.inst.focus = parent; - break; - } - - default: - keyCodeHandled = (int)evt.keyCode <= 272 && !evt.ctrlOrCmd; - break; - } - - char c = evt.character; - if (c != 0) - { -#if FAIRYGUI_INPUT_SYSTEM - if (!evt.ctrlOrCmd && (c == '\n' || c == '\r' || c == '\t' || c == 25 || c == 3)) - { - _keydownFrame = Time.frameCount; - _keydownChar = c; - HandleTextInput(c); - } -#else - if (!evt.ctrlOrCmd) - HandleTextInput(c); -#endif - return true; - } - else - return keyCodeHandled; - } - - void HandleTextInput(char c) - { - if (c == '\r' || c == 3) - c = '\n'; - - if (c == 25)/*shift+tab*/ - c = '\t'; - - if (c == 27/*escape*/ || textField.singleLine && (c == '\n' || c == '\t')) - return; - - if (_editable) - { - if (char.IsHighSurrogate(c)) - { - _highSurrogateChar = c; - return; - } - - if (char.IsLowSurrogate(c)) - ReplaceSelection(char.ConvertFromUtf32(((int)c & 0x03FF) + ((((int)_highSurrogateChar & 0x03FF) + 0x40) << 10))); - else - ReplaceSelection(c.ToString()); - } - } - - void CheckComposition() - { - if (!_editable || keyboardInput) - return; - - if (compositionString.Length == 0) - { - UpdateText(); - } - else - { - int composing = _composing; - _composing = compositionString.Length; - - StringBuilder buffer = new StringBuilder(); - GetPartialText(0, _caretPosition, buffer); - buffer.Append(compositionString); - GetPartialText(_caretPosition + composing, -1, buffer); - - textField.text = buffer.ToString(); - } - } - - void __click(EventContext context) - { - if (_editing && context.inputEvent.isDoubleClick) - { - context.StopPropagation(); - _selectionStart = 0; - AdjustCaret(GetCharPosition(int.MaxValue)); - } - } - - void __rightClick(EventContext context) - { - if (contextMenu != null) - { - context.StopPropagation(); - contextMenu.Show(); - } - } - -#if !FAIRYGUI_INPUT_SYSTEM - static bool _IMEActive; - - public static bool EatKeyEvent(Event evt) - { - if (compositionString.Length > 0) - { - _IMEActive = true; - - if (evt.rawType == EventType.KeyDown) - { - var focus = Stage.inst.focus; - if (focus is InputTextField) - ((InputTextField)focus).CheckComposition(); - } - - return true; - } - else - { - if (_IMEActive && evt.keyCode != KeyCode.None) - { - //需要吃掉最后一个按键,通常是选择候选词或者结束输入 - var focus = Stage.inst.focus; - if (focus is InputTextField) - ((InputTextField)focus).CheckComposition(); - return true; - } - _IMEActive = false; - - return false; - } - } - - - public static string compositionString - { - get - { - if (Stage.keyboardInput) - return String.Empty; - - return Input.compositionString; - } - } - -#else - static string _compositionString = string.Empty; - static int _keydownFrame; - static char _keydownChar; - - public static void RegisterEvent() - { - Keyboard keyboard = Keyboard.current; - if (keyboard != null) - { - keyboard.onIMECompositionChange -= OnIMECompositionChange; - keyboard.onIMECompositionChange += OnIMECompositionChange; - keyboard.onTextInput -= OnTextInput; - keyboard.onTextInput += OnTextInput; - } - } - - public static void UnregisterEvent() - { - Keyboard keyboard = Keyboard.current; - if (keyboard != null) - { - keyboard.onIMECompositionChange -= OnIMECompositionChange; - keyboard.onTextInput -= OnTextInput; - } - } - - public static bool EatKeyEvent(Event evt) - { - return compositionString.Length > 0; - } - - static void OnIMECompositionChange(IMECompositionString composition) - { - if (Stage.keyboardInput) - return; - - _compositionString = composition.ToString(); - var focus = Stage.inst.focus; - if (focus is InputTextField) - ((InputTextField)focus).CheckComposition(); - } - - static void OnTextInput(char c) - { - Keyboard keyboard = Keyboard.current; - if (keyboard.ctrlKey.isPressed || Keyboard.current.altKey.isPressed - || keyboard.leftCommandKey.isPressed || keyboard.rightCommandKey.isPressed - ) - return; - - if (_keydownFrame == Time.frameCount && _keydownChar == c) - return; - - if (c < 32 || c >= 127 && c <= 159 - || c >= 0xF700 && c <= 0xF7FF /*why home/end/arrow-keys have these codes?*/) - return; - - var focus = Stage.inst.focus; - if ((focus is InputTextField) && !((InputTextField)focus).keyboardInput) - ((InputTextField)focus).HandleTextInput(c); - } - - /// - /// The current IME composition string being typed by the user. - /// - public static string compositionString - { - get - { - if (Stage.keyboardInput) - return String.Empty; - - return _compositionString; - } - } - -#endif - } - - class TextInputHistory - { - static TextInputHistory _inst; - public static TextInputHistory inst - { - get - { - if (_inst == null) - _inst = new TextInputHistory(); - return _inst; - } - } - - List _undoBuffer; - List _redoBuffer; - string _currentText; - InputTextField _textField; - bool _lock; - int _changedFrame; - - public const int maxHistoryLength = 5; - - public TextInputHistory() - { - _undoBuffer = new List(); - _redoBuffer = new List(); - } - - public void StartRecord(InputTextField textField) - { - _undoBuffer.Clear(); - _redoBuffer.Clear(); - _textField = textField; - _lock = false; - _currentText = textField.text; - _changedFrame = 0; - } - - public void MarkChanged(InputTextField textField) - { - if (_textField != textField) - return; - - if (_lock) - return; - - string newText = _textField.text; - if (_currentText == newText) - return; - - if (_changedFrame != Time.frameCount) - { - _changedFrame = Time.frameCount; - _undoBuffer.Add(_currentText); - if (_undoBuffer.Count > maxHistoryLength) - _undoBuffer.RemoveAt(0); - } - else - { - int cnt = _undoBuffer.Count; - if (cnt > 0 && newText == _undoBuffer[cnt - 1]) - _undoBuffer.RemoveAt(cnt - 1); - } - _currentText = newText; - } - - public void StopRecord(InputTextField textField) - { - if (_textField != textField) - return; - - _undoBuffer.Clear(); - _redoBuffer.Clear(); - _textField = null; - _currentText = null; - } - - public void Undo(InputTextField textField) - { - if (_textField != textField) - return; - - if (_undoBuffer.Count == 0) - return; - - string text = _undoBuffer[_undoBuffer.Count - 1]; - _undoBuffer.RemoveAt(_undoBuffer.Count - 1); - _redoBuffer.Add(_currentText); - _lock = true; - int caretPos = _textField.caretPosition; - _textField.text = text; - int dlen = text.Length - _currentText.Length; - if (dlen < 0) - _textField.caretPosition = caretPos + dlen; - _currentText = text; - _lock = false; - } - - public void Redo(InputTextField textField) - { - if (_textField != textField) - return; - - if (_redoBuffer.Count == 0) - return; - - string text = _redoBuffer[_redoBuffer.Count - 1]; - _redoBuffer.RemoveAt(_redoBuffer.Count - 1); - _undoBuffer.Add(_currentText); - _lock = true; - int caretPos = _textField.caretPosition; - _textField.text = text; - int dlen = text.Length - _currentText.Length; - if (dlen > 0) - _textField.caretPosition = caretPos + dlen; - _currentText = text; - _lock = false; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs.meta deleted file mode 100644 index 47e5c6a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 87f693de944eb7d4ab4ccb9b65af352a -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs deleted file mode 100644 index 38198bc..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs +++ /dev/null @@ -1,701 +0,0 @@ -/******************************************************************** - Copyright (c) 2018, Tadpole Studio - All rights reserved - - 文件名称: RTL.cs - 说 明: RTL字符转换 - - 版 本: 1.00 - 时 间: 2018/2/24 9:02:12 - 作 者: AQ QQ:355010366 - 概 述: 新建 - -*********************************************************************/ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FairyGUI -{ - public class RTLSupport - { - internal enum CharState - { - isolated, - final, - lead, - middle, - } - - // Bidirectional Character Types - public enum DirectionType - { - UNKNOW = 0, - LTR, - RTL, - NEUTRAL, - } - -#if RTL_TEXT_SUPPORT - public static DirectionType BaseDirection = DirectionType.RTL; // 主体语言是否是RTL的语言 -#else - public static DirectionType BaseDirection = DirectionType.UNKNOW; -#endif - private static bool isCharsInitialized = false; - private static Dictionary mapping = new Dictionary(); - - private static List listFinal = new List(); - private static List listRep = new List(); - private static StringBuilder sbRep = new StringBuilder(); - private static StringBuilder sbN = new StringBuilder(); - private static StringBuilder sbFinal = new StringBuilder(); - private static StringBuilder sbReverse = new StringBuilder(); - - public static bool IsArabicLetter(char ch) - { - if (ch >= 0x600 && ch <= 0x6ff) - { - if ((ch >= 0x660 && ch <= 0x66D) || (ch >= 0x6f0 && ch <= 0x6f9)) // 标准阿拉伯语数字和东阿拉伯语数字 [2019/3/1/ 17:45:18 by aq_1000] - { - return false; - } - return true; - } - else if (ch >= 0x750 && ch <= 0x77f) - return true; - else if (ch >= 0xfb50 && ch <= 0xfc3f) - return true; - else if (ch >= 0xfe70 && ch <= 0xfefc) - return true; - return false; - } - - public static string ConvertNumber(string strNumber) - { - sbRep.Length = 0; - foreach (char ch in strNumber) - { - int un = ch; - if (un == 0x66c || ch == ',') // 去掉逗号 - continue; - else if (un == 0x660 || un == 0x6f0) - sbRep.Append('0'); - else if (un == 0x661 || un == 0x6f1) - sbRep.Append('1'); - else if (un == 0x662 || un == 0x6f2) - sbRep.Append('2'); - else if (un == 0x663 || un == 0x6f3) - sbRep.Append('3'); - else if (un == 0x664 || un == 0x6f4) - sbRep.Append('4'); - else if (un == 0x665 || un == 0x6f5) - sbRep.Append('5'); - else if (un == 0x666 || un == 0x6f6) - sbRep.Append('6'); - else if (un == 0x667 || un == 0x6f7) - sbRep.Append('7'); - else if (un == 0x668 || un == 0x6f8) - sbRep.Append('8'); - else if (un == 0x669 || un == 0x6f9) - sbRep.Append('9'); - else - sbRep.Append(ch); - } - return sbRep.ToString(); - } - - public static bool ContainsArabicLetters(string text) - { - foreach (char character in text) - { - if (character >= 0x600 && character <= 0x6ff) - return true; - - if (character >= 0x750 && character <= 0x77f) - return true; - - if (character >= 0xfb50 && character <= 0xfc3f) - return true; - - if (character >= 0xfe70 && character <= 0xfefc) - return true; - } - return false; - } - - // 检测文本主方向 - public static DirectionType DetectTextDirection(string text) - { - bool isContainRTL = false; - bool isContainLTR = false; - foreach (char ch in text) - { - if (IsArabicLetter(ch)) - { - isContainRTL = true; - if (isContainLTR) - break; - } - else if (char.IsLetter(ch)) - { - isContainLTR = true; - if (isContainRTL) - break; - } - } - if (!isContainRTL) - return DirectionType.UNKNOW; // 这边unknow暂时代表文本一个RTL字符都没有,无需进行RTL转换 - else if (!isContainLTR) - return DirectionType.RTL; - return BaseDirection; - } - - private static bool CheckSeparator(char input) - { - if (!IsArabicLetter(input)) - { - return true; - } - else - { - return (input == '،') || (input == '?') || (input == '؟'); - } - - // if ((input != ' ') && (input != '\t') && (input != '!') && (input != '.') && - // (input != '،') && (input != '?') && (input != '؟') && - // !_IsBracket(input) && // 括号也算 [2018/8/1/ 15:12:20 by aq_1000] - // !_IsNeutrality(input)) - // { - // return false; - // } - // return true; - } - - private static bool CheckSpecific(char input) - { - int num = input; - if ((num != 0x622) && (num != 0x623) && (num != 0x627) && (num != 0x62f) && (num != 0x625) && - (num != 0x630) && (num != 0x631) && (num != 0x632) && (num != 0x698) && (num != 0x648) && - !_CheckSoundmark(input)) - { - return false; - } - return true; - } - - private static bool _CheckSoundmark(char ch) - { - int un = ch; - return (un >= 0x610 && un <= 0x61e) || (un >= 0x64b && un <= 0x65f); - } - - public static string DoMapping(string input) - { - if (!isCharsInitialized) - { - isCharsInitialized = true; - InitChars(); - } - - // 伊斯兰教真主安拉在阿拉伯文里写作الله - // 键盘输入时输入 ل (lam) + ل (lam) + ه (ha) 后会自动转换成带记号的符号。 [2018/3/13 20:03:45 --By aq_1000] - if (input == "الله") - { - input = "ﷲ"; - } - - sbFinal.Length = 0; - sbFinal.Append(input); - char perChar = '\0'; - for (int i = 0; i < sbFinal.Length; i++) - { - if (!mapping.ContainsKey(sbFinal[i])) - { - perChar = sbFinal[i]; - continue; - } - - if ((i + 1) == sbFinal.Length) - { - if (sbFinal.Length == 1) - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; - } - else if (CheckSeparator(perChar) || CheckSpecific(perChar)) - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; - } - else - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.final]; - } - } - else if (i == 0) - { - if (!CheckSeparator(sbFinal[i + 1])) - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; - } - else - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; - } - } - else if (CheckSeparator(sbFinal[i + 1])) - { - if (CheckSeparator(perChar) || CheckSpecific(perChar)) - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; - } - else - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.final]; - } - } - else if (CheckSeparator(perChar)) - { - if (CheckSeparator(sbFinal[i + 1])) - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; - } - else - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; - } - } - else if (CheckSpecific(sbFinal[i + 1])) - { - if (CheckSeparator(perChar) || CheckSpecific(perChar)) - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; - } - else - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.middle]; - } - } - else if (CheckSpecific(perChar)) - { - if (CheckSeparator(sbFinal[i + 1])) - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; - } - else - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; - } - } - else - { - perChar = sbFinal[i]; - sbFinal[i] = mapping[sbFinal[i]][(int)CharState.middle]; - } - } - return sbFinal.ToString(); - } - - // 主体语言是LTR - public static string ConvertLineL(string source) - { - listFinal.Clear(); - listRep.Clear(); - sbRep.Length = 0; - sbN.Length = 0; - int iReplace = 0; - DirectionType ePre = DirectionType.LTR; - char nextChar = '\0'; - for (int j = 0; j < source.Length; j++) - { - if (j < source.Length - 1) - nextChar = source[j + 1]; - else - nextChar = '\0'; - char item = source[j]; - DirectionType eCType = _GetDirection(item, nextChar, ePre, DirectionType.LTR); - if (eCType == DirectionType.RTL) - { - if (sbRep.Length == 0) - { - listFinal.Add('\x00bf'); - iReplace++; - } - - if (sbN.Length > 0) - sbRep.Append(sbN.ToString()); - sbN.Length = 0; - sbRep.Append(item); - } - else if (eCType == DirectionType.LTR) - { - if (sbRep.Length > 0) - { - listRep.Add(sbRep.ToString()); - } - sbRep.Length = 0; - - if (sbN.Length > 0) - { - for (int n = 0; n < sbN.Length; ++n) - { - listFinal.Add(sbN[n]); - } - } - sbN.Length = 0; - - // item = _ProcessBracket(item); // 文本主方向为LTR的话,括号不需要翻转 [2018/12/20/ 17:03:23 by aq_1000] - listFinal.Add(item); - } - else - { - sbN.Append(item); - } - ePre = eCType; - } - if (sbRep.Length > 0) - { - listRep.Add(sbRep.ToString()); - } - - // 一行中都只有中立字符的情况,就直接返回中立字符 [2018/12/6/ 16:34:38 by aq_1000] - if (sbN.Length > 0) - { - for (int n = 0; n < sbN.Length; ++n) - { - listFinal.Add(sbN[n]); - } - } - - sbRep.Length = 0; - sbN.Length = 0; - sbFinal.Length = 0; - sbFinal.Append(listFinal.ToArray()); - for (int m = 0; m < iReplace; m++) - { - for (int n = 0; n < sbFinal.Length; n++) - { - if (sbFinal[n] == '\x00bf') - { - sbRep.Length = 0; - sbRep.Append(_Reverse(listRep[0])); - listRep.RemoveAt(0); - - // 字符串反向的时候造成末尾空格跑到词首 [2018/4/11 20:04:35 --By aq_1000] - sbN.Length = 0; - for (int num4 = 0; num4 < sbRep.Length; num4++) - { - if (!_IsNeutrality(sbRep[num4])) - break; - sbN.Append(sbRep[num4]); - } - if (sbN.Length > 0) // 词首空格重新放到词尾 - { - sbRep.Remove(0, sbN.Length); - for (int iSpace = sbN.Length - 1; iSpace >= 0; --iSpace) // 空格也要取反 - { - sbRep.Append(sbN[iSpace]); - } - } - - sbFinal.Replace(sbFinal[n].ToString(), sbRep.ToString(), n, 1); - break; - } - } - } - return sbFinal.ToString(); - } - - // 主体语言是RTL,整个文本就从右往左读,LTR语言就作为嵌入语段处理 - public static string ConvertLineR(string source) - { - listFinal.Clear(); - listRep.Clear(); - sbRep.Length = 0; - sbN.Length = 0; - int iReplace = 0; - DirectionType ePre = DirectionType.RTL; - char nextChar = '\0'; - for (int j = 0; j < source.Length; j++) - { - if (j < source.Length - 1) - nextChar = source[j + 1]; - else - nextChar = '\0'; - char item = source[j]; - DirectionType eCType = _GetDirection(item, nextChar, ePre, DirectionType.RTL); - if (eCType == DirectionType.LTR) - { - if (sbRep.Length == 0) - { - listFinal.Add('\x00bf'); - iReplace++; - } - - if (sbN.Length > 0) - sbRep.Append(sbN.ToString()); - sbN.Length = 0; - sbRep.Append(item); - } - else if (eCType == DirectionType.RTL) - { - if (sbRep.Length > 0) - { - listRep.Add(sbRep.ToString()); - } - sbRep.Length = 0; - - if (sbN.Length > 0) - { - for (int n = 0; n < sbN.Length; ++n) - { - listFinal.Add(sbN[n]); - } - } - sbN.Length = 0; - - item = _ProcessBracket(item); - listFinal.Add(item); - } - else - { - sbN.Append(item); - } - ePre = eCType; - } - if (sbRep.Length > 0) - { - listRep.Add(sbRep.ToString()); - } - - // 一行中都只有中立字符的情况,就直接返回中立字符 [2018/12/6/ 16:34:38 by aq_1000] - if (sbN.Length > 0) - { - for (int n = 0; n < sbN.Length; ++n) - { - listFinal.Add(sbN[n]); - } - } - - sbFinal.Length = 0; - sbFinal.Append(listFinal.ToArray()); - for (int m = 0; m < iReplace; m++) - { - for (int n = 0; n < sbFinal.Length; n++) - { - if (sbFinal[n] == '\x00bf') - { - sbRep.Length = 0; - sbRep.Append(_Reverse(listRep[0])); - listRep.RemoveAt(0); - - // 字符串反向的时候造成末尾空格跑到词首 [2018/4/11 20:04:35 --By aq_1000] - sbN.Length = 0; - for (int num4 = 0; num4 < sbRep.Length; num4++) - { - if (!_IsNeutrality(sbRep[num4])) - break; - sbN.Append(sbRep[num4]); - } - if (sbN.Length > 0) // 词首空格重新放到词尾 - { - sbRep.Remove(0, sbN.Length); - for (int iSpace = sbN.Length - 1; iSpace >= 0; --iSpace) // 空格也要取反 - { - sbRep.Append(sbN[iSpace]); - } - } - - sbFinal.Replace(sbFinal[n].ToString(), sbRep.ToString(), n, 1); - break; - } - } - } - return sbFinal.ToString(); - } - - - private static string _Reverse(string source) - { - sbReverse.Length = 0; - int len = source.Length; - int i = len - 1; - while (i >= 0) - { - char ch = source[i]; - if (ch == '\r' && i != len - 1 && source[i + 1] == '\n') - { - i--; - continue; - } - - if (char.IsLowSurrogate(ch)) //不要反向高低代理对 - { - sbReverse.Append(source[i - 1]); - sbReverse.Append(ch); - i--; - } - else - sbReverse.Append(ch); - i--; - } - - return sbReverse.ToString(); - } - - private static void InitChars() - { - // {isolated,final,lead,middle} [2018/11/27 16:04:18 --By aq_1000] - mapping.Add(0x621, new char[4] { (char)0xFE80, (char)0xFE8A, (char)0xFE8B, (char)0xFE8C }); // Hamza - mapping.Add(0x627, new char[4] { (char)0xFE8D, (char)0xFE8E, (char)0xFE8D, (char)0xFE8E }); // Alef - mapping.Add(0x623, new char[4] { (char)0xFE83, (char)0xFE84, (char)0xFE83, (char)0xFE84 }); // AlefHamza - mapping.Add(0x624, new char[4] { (char)0xFE85, (char)0xFE85, (char)0xFE85, (char)0xFE85 }); // WawHamza - mapping.Add(0x625, new char[4] { (char)0xFE87, (char)0xFE87, (char)0xFE87, (char)0xFE87 }); // AlefMaksoor - mapping.Add(0x649, new char[4] { (char)0xFBFC, (char)0xFBFD, (char)0xFBFE, (char)0xFBFF }); // AlefMagsora - mapping.Add(0x626, new char[4] { (char)0xFE89, (char)0xFE8A, (char)0xFE8B, (char)0xFE8C }); // HamzaNabera - mapping.Add(0x628, new char[4] { (char)0xFE8F, (char)0xFE90, (char)0xFE91, (char)0xFE92 }); // Ba - mapping.Add(0x62A, new char[4] { (char)0xFE95, (char)0xFE96, (char)0xFE97, (char)0xFE98 }); // Ta - mapping.Add(0x62B, new char[4] { (char)0xFE99, (char)0xFE9A, (char)0xFE9B, (char)0xFE9C }); // Tha2 - mapping.Add(0x62C, new char[4] { (char)0xFE9D, (char)0xFE9E, (char)0xFE9F, (char)0xFEA0 }); // Jeem - mapping.Add(0x62D, new char[4] { (char)0xFEA1, (char)0xFEA2, (char)0xFEA3, (char)0xFEA4 }); // H7aa - mapping.Add(0x62E, new char[4] { (char)0xFEA5, (char)0xFEA6, (char)0xFEA7, (char)0xFEA8 }); // Khaa2 - mapping.Add(0x62F, new char[4] { (char)0xFEA9, (char)0xFEAA, (char)0xFEA9, (char)0xFEAA }); // Dal - mapping.Add(0x630, new char[4] { (char)0xFEAB, (char)0xFEAC, (char)0xFEAB, (char)0xFEAC }); // Thal - mapping.Add(0x631, new char[4] { (char)0xFEAD, (char)0xFEAE, (char)0xFEAD, (char)0xFEAD }); // Ra2 - mapping.Add(0x632, new char[4] { (char)0xFEAF, (char)0xFEB0, (char)0xFEAF, (char)0xFEB0 }); // Zeen - mapping.Add(0x633, new char[4] { (char)0xFEB1, (char)0xFEB2, (char)0xFEB3, (char)0xFEB4 }); // Seen - mapping.Add(0x634, new char[4] { (char)0xFEB5, (char)0xFEB6, (char)0xFEB7, (char)0xFEB8 }); // Sheen - mapping.Add(0x635, new char[4] { (char)0xFEB9, (char)0xFEBA, (char)0xFEBB, (char)0xFEBC }); // S9a - mapping.Add(0x636, new char[4] { (char)0xFEBD, (char)0xFEBE, (char)0xFEBF, (char)0xFEC0 }); // Dha - mapping.Add(0x637, new char[4] { (char)0xFEC1, (char)0xFEC2, (char)0xFEC3, (char)0xFEC4 }); // T6a - mapping.Add(0x638, new char[4] { (char)0xFEC5, (char)0xFEC6, (char)0xFEC7, (char)0xFEC8 }); // T6ha - mapping.Add(0x639, new char[4] { (char)0xFEC9, (char)0xFECA, (char)0xFECB, (char)0xFECC }); // Ain - mapping.Add(0x63A, new char[4] { (char)0xFECD, (char)0xFECE, (char)0xFECF, (char)0xFED0 }); // Gain - mapping.Add(0x641, new char[4] { (char)0xFED1, (char)0xFED2, (char)0xFED3, (char)0xFED4 }); // Fa - mapping.Add(0x642, new char[4] { (char)0xFED5, (char)0xFED6, (char)0xFED7, (char)0xFED8 }); // Gaf - mapping.Add(0x643, new char[4] { (char)0xFED9, (char)0xFEDA, (char)0xFEDB, (char)0xFEDC }); // Kaf - mapping.Add(0x644, new char[4] { (char)0xFEDD, (char)0xFEDE, (char)0xFEDF, (char)0xFEE0 }); // Lam - mapping.Add(0x645, new char[4] { (char)0xFEE1, (char)0xFEE2, (char)0xFEE3, (char)0xFEE4 }); // Meem - mapping.Add(0x646, new char[4] { (char)0xFEE5, (char)0xFEE6, (char)0xFEE7, (char)0xFEE8 }); // Noon - mapping.Add(0x647, new char[4] { (char)0xFEE9, (char)0xFEEA, (char)0xFEEB, (char)0xFEEC }); // Ha - mapping.Add(0x648, new char[4] { (char)0xFEED, (char)0xFEEE, (char)0xFEED, (char)0xFEEE }); // Waw - mapping.Add(0x64A, new char[4] { (char)0xFEF1, (char)0xFEF2, (char)0xFEF3, (char)0xFEF4 }); // Ya - mapping.Add(0x622, new char[4] { (char)0xFE81, (char)0xFE81, (char)0xFE81, (char)0xFE81 }); // AlefMad - mapping.Add(0x629, new char[4] { (char)0xFE93, (char)0xFE94, (char)0xFE94, (char)0xFE94 }); // TaMarboota // 该字符只会出现在末尾 [2018/4/10 16:04:18 --By aq_1000] - mapping.Add(0x67E, new char[4] { (char)0xFB56, (char)0xFB57, (char)0xFB58, (char)0xFB59 }); // PersianPe - mapping.Add(0x686, new char[4] { (char)0xFB7A, (char)0xFB7B, (char)0xFB7C, (char)0xFB7D }); // PersianChe - mapping.Add(0x698, new char[4] { (char)0xFB8A, (char)0xFB8B, (char)0xFB8A, (char)0xFB8B }); // PersianZe - mapping.Add(0x6AF, new char[4] { (char)0xFB92, (char)0xFB93, (char)0xFB94, (char)0xFB95 }); // PersianGaf - mapping.Add(0x6A9, new char[4] { (char)0xFB8E, (char)0xFB8F, (char)0xFB90, (char)0xFB91 }); // PersianGaf2 - - mapping.Add(0x6BE, new char[4] { (char)0xFEE9, (char)0xFEEA, (char)0xFEEB, (char)0xFEEC }); - mapping.Add(0x6CC, new char[4] { (char)0xFBFC, (char)0xFBFD, (char)0xFBFE, (char)0xFBFF }); - } - - // 是否中立方向字符 - private static bool _IsNeutrality(char uc) - { - return (uc == ':' || uc == ':' || uc == ' ' || /*uc == '%' ||*/ /*uc == '+' ||*/ /*uc == '-' ||*/ uc == '\n' || uc == '\r' || uc == '\t' || uc == '@' || - (uc >= 0x2600 && uc <= 0x27BF)); // 表情符号 - } - - // 是否句末标点符号 - private static bool _IsEndPunctuation(char uc, char nextChar) - { - if (uc == '.') - return _IsNeutrality(nextChar); - return (uc == '!' || uc == '!' || uc == '。' || uc == '،' || uc == '?' || uc == '؟'); - } - - // 判断字符方向 - private static DirectionType _GetDirection(char uc, char nextChar, DirectionType ePre, DirectionType eBase) - { - DirectionType eCType = ePre; - int uni = uc; - - if (_IsBracket(uc) || _IsEndPunctuation(uc, nextChar)) - { - eCType = eBase; // 括号和句末标点符号,方向根据上个字符为准 [2018/12/26/ 15:56:24 by aq_1000] - } - else if ((uni >= 0x660) && (uni <= 0x66D)) - { - eCType = DirectionType.LTR; - } - else if (IsArabicLetter(uc) || uc == '+' /*|| uc == '-'*/ || uc == '%') - { - eCType = DirectionType.RTL; - } - else if (uc == '-') - { - if (char.IsNumber(nextChar)) - eCType = DirectionType.LTR; - else - eCType = DirectionType.RTL; - } - else if (_IsNeutrality(uc)) // 中立方向字符,方向就和上一个字符一样 [2018/3/24 16:03:27 --By aq_1000] - { - if (ePre == DirectionType.UNKNOW || ePre == DirectionType.NEUTRAL) - { - if (char.IsNumber(nextChar)) // 数字都是弱LTR方向符,开头中立字符后面紧跟着数字的话,中立字符方向算文本主方向 [IsDigit()只是0-9] [2018/12/20/ 16:32:32 by aq_1000] - { - eCType = BaseDirection; - } - else - eCType = DirectionType.NEUTRAL; - } - else - eCType = ePre; - } - else - eCType = DirectionType.LTR; - - return eCType; - } - - // 是否括号 - private static bool _IsBracket(char uc) - { - return (uc == ')' || uc == '(' || uc == ')' || uc == '(' || - uc == ']' || uc == '[' || uc == '】' || uc == '【' || - uc == '}' || uc == '{' || - // uc == '≥' || uc == '≤' || uc == '>' || uc == '<' || - uc == '》' || uc == '《' || uc == '“' || uc == '”' || uc == '"'); - } - - // 这些配对符,在从右至左排列中应该逆序显示 - private static char _ProcessBracket(char uc) - { - if (uc == '[') return ']'; - else if (uc == ']') return '['; - else if (uc == '【') return '】'; - else if (uc == '】') return '【'; - else if (uc == '{') return '}'; - else if (uc == '}') return '{'; - else if (uc == '(') return ')'; - else if (uc == ')') return '('; - else if (uc == '(') return ')'; - else if (uc == ')') return '('; - else if (uc == '<') return '>'; - else if (uc == '>') return '<'; - else if (uc == '《') return '》'; - else if (uc == '》') return '《'; - else if (uc == '≤') return '≥'; - else if (uc == '≥') return '≤'; - else if (uc == '”') return '“'; - else if (uc == '”') return '“'; - else return uc; - } - } -} - diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs.meta deleted file mode 100644 index 89eb235..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 575b3af943ee8a04bb4d8feb568b1d2e -timeCreated: 1521600498 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs deleted file mode 100644 index 1603ee6..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs +++ /dev/null @@ -1,216 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class RichTextField : Container - { - /// - /// - /// - public IHtmlPageContext htmlPageContext { get; set; } - - /// - /// - /// - public HtmlParseOptions htmlParseOptions { get; private set; } - - /// - /// - /// - public Dictionary emojies { get; set; } - - /// - /// - /// - public TextField textField { get; private set; } - - public RichTextField() - { - gameObject.name = "RichTextField"; - this.opaque = true; - - htmlPageContext = HtmlPageContext.inst; - htmlParseOptions = new HtmlParseOptions(); - - this.textField = new TextField(); - textField.EnableRichSupport(this); - AddChild(textField); - } - - /// - /// - /// - virtual public string text - { - get { return textField.text; } - set { textField.text = value; } - } - - /// - /// - /// - virtual public string htmlText - { - get { return textField.htmlText; } - set { textField.htmlText = value; } - } - - /// - /// - /// - virtual public TextFormat textFormat - { - get { return textField.textFormat; } - set { textField.textFormat = value; } - } - - /// - /// - /// - /// - /// - public HtmlElement GetHtmlElement(string name) - { - List elements = textField.htmlElements; - int count = elements.Count; - for (int i = 0; i < count; i++) - { - HtmlElement element = elements[i]; - if (name.Equals(element.name, System.StringComparison.OrdinalIgnoreCase)) - return element; - } - - return null; - } - - /// - /// - /// - /// - /// - public HtmlElement GetHtmlElementAt(int index) - { - return textField.htmlElements[index]; - } - - /// - /// - /// - public int htmlElementCount - { - get { return textField.htmlElements.Count; } - } - - /// - /// - /// - /// - /// - public void ShowHtmlObject(int index, bool show) - { - HtmlElement element = textField.htmlElements[index]; - if (element.htmlObject != null && element.type != HtmlElementType.Link) - { - //set hidden flag - if (show) - element.status &= 253; //~(1<<1) - else - element.status |= 2; - - if ((element.status & 3) == 0) //not (hidden and clipped) - { - if ((element.status & 4) == 0) //not added - { - element.status |= 4; - element.htmlObject.Add(); - } - } - else - { - if ((element.status & 4) != 0) //added - { - element.status &= 251; - element.htmlObject.Remove(); - } - } - } - } - - public override void EnsureSizeCorrect() - { - textField.EnsureSizeCorrect(); - } - - override protected void OnSizeChanged() - { - textField.size = _contentRect.size; //千万不可以调用this.size,后者会触发EnsureSizeCorrect - - base.OnSizeChanged(); - } - - public override void Update(UpdateContext context) - { - textField.Redraw(); - - base.Update(context); - } - - public override void Dispose() - { - if ((_flags & Flags.Disposed) != 0) - return; - - CleanupObjects(); - - base.Dispose(); - } - - internal void CleanupObjects() - { - List elements = textField.htmlElements; - int count = elements.Count; - for (int i = 0; i < count; i++) - { - HtmlElement element = elements[i]; - if (element.htmlObject != null) - { - element.htmlObject.Remove(); - htmlPageContext.FreeObject(element.htmlObject); - } - } - } - - virtual internal void RefreshObjects() - { - List elements = textField.htmlElements; - int count = elements.Count; - for (int i = 0; i < count; i++) - { - HtmlElement element = elements[i]; - if (element.htmlObject != null) - { - if ((element.status & 3) == 0) //not (hidden and clipped) - { - if ((element.status & 4) == 0) //not added - { - element.status |= 4; - element.htmlObject.Add(); - } - } - else - { - if ((element.status & 4) != 0) //added - { - element.status &= 251; - element.htmlObject.Remove(); - } - } - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs.meta deleted file mode 100644 index 120a9d0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 87b472f7ce488fa4bbd8942342458ccf -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs deleted file mode 100644 index 90b8548..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class SelectionShape : DisplayObject, IMeshFactory - { - public readonly List rects; - - public SelectionShape() - { - CreateGameObject("SelectionShape"); - graphics = new NGraphics(gameObject); - graphics.texture = NTexture.Empty; - graphics.meshFactory = this; - - rects = new List(); - } - - /// - /// - /// - public Color color - { - get - { - return graphics.color; - } - set - { - graphics.color = value; - graphics.Tint(); - } - } - - public void Refresh() - { - int count = rects.Count; - if (count > 0) - { - Rect rect = new Rect(); - rect = rects[0]; - Rect tmp; - for (int i = 1; i < count; i++) - { - tmp = rects[i]; - rect = ToolSet.Union(ref rect, ref tmp); - } - SetSize(rect.xMax, rect.yMax); - } - else - SetSize(0, 0); - graphics.SetMeshDirty(); - } - - public void Clear() - { - rects.Clear(); - graphics.SetMeshDirty(); - } - - public void OnPopulateMesh(VertexBuffer vb) - { - int count = rects.Count; - if (count == 0 || this.color == Color.clear) - return; - - for (int i = 0; i < count; i++) - vb.AddQuad(rects[i]); - vb.AddTriangles(); - } - - protected override DisplayObject HitTest() - { - Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); - - if (_contentRect.Contains(localPoint)) - { - int count = rects.Count; - for (int i = 0; i < count; i++) - { - if (rects[i].Contains(localPoint)) - return this; - } - } - - return null; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs.meta deleted file mode 100644 index 1d1fd48..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7f1920b8ccf9c8b4ca5f2794991735d9 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs deleted file mode 100644 index bbd7c2f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs +++ /dev/null @@ -1,1652 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class TextField : DisplayObject, IMeshFactory - { - VertAlignType _verticalAlign; - TextFormat _textFormat; - bool _input; - string _text; - AutoSizeType _autoSize; - bool _wordWrap; - bool _singleLine; - bool _html; - RTLSupport.DirectionType _textDirection; - int _maxWidth; - - List _elements; - List _lines; - List _charPositions; - - BaseFont _font; - float _textWidth; - float _textHeight; - bool _textChanged; - float _yOffset; - float _fontSizeScale; - float _renderScale; - int _fontVersion; - string _parsedText; - int _ellipsisCharIndex; - int _typingEffectPos; - - RichTextField _richTextField; - - const int GUTTER_X = 2; - const int GUTTER_Y = 2; - const float IMAGE_BASELINE = 0.8f; - const int ELLIPSIS_LENGTH = 2; - static List sLineChars = new List(); - - public TextField() - { - _flags |= Flags.TouchDisabled; - - _textFormat = new TextFormat(); - _fontSizeScale = 1; - _renderScale = UIContentScaler.scaleFactor; - - _wordWrap = false; - _text = string.Empty; - _parsedText = string.Empty; - _typingEffectPos = -1; - - _elements = new List(0); - _lines = new List(1); - - CreateGameObject("TextField"); - graphics = new NGraphics(gameObject); - graphics.meshFactory = this; - } - - internal void EnableRichSupport(RichTextField richTextField) - { - _richTextField = richTextField; - if (richTextField is InputTextField) - { - _input = true; - EnableCharPositionSupport(); - } - } - - public void EnableCharPositionSupport() - { - if (_charPositions == null) - { - _charPositions = new List(); - _textChanged = true; - } - } - - /// - /// - /// - public TextFormat textFormat - { - get { return _textFormat; } - set - { - _textFormat = value; - ApplyFormat(); - } - } - - /// - /// - /// - public void ApplyFormat() - { - string fontName = _textFormat.font; - if (string.IsNullOrEmpty(fontName)) - fontName = UIConfig.defaultFont; - BaseFont newFont = FontManager.GetFont(fontName); - if (_font != newFont) - { - _font = newFont; - _fontVersion = _font.version; - graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); - } - - if (!string.IsNullOrEmpty(_text)) - _textChanged = true; - } - - /// - /// - /// - public AlignType align - { - get { return _textFormat.align; } - set - { - if (_textFormat.align != value) - { - _textFormat.align = value; - if (!string.IsNullOrEmpty(_text)) - _textChanged = true; - } - } - } - - /// - /// - /// - public VertAlignType verticalAlign - { - get - { - return _verticalAlign; - } - set - { - if (_verticalAlign != value) - { - _verticalAlign = value; - if (!_textChanged) - ApplyVertAlign(); - } - } - } - - /// - /// - /// - public string text - { - get { return _text; } - set - { - if (_text == value && !_html) - return; - - _text = value; - _textChanged = true; - _html = false; - } - } - - /// - /// - /// - public string htmlText - { - get { return _text; } - set - { - if (_text == value && _html) - return; - - _text = value; - _textChanged = true; - _html = true; - } - } - - public string parsedText - { - get { return _parsedText; } - } - - /// - /// - /// - public AutoSizeType autoSize - { - get { return _autoSize; } - set - { - if (_autoSize != value) - { - _autoSize = value; - _textChanged = true; - } - } - } - - /// - /// - /// - public bool wordWrap - { - get { return _wordWrap; } - set - { - if (_wordWrap != value) - { - _wordWrap = value; - _textChanged = true; - } - } - } - - /// - /// - /// - public bool singleLine - { - get { return _singleLine; } - set - { - if (_singleLine != value) - { - _singleLine = value; - _textChanged = true; - } - } - } - - /// - /// - /// - public float stroke - { - get - { - return _textFormat.outline; - } - set - { - if (_textFormat.outline != value) - { - _textFormat.outline = value; - _textChanged = true; - } - } - } - - /// - /// - /// - public Color strokeColor - { - get - { - return _textFormat.outlineColor; - } - set - { - if (_textFormat.outlineColor != value) - { - _textFormat.outlineColor = value; - _textChanged = true; - } - } - } - - /// - /// - /// - public Vector2 shadowOffset - { - get - { - return _textFormat.shadowOffset; - } - set - { - _textFormat.shadowOffset = value; - _textChanged = true; - } - } - - /// - /// - /// - public float textWidth - { - get - { - if (_textChanged) - BuildLines(); - - return _textWidth; - } - } - - /// - /// - /// - public float textHeight - { - get - { - if (_textChanged) - BuildLines(); - - return _textHeight; - } - } - - /// - /// - /// - public int maxWidth - { - get { return _maxWidth; } - set - { - if (_maxWidth != value) - { - _maxWidth = value; - _textChanged = true; - } - } - } - - /// - /// - /// - public List htmlElements - { - get - { - if (_textChanged) - BuildLines(); - - return _elements; - } - } - - /// - /// - /// - public List lines - { - get - { - if (_textChanged) - BuildLines(); - - return _lines; - } - } - - /// - /// - /// - public List charPositions - { - get - { - if (_textChanged) - BuildLines(); - - graphics.UpdateMesh(); - - return _charPositions; - } - } - - /// - /// - /// - public RichTextField richTextField - { - get { return _richTextField; } - } - - /// - /// - /// - public bool Redraw() - { - if (_font == null) - { - _font = FontManager.GetFont(UIConfig.defaultFont); - graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); - _fontVersion = _font.version; - _textChanged = true; - } - - if (_font.keepCrisp && _renderScale != UIContentScaler.scaleFactor) - _textChanged = true; - - if (_font.version != _fontVersion) - { - _fontVersion = _font.version; - if (_font.mainTexture != graphics.texture) - { - graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); - InvalidateBatchingState(); - } - - _textChanged = true; - } - - if (_textChanged) - BuildLines(); - - return graphics.UpdateMesh(); - } - - public int SetTypingEffectPos(int pos) - { - _typingEffectPos = pos; - graphics.SetMeshDirty(); - Redraw(); - pos = _typingEffectPos; - _typingEffectPos = -1; - return pos; - } - - /// - /// - /// - public bool HasCharacter(char ch) - { - return _font.HasCharacter(ch); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void GetLinesShape(int startLine, float startCharX, int endLine, float endCharX, - bool clipped, - List resultRects) - { - LineInfo line1 = _lines[startLine]; - LineInfo line2 = _lines[endLine]; - bool leftAlign = _textFormat.align == AlignType.Left; - if (startLine == endLine) - { - Rect r = Rect.MinMaxRect(startCharX, line1.y, endCharX, line1.y + line1.height); - if (clipped) - resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); - else - resultRects.Add(r); - } - else if (startLine == endLine - 1) - { - Rect r = Rect.MinMaxRect(startCharX, line1.y, leftAlign ? (GUTTER_X + line1.width) : _contentRect.xMax, line1.y + line1.height); - if (clipped) - resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); - else - resultRects.Add(r); - r = Rect.MinMaxRect(GUTTER_X, line1.y + line1.height, endCharX, line2.y + line2.height); - if (clipped) - resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); - else - resultRects.Add(r); - } - else - { - Rect r = Rect.MinMaxRect(startCharX, line1.y, leftAlign ? (GUTTER_X + line1.width) : _contentRect.xMax, line1.y + line1.height); - if (clipped) - resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); - else - resultRects.Add(r); - for (int i = startLine + 1; i < endLine; i++) - { - LineInfo line = _lines[i]; - r = Rect.MinMaxRect(GUTTER_X, r.yMax, leftAlign ? (GUTTER_X + line.width) : _contentRect.xMax, line.y + line.height); - if (clipped) - resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); - else - resultRects.Add(r); - } - r = Rect.MinMaxRect(GUTTER_X, r.yMax, endCharX, line2.y + line2.height); - if (clipped) - resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); - else - resultRects.Add(r); - } - } - - override protected void OnSizeChanged() - { - if ((_flags & Flags.UpdatingSize) == 0) - { - if (_autoSize == AutoSizeType.Shrink || _autoSize == AutoSizeType.Ellipsis || _wordWrap && (_flags & Flags.WidthChanged) != 0) - _textChanged = true; - else if (_autoSize != AutoSizeType.None) - graphics.SetMeshDirty(); - - if (_verticalAlign != VertAlignType.Top) - ApplyVertAlign(); - } - - base.OnSizeChanged(); - } - - public override void EnsureSizeCorrect() - { - if (_textChanged && _autoSize != AutoSizeType.None) - BuildLines(); - } - - public override void Update(UpdateContext context) - { - if (_richTextField == null) //如果是richTextField,会在update前主动调用了Redraw - Redraw(); - - base.Update(context); - } - - /// - /// 准备字体纹理 - /// - void RequestText() - { - if (!_html) - { - _font.PrepareCharacters(_parsedText, _textFormat, _fontSizeScale); - if (_autoSize == AutoSizeType.Ellipsis) - _font.PrepareCharacters("…", _textFormat, _fontSizeScale); - } - else - { - int count = _elements.Count; - for (int i = 0; i < count; i++) - { - HtmlElement element = _elements[i]; - if (element.type == HtmlElementType.Text) - { - _font.SetFormat(element.format, _fontSizeScale); - _font.PrepareCharacters(element.text, element.format, _fontSizeScale); - if (_autoSize == AutoSizeType.Ellipsis) - _font.PrepareCharacters("…", element.format, _fontSizeScale); - } - } - } - } - - void BuildLines() - { - if (_font == null) - { - _font = FontManager.GetFont(UIConfig.defaultFont); - _fontVersion = _font.version; - graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); - } - - _textChanged = false; - graphics.SetMeshDirty(); - _renderScale = UIContentScaler.scaleFactor; - _fontSizeScale = 1; - _ellipsisCharIndex = -1; - - Cleanup(); - - if (_text.Length == 0) - { - LineInfo emptyLine = LineInfo.Borrow(); - emptyLine.width = 0; - emptyLine.height = _font.GetLineHeight(_textFormat.size); - emptyLine.charIndex = emptyLine.charCount = 0; - emptyLine.y = emptyLine.y2 = GUTTER_Y; - _lines.Add(emptyLine); - - _textWidth = _textHeight = 0; - } - else - { - ParseText(); - - _font.Prepare(_textFormat); - - BuildLines2(); - - if (_font.BuildGraphics(graphics)) - InvalidateBatchingState(); - - if (_autoSize == AutoSizeType.Shrink) - DoShrink(); - } - - if (_autoSize == AutoSizeType.Both) - { - _flags |= Flags.UpdatingSize; - if (_richTextField != null) - { - if (_input) - { - float w = Mathf.Max(_textFormat.size, _textWidth); - float h = Mathf.Max(_font.GetLineHeight(_textFormat.size) + GUTTER_Y * 2, _textHeight); - _richTextField.SetSize(w, h); - } - else - _richTextField.SetSize(_textWidth, _textHeight); - } - else - SetSize(_textWidth, _textHeight); - InvalidateBatchingState(); - _flags &= ~Flags.UpdatingSize; - } - else if (_autoSize == AutoSizeType.Height) - { - _flags |= Flags.UpdatingSize; - if (_richTextField != null) - { - if (_input) - _richTextField.height = Mathf.Max(_font.GetLineHeight(_textFormat.size) + GUTTER_Y * 2, _textHeight); - else - _richTextField.height = _textHeight; - } - else - this.height = _textHeight; - InvalidateBatchingState(); - _flags &= ~Flags.UpdatingSize; - } - - _yOffset = 0; - ApplyVertAlign(); - } - - void ParseText() - { -#if RTL_TEXT_SUPPORT - _textDirection = RTLSupport.DetectTextDirection(_text); -#endif - if (_html) - { - HtmlParser.inst.Parse(_text, _textFormat, _elements, - _richTextField != null ? _richTextField.htmlParseOptions : null); - - _parsedText = string.Empty; - } - else - _parsedText = _text; - - int elementCount = _elements.Count; - if (elementCount == 0) - { - if (_textDirection != RTLSupport.DirectionType.UNKNOW) - _parsedText = RTLSupport.DoMapping(_parsedText); - - bool flag = _input || _richTextField != null && _richTextField.emojies != null; - if (!flag) - { - //检查文本中是否有需要转换的字符,如果没有,节省一个new StringBuilder的操作。 - int cnt = _parsedText.Length; - for (int i = 0; i < cnt; i++) - { - char ch = _parsedText[i]; - if (ch == '\r' || char.IsHighSurrogate(ch)) - { - flag = true; - break; - } - } - } - - if (flag) - { - StringBuilder buffer = new StringBuilder(); - ParseText(buffer, _parsedText, -1); - elementCount = _elements.Count; - _parsedText = buffer.ToString(); - } - } - else - { - StringBuilder buffer = new StringBuilder(); - int i = 0; - while (i < elementCount) - { - HtmlElement element = _elements[i]; - element.charIndex = buffer.Length; - if (element.type == HtmlElementType.Text) - { - if (_textDirection != RTLSupport.DirectionType.UNKNOW) - element.text = RTLSupport.DoMapping(element.text); - - i = ParseText(buffer, element.text, i); - elementCount = _elements.Count; - } - else if (element.isEntity) - buffer.Append(' '); - i++; - } - _parsedText = buffer.ToString(); - -#if RTL_TEXT_SUPPORT - // element.text拼接完后再进行一次判断文本主语序,避免html标签存在把文本变成混合文本 [2018/12/12/ 16:47:42 by aq_1000] - _textDirection = RTLSupport.DetectTextDirection(_parsedText); -#endif - } - } - - void BuildLines2() - { - float letterSpacing = _textFormat.letterSpacing * _fontSizeScale; - float lineSpacing = (_textFormat.lineSpacing - 1) * _fontSizeScale; - float rectWidth = _contentRect.width - GUTTER_X * 2; - float rectHeight = _contentRect.height > 0 ? Mathf.Max(_contentRect.height, _font.GetLineHeight(_textFormat.size)) : 0; - float glyphWidth = 0, glyphHeight = 0, baseline = 0; - short wordLen = 0; - bool wordPossible = false; - float posx = 0; - bool checkEdge = _autoSize == AutoSizeType.Ellipsis; - bool hasLine = _textFormat.underline || _textFormat.strikethrough; - - TextFormat format = _textFormat; - _font.SetFormat(format, _fontSizeScale); - bool wrap = _wordWrap && !_singleLine; - if (_maxWidth > 0) - { - wrap = true; - rectWidth = _maxWidth - GUTTER_X * 2; - } - _textWidth = _textHeight = 0; - - RequestText(); - - int elementCount = _elements.Count; - int elementIndex = 0; - HtmlElement element = null; - if (elementCount > 0) - element = _elements[elementIndex]; - int textLength = _parsedText.Length; - - LineInfo line = LineInfo.Borrow(); - _lines.Add(line); - line.y = line.y2 = GUTTER_Y; - sLineChars.Clear(); - - for (int charIndex = 0; charIndex < textLength; charIndex++) - { - char ch = _parsedText[charIndex]; - - glyphWidth = glyphHeight = baseline = 0; - - while (element != null && element.charIndex == charIndex) - { - if (element.type == HtmlElementType.Text) - { - format = element.format; - _font.SetFormat(format, _fontSizeScale); - - if (format.underline || format.strikethrough) - hasLine = true; - } - else - { - if (element.type == HtmlElementType.Link) - hasLine = true; - - IHtmlObject htmlObject = element.htmlObject; - if (_richTextField != null && htmlObject == null) - { - element.space = (int)(rectWidth - line.width - 4); - htmlObject = _richTextField.htmlPageContext.CreateObject(_richTextField, element); - element.htmlObject = htmlObject; - } - if (htmlObject != null) - { - glyphWidth = htmlObject.width + 2; - glyphHeight = htmlObject.height; - baseline = glyphHeight * IMAGE_BASELINE; - } - - if (element.isEntity) - ch = '\0'; //indicate it is a place holder - } - - elementIndex++; - if (elementIndex < elementCount) - element = _elements[elementIndex]; - else - element = null; - } - - if (ch == '\0' || ch == '\n') - { - wordPossible = false; - } - else if (_font.GetGlyph(ch == '\t' ? ' ' : ch, out glyphWidth, out glyphHeight, out baseline)) - { - if (ch == '\t') - glyphWidth *= 4; - - if (wordPossible) - { - if (char.IsWhiteSpace(ch)) - { - wordLen = 0; - } - else if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' - || ch >= '0' && ch <= '9' - || ch == '.' || ch == '"' || ch == '\'' - || format.specialStyle == TextFormat.SpecialStyle.Subscript - || format.specialStyle == TextFormat.SpecialStyle.Superscript - || _textDirection != RTLSupport.DirectionType.UNKNOW && RTLSupport.IsArabicLetter(ch)) - { - wordLen++; - } - else - wordPossible = false; - } - else if (char.IsWhiteSpace(ch)) - { - wordLen = 0; - wordPossible = true; - } - else if (format.specialStyle == TextFormat.SpecialStyle.Subscript - || format.specialStyle == TextFormat.SpecialStyle.Superscript) - { - if (sLineChars.Count > 0) - { - wordLen = 2; //避免上标和下标折到下一行 - wordPossible = true; - } - } - else - wordPossible = false; - } - else - wordPossible = false; - - sLineChars.Add(new LineCharInfo() { width = glyphWidth, height = glyphHeight, baseline = baseline }); - if (glyphWidth != 0) - { - if (posx != 0) - posx += letterSpacing; - posx += glyphWidth; - } - - if (ch == '\n' && !_singleLine) - { - UpdateLineInfo(line, letterSpacing, sLineChars.Count); - - LineInfo newLine = LineInfo.Borrow(); - _lines.Add(newLine); - newLine.y = line.y + (line.height + lineSpacing); - if (newLine.y < GUTTER_Y) //lineSpacing maybe negative - newLine.y = GUTTER_Y; - newLine.y2 = newLine.y; - newLine.charIndex = line.charIndex + line.charCount; - - if (checkEdge && line.y + line.height < rectHeight) - _ellipsisCharIndex = line.charIndex + Math.Max(0, line.charCount - ELLIPSIS_LENGTH); - - sLineChars.Clear(); - wordPossible = false; - posx = 0; - line = newLine; - } - else if (posx > rectWidth) - { - if (wrap) - { - int lineCharCount = sLineChars.Count; - int toMoveChars; - - if (wordPossible && wordLen < 20 && lineCharCount > 2) //if word had broken, move word to new line - { - toMoveChars = wordLen; - //we caculate the line width WITHOUT the tailing space - UpdateLineInfo(line, letterSpacing, lineCharCount - (toMoveChars + 1)); - line.charCount++; //but keep it in this line. - } - else - { - toMoveChars = lineCharCount > 1 ? 1 : 0; //if only one char here, we cant move it to new line - UpdateLineInfo(line, letterSpacing, lineCharCount - toMoveChars); - } - - LineInfo newLine = LineInfo.Borrow(); - _lines.Add(newLine); - newLine.y = line.y + (line.height + lineSpacing); - if (newLine.y < GUTTER_Y) - newLine.y = GUTTER_Y; - newLine.y2 = newLine.y; - newLine.charIndex = line.charIndex + line.charCount; - - posx = 0; - if (toMoveChars != 0) - { - for (int i = line.charCount; i < lineCharCount; i++) - { - LineCharInfo ci = sLineChars[i]; - if (posx != 0) - posx += letterSpacing; - posx += ci.width; - } - - sLineChars.RemoveRange(0, line.charCount); - } - else - sLineChars.Clear(); - - if (checkEdge && line.y + line.height < rectHeight) - _ellipsisCharIndex = line.charIndex + Math.Max(0, line.charCount - ELLIPSIS_LENGTH); - - wordPossible = false; - line = newLine; - } - else if (checkEdge && _ellipsisCharIndex == -1) - _ellipsisCharIndex = line.charIndex + Math.Max(0, sLineChars.Count - ELLIPSIS_LENGTH - 1); - } - } - - UpdateLineInfo(line, letterSpacing, sLineChars.Count); - - if (_textWidth > 0) - _textWidth += GUTTER_X * 2; - _textHeight = line.y + line.height + GUTTER_Y; - - if (checkEdge && _textWidth <= _contentRect.width && _textHeight <= _contentRect.height + GUTTER_Y) - _ellipsisCharIndex = -1; - - if (checkEdge) - _font.GetGlyph('…', out glyphWidth, out glyphHeight, out baseline); - if (hasLine) - _font.GetGlyph('_', out glyphWidth, out glyphHeight, out baseline); - - _textWidth = Mathf.RoundToInt(_textWidth); - _textHeight = Mathf.RoundToInt(_textHeight); - } - - void UpdateLineInfo(LineInfo line, float letterSpacing, int cnt) - { - for (int i = 0; i < cnt; i++) - { - LineCharInfo ci = sLineChars[i]; - if (ci.baseline > line.baseline) - { - line.height += (ci.baseline - line.baseline); - line.baseline = ci.baseline; - } - - if (ci.height - ci.baseline > line.height - line.baseline) - line.height += (ci.height - ci.baseline - (line.height - line.baseline)); - - if (ci.width > 0) - { - if (line.width != 0) - line.width += letterSpacing; - line.width += ci.width; - } - } - - if (line.height == 0) - { - if (_lines.Count == 1) - line.height = _textFormat.size; - else - line.height = _lines[_lines.Count - 2].height; - } - - if (line.width > _textWidth) - _textWidth = line.width; - - line.charCount = (short)cnt; - } - - void DoShrink() - { - if (_lines.Count > 1 && _textHeight > _contentRect.height) - { - //多行的情况,涉及到自动换行,得用二分法查找最合适的比例,会消耗多一点计算资源 - int low = 0; - int high = _textFormat.size; - - //先尝试猜测一个比例 - _fontSizeScale = Mathf.Sqrt(_contentRect.height / _textHeight); - int cur = Mathf.FloorToInt(_fontSizeScale * _textFormat.size); - - while (true) - { - LineInfo.Return(_lines); - BuildLines2(); - - if (_textWidth > _contentRect.width || _textHeight > _contentRect.height) - high = cur; - else - low = cur; - if (high - low > 1 || high != low && cur == high) - { - cur = low + (high - low) / 2; - _fontSizeScale = (float)cur / _textFormat.size; - } - else - break; - } - } - else if (_textWidth > _contentRect.width) - { - _fontSizeScale = _contentRect.width / _textWidth; - - LineInfo.Return(_lines); - BuildLines2(); - - if (_textWidth > _contentRect.width) //如果还超出,缩小一点再来一次 - { - int size = Mathf.FloorToInt(_textFormat.size * _fontSizeScale); - size--; - _fontSizeScale = (float)size / _textFormat.size; - - LineInfo.Return(_lines); - BuildLines2(); - } - } - } - - int ParseText(StringBuilder buffer, string source, int elementIndex) - { - int textLength = source.Length; - int j = 0; - int appendPos = 0; - bool hasEmojies = _richTextField != null && _richTextField.emojies != null; - while (j < textLength) - { - char ch = source[j]; - if (ch == '\r') - { - buffer.Append(source, appendPos, j - appendPos); - if (j != textLength - 1 && source[j + 1] == '\n') - j++; - appendPos = j + 1; - buffer.Append('\n'); - } - else - { - bool highSurrogate = char.IsHighSurrogate(ch); - if (hasEmojies) - { - uint emojiKey = 0; - Emoji emoji; - if (highSurrogate) - emojiKey = ((uint)source[j + 1] & 0x03FF) + ((((uint)ch & 0x03FF) + 0x40) << 10); - else - emojiKey = ch; - if (_richTextField.emojies.TryGetValue(emojiKey, out emoji)) - { - HtmlElement imageElement = HtmlElement.GetElement(HtmlElementType.Image); - imageElement.Set("src", emoji.url); - if (emoji.width != 0) - imageElement.Set("width", emoji.width); - if (emoji.height != 0) - imageElement.Set("height", emoji.height); - if (highSurrogate) - imageElement.text = source.Substring(j, 2); - else - imageElement.text = source.Substring(j, 1); - imageElement.format.align = _textFormat.align; - _elements.Insert(++elementIndex, imageElement); - - buffer.Append(source, appendPos, j - appendPos); - appendPos = j; - imageElement.charIndex = buffer.Length; - } - } - - if (highSurrogate) - { - buffer.Append(source, appendPos, j - appendPos); - appendPos = j + 2; - j++;//跳过lowSurrogate - buffer.Append(' '); - } - } - j++; - } - if (appendPos < textLength) - buffer.Append(source, appendPos, j - appendPos); - - return elementIndex; - } - - public void OnPopulateMesh(VertexBuffer vb) - { - if (_textWidth == 0 && _lines.Count == 1 || _typingEffectPos == 0) - { - if (_charPositions != null) - { - _charPositions.Clear(); - _charPositions.Add(new CharPosition()); - } - - if (_richTextField != null) - _richTextField.RefreshObjects(); - - if (_typingEffectPos >= 0 && _textWidth == 0 && _lines.Count == 1) - _typingEffectPos = -1; - - return; - } - - float letterSpacing = _textFormat.letterSpacing * _fontSizeScale; - TextFormat format = _textFormat; - _font.SetFormat(format, _fontSizeScale); - _font.StartDraw(graphics); - - float rectWidth = _contentRect.width > 0 ? (_contentRect.width - GUTTER_X * 2) : 0; - float rectHeight = _contentRect.height > 0 ? Mathf.Max(_contentRect.height, _font.GetLineHeight(format.size)) : 0; - - if (_charPositions != null) - _charPositions.Clear(); - - HtmlLink currentLink = null; - float linkStartX = 0; - int linkStartLine = 0; - - float posx = 0; - float indent_x; - bool clipping = !_input && (_autoSize == AutoSizeType.None || _autoSize == AutoSizeType.Ellipsis); - bool lineClipped; - AlignType lineAlign; - float glyphWidth, glyphHeight, baseline; - int charCount = 0; - float underlineStart; - float strikethroughStart; - int minFontSize; - int maxFontSize; - string rtlLine = null; - - int elementIndex = 0; - int elementCount = _elements.Count; - HtmlElement element = null; - if (elementCount > 0) - element = _elements[elementIndex]; - - int lineCount = _lines.Count; - for (int i = 0; i < lineCount; ++i) - { - LineInfo line = _lines[i]; - if (line.charCount == 0) - continue; - - lineClipped = clipping && i != 0 && line.y + line.height > rectHeight; - lineAlign = format.align; - if (element != null && element.charIndex == line.charIndex) - lineAlign = element.format.align; - else - lineAlign = format.align; - - if (_textDirection == RTLSupport.DirectionType.RTL) - { - if (lineAlign == AlignType.Center) - indent_x = (int)((rectWidth + line.width) / 2); - else if (lineAlign == AlignType.Right) - indent_x = rectWidth; - else - indent_x = line.width + GUTTER_X * 2; - - if (indent_x > rectWidth) - indent_x = rectWidth; - - posx = indent_x - GUTTER_X; - } - else - { - if (lineAlign == AlignType.Center) - indent_x = (int)((rectWidth - line.width) / 2); - else if (lineAlign == AlignType.Right) - indent_x = rectWidth - line.width; - else - indent_x = 0; - - if (indent_x < 0) - indent_x = 0; - - posx = GUTTER_X + indent_x; - } - - int lineCharCount = line.charCount; - underlineStart = posx; - strikethroughStart = posx; - minFontSize = maxFontSize = format.size; - - if (_textDirection != RTLSupport.DirectionType.UNKNOW) - { - rtlLine = _parsedText.Substring(line.charIndex, lineCharCount); - if (_textDirection == RTLSupport.DirectionType.RTL) - rtlLine = RTLSupport.ConvertLineR(rtlLine); - else - rtlLine = RTLSupport.ConvertLineL(rtlLine); - lineCharCount = rtlLine.Length; - } - - for (int j = 0; j < lineCharCount; j++) - { - int charIndex = line.charIndex + j; - char ch = rtlLine != null ? rtlLine[j] : _parsedText[charIndex]; - bool isEllipsis = charIndex == _ellipsisCharIndex; - - while (element != null && charIndex == element.charIndex) - { - if (element.type == HtmlElementType.Text) - { - if (format.underline != element.format.underline) - { - if (format.underline) - { - if (!lineClipped) - { - float lineWidth; - if (_textDirection == RTLSupport.DirectionType.UNKNOW) - lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - underlineStart; - else - lineWidth = underlineStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); - if (lineWidth > 0) - _font.DrawLine(vb, underlineStart < posx ? underlineStart : posx, -(line.y + line.baseline), lineWidth, maxFontSize, 0); - } - maxFontSize = 0; - } - else - underlineStart = posx; - } - - if (format.strikethrough != element.format.strikethrough) - { - if (format.strikethrough) - { - if (!lineClipped) - { - float lineWidth; - if (_textDirection == RTLSupport.DirectionType.UNKNOW) - lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - strikethroughStart; - else - lineWidth = strikethroughStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); - if (lineWidth > 0) - _font.DrawLine(vb, strikethroughStart < posx ? strikethroughStart : posx, -(line.y + line.baseline), lineWidth, minFontSize, 1); - } - minFontSize = int.MaxValue; - } - else - strikethroughStart = posx; - } - - format = element.format; - minFontSize = Math.Min(minFontSize, format.size); - maxFontSize = Math.Max(maxFontSize, format.size); - _font.SetFormat(format, _fontSizeScale); - } - else if (element.type == HtmlElementType.Link) - { - currentLink = (HtmlLink)element.htmlObject; - if (currentLink != null) - { - element.position = Vector2.zero; - currentLink.SetPosition(0, 0); - linkStartX = posx; - linkStartLine = i; - } - } - else if (element.type == HtmlElementType.LinkEnd) - { - if (currentLink != null) - { - currentLink.SetArea(linkStartLine, linkStartX, i, posx); - currentLink = null; - } - } - else - { - IHtmlObject htmlObj = element.htmlObject; - if (htmlObj != null) - { - if (_textDirection == RTLSupport.DirectionType.RTL) - posx -= htmlObj.width - 2; - - if (_typingEffectPos > 0 && charCount == _typingEffectPos) - goto out_loop; - - if (_charPositions != null) - { - CharPosition cp = new CharPosition(); - cp.lineIndex = (short)i; - cp.charIndex = charCount; - cp.offsetX = posx; - cp.width = (short)htmlObj.width; - _charPositions.Add(cp); - } - charCount++; - - if (isEllipsis || lineClipped || clipping && (posx < GUTTER_X || posx > GUTTER_X && posx + htmlObj.width > _contentRect.width - GUTTER_X)) - element.status |= 1; - else - element.status &= 254; - element.status &= 253; - - element.position = new Vector2(posx + 1, line.y + line.baseline - htmlObj.height * IMAGE_BASELINE); - htmlObj.SetPosition(element.position.x, element.position.y); - - if (_textDirection == RTLSupport.DirectionType.RTL) - posx -= letterSpacing; - else - posx += htmlObj.width + letterSpacing + 2; - } - } - - if (element.isEntity) - ch = '\0'; - - elementIndex++; - if (elementIndex < elementCount) - element = _elements[elementIndex]; - else - element = null; - } - - if (isEllipsis) - ch = '…'; - else if (ch == '\0') - continue; - - if (_font.GetGlyph(ch == '\t' ? ' ' : ch, out glyphWidth, out glyphHeight, out baseline)) - { - if (ch == '\t') - glyphWidth *= 4; - - if (!isEllipsis) - { - if (_textDirection == RTLSupport.DirectionType.RTL) - { - if (lineClipped || clipping && (rectWidth < 7 || posx != (indent_x - GUTTER_X)) && posx < GUTTER_X - 0.5f) //超出区域,剪裁 - { - posx -= (letterSpacing + glyphWidth); - continue; - } - - posx -= glyphWidth; - } - else - { - if (lineClipped || clipping && (rectWidth < 7 || posx != (GUTTER_X + indent_x)) && posx + glyphWidth > _contentRect.width - GUTTER_X + 0.5f) //超出区域,剪裁 - { - posx += letterSpacing + glyphWidth; - continue; - } - } - } - - if (_typingEffectPos > 0 && charCount == _typingEffectPos) - { - if (char.IsWhiteSpace(ch)) - _typingEffectPos++; - else - goto out_loop; - } - - if (_charPositions != null) - { - CharPosition cp = new CharPosition(); - cp.lineIndex = (short)i; - cp.charIndex = charCount; - cp.offsetX = posx; - cp.width = (short)glyphWidth; - _charPositions.Add(cp); - } - charCount++; - - _font.DrawGlyph(vb, posx, -(line.y + line.baseline)); - - if (_textDirection == RTLSupport.DirectionType.RTL) - posx -= letterSpacing; - else - posx += letterSpacing + glyphWidth; - } - else //if GetGlyph failed - { - if (_typingEffectPos > 0 && charCount == _typingEffectPos) - _typingEffectPos++; - - if (_charPositions != null) - { - CharPosition cp = new CharPosition(); - cp.lineIndex = (short)i; - cp.charIndex = charCount; - cp.offsetX = posx; - _charPositions.Add(cp); - } - charCount++; - - if (_textDirection == RTLSupport.DirectionType.RTL) - posx -= letterSpacing; - else - posx += letterSpacing; - } - - if (isEllipsis) - lineClipped = true; - }//text loop - - if (!lineClipped) - { - if (format.underline) - { - float lineWidth; - if (_textDirection == RTLSupport.DirectionType.UNKNOW) - lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - underlineStart; - else - lineWidth = underlineStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); - if (lineWidth > 0) - _font.DrawLine(vb, underlineStart < posx ? underlineStart : posx, -(line.y + line.baseline), lineWidth, maxFontSize, 0); - } - - if (format.strikethrough) - { - float lineWidth; - if (_textDirection == RTLSupport.DirectionType.UNKNOW) - lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - strikethroughStart; - else - lineWidth = strikethroughStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); - if (lineWidth > 0) - _font.DrawLine(vb, strikethroughStart < posx ? strikethroughStart : posx, -(line.y + line.baseline), lineWidth, minFontSize, 1); - } - } - - }//line loop - - if (element != null && element.type == HtmlElementType.LinkEnd && currentLink != null) - currentLink.SetArea(linkStartLine, linkStartX, lineCount - 1, posx); - - if (_charPositions != null) - { - CharPosition cp = new CharPosition(); - cp.lineIndex = (short)(lineCount - 1); - cp.charIndex = charCount; - cp.offsetX = posx; - _charPositions.Add(cp); - } - charCount++; - - out_loop: - - if (_typingEffectPos > 0) - { - if (charCount == _typingEffectPos) - _typingEffectPos++; - else - _typingEffectPos = -1; - } - - vb.CheckMeshLimit(); - - if (_font.customOutline) - { - if (_textFormat.outline != 0) - vb.GenerateOutline(UIConfig.enhancedTextOutlineEffect ? 8 : 4, _textFormat.outline, _textFormat.outlineColor); - if (_textFormat.shadowOffset.x != 0 || _textFormat.shadowOffset.y != 0) - vb.GenerateShadow(_textFormat.shadowOffset, _textFormat.shadowColor); - } - - vb.AddTriangles(); - - if (_richTextField != null) - _richTextField.RefreshObjects(); - } - - void Cleanup() - { - if (_richTextField != null) - _richTextField.CleanupObjects(); - - HtmlElement.ReturnElements(_elements); - LineInfo.Return(_lines); - _textWidth = 0; - _textHeight = 0; - _parsedText = string.Empty; - _textDirection = RTLSupport.DirectionType.UNKNOW; - - if (_charPositions != null) - _charPositions.Clear(); - } - - void ApplyVertAlign() - { - float oldOffset = _yOffset; - if (_autoSize == AutoSizeType.Both || _autoSize == AutoSizeType.Height - || _verticalAlign == VertAlignType.Top) - _yOffset = 0; - else - { - float dh; - if (_textHeight == 0 && _lines.Count > 0) - dh = _contentRect.height - _lines[0].height; - else - dh = _contentRect.height - _textHeight; - if (dh < 0) - dh = 0; - if (_verticalAlign == VertAlignType.Middle) - _yOffset = (int)(dh / 2); - else - _yOffset = dh; - } - - if (oldOffset != _yOffset) - { - int cnt = _lines.Count; - for (int i = 0; i < cnt; i++) - _lines[i].y = _lines[i].y2 + _yOffset; - - graphics.SetMeshDirty(); - } - } - - /// - /// - /// - public class LineInfo - { - /// - /// 行的宽度 - /// - public float width; - - /// - /// 行的高度 - /// - public float height; - - /// - /// 文字渲染基线 - /// - public float baseline; - - /// - /// 行首的字符索引 - /// - public int charIndex; - - /// - /// 行包括的字符个数 - /// - public short charCount; - - /// - /// 行的y轴位置 - /// - public float y; - - /// - /// 行的y轴位置的备份 - /// - internal float y2; - - static Stack pool = new Stack(); - - /// - /// - /// - /// - public static LineInfo Borrow() - { - if (pool.Count > 0) - { - LineInfo ret = pool.Pop(); - ret.width = ret.height = ret.baseline = 0; - ret.y = ret.y2 = 0; - ret.charIndex = ret.charCount = 0; - return ret; - } - else - return new LineInfo(); - } - - /// - /// - /// - /// - public static void Return(LineInfo value) - { - pool.Push(value); - } - - /// - /// - /// - /// - public static void Return(List values) - { - int cnt = values.Count; - for (int i = 0; i < cnt; i++) - pool.Push(values[i]); - - values.Clear(); - } - } - - /// - /// - /// - public struct LineCharInfo - { - public float width; - public float height; - public float baseline; - } - - /// - /// - /// - public struct CharPosition - { - /// - /// 字符索引 - /// - public int charIndex; - - /// - /// 字符所在的行索引 - /// - public short lineIndex; - - /// - /// 字符的x偏移 - /// - public float offsetX; - - /// - /// 字符的宽度 - /// - public short width; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs.meta deleted file mode 100644 index 599f735..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d8a05d6d82201104cb6b5156ca294f54 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs deleted file mode 100644 index a61a4aa..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs +++ /dev/null @@ -1,175 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public partial class TextFormat - { - public enum SpecialStyle - { - None, - Superscript, - Subscript - } - - /// - /// - /// - public int size; - - /// - /// - /// - public string font; - - /// - /// - /// - public Color color; - - /// - /// - /// - public int lineSpacing; - - /// - /// - /// - public int letterSpacing; - - /// - /// - /// - public bool bold; - - /// - /// - /// - public bool underline; - - /// - /// - /// - public bool italic; - - /// - /// - /// - public bool strikethrough; - - /// - /// - /// - public Color32[] gradientColor; - - /// - /// - /// - public AlignType align; - - /// - /// - /// - public SpecialStyle specialStyle; - - /// - /// - /// - public float outline; - - /// - /// - /// - public Color outlineColor; - - /// - /// - /// - public Vector2 shadowOffset; - - /// - /// - /// - public Color shadowColor; - - public TextFormat() - { - color = Color.black; - size = 12; - lineSpacing = 3; - outlineColor = shadowColor = Color.black; - } - - /// - /// - /// - /// - public void SetColor(uint value) - { - uint rr = (value >> 16) & 0x0000ff; - uint gg = (value >> 8) & 0x0000ff; - uint bb = value & 0x0000ff; - float r = rr / 255.0f; - float g = gg / 255.0f; - float b = bb / 255.0f; - color = new Color(r, g, b, 1); - } - - /// - /// - /// - /// - /// - public bool EqualStyle(TextFormat aFormat) - { - return size == aFormat.size && color == aFormat.color - && bold == aFormat.bold && underline == aFormat.underline - && italic == aFormat.italic - && strikethrough == aFormat.strikethrough - && gradientColor == aFormat.gradientColor - && align == aFormat.align - && specialStyle == aFormat.specialStyle; - } - - /// - /// Only base NOT all formats will be copied - /// - /// - public void CopyFrom(TextFormat source) - { - this.size = source.size; - this.font = source.font; - this.color = source.color; - this.lineSpacing = source.lineSpacing; - this.letterSpacing = source.letterSpacing; - this.bold = source.bold; - this.underline = source.underline; - this.italic = source.italic; - this.strikethrough = source.strikethrough; - if (source.gradientColor != null) - { - this.gradientColor = new Color32[4]; - source.gradientColor.CopyTo(this.gradientColor, 0); - } - else - this.gradientColor = null; - this.align = source.align; - this.specialStyle = source.specialStyle; - } - - public void FillVertexColors(Color32[] vertexColors) - { - if (gradientColor == null) - vertexColors[0] = vertexColors[1] = vertexColors[2] = vertexColors[3] = color; - else - { - vertexColors[0] = gradientColor[1]; - vertexColors[1] = gradientColor[0]; - vertexColors[2] = gradientColor[2]; - vertexColors[3] = gradientColor[3]; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs.meta deleted file mode 100644 index 1dbb481..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ecffbe294c108da4ab8a1c573e3d4dfd -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs deleted file mode 100644 index dd637ab..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs +++ /dev/null @@ -1,65 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class TouchScreenKeyboard : IKeyboard - { - UnityEngine.TouchScreenKeyboard _keyboard; - - public bool done - { -#if UNITY_2017_2_OR_NEWER - get - { - return _keyboard == null - || _keyboard.status == UnityEngine.TouchScreenKeyboard.Status.Done - || _keyboard.status == UnityEngine.TouchScreenKeyboard.Status.Canceled - || _keyboard.status == UnityEngine.TouchScreenKeyboard.Status.LostFocus; - } -#else - get { return _keyboard == null || _keyboard.done || _keyboard.wasCanceled; } -#endif - } - - public bool supportsCaret - { - get { return false; } - } - - public string GetInput() - { - if (_keyboard != null) - { - string s = _keyboard.text; - - if (this.done) - _keyboard = null; - - return s; - } - else - return null; - } - - public void Open(string text, bool autocorrection, bool multiline, bool secure, bool alert, string textPlaceholder, int keyboardType, bool hideInput) - { - if (_keyboard != null) - return; - - UnityEngine.TouchScreenKeyboard.hideInput = hideInput; - _keyboard = UnityEngine.TouchScreenKeyboard.Open(text, (TouchScreenKeyboardType)keyboardType, autocorrection, multiline, secure, alert, textPlaceholder); - } - - public void Close() - { - if (_keyboard != null) - { - _keyboard.active = false; - _keyboard = null; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs.meta deleted file mode 100644 index 572dab2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: cb24d1c92a1114a4f9db5688cc3fa35b -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs deleted file mode 100644 index 1389d1a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// 文字打字效果。先调用Start,然后Print。 - /// - public class TypingEffect - { - protected TextField _textField; - - protected int _printIndex; - - protected bool _started; - - /// - /// - /// - /// - public TypingEffect(TextField textField) - { - _textField = textField; - } - - /// - /// - /// - /// - public TypingEffect(GTextField textField) - { - if (textField is GRichTextField) - _textField = ((RichTextField)textField.displayObject).textField; - else - _textField = (TextField)textField.displayObject; - } - - /// - /// 总输出次数 - /// - public int totalTimes - { - get - { - int times = 0; - for (int i = 0; i < _textField.parsedText.Length; i++) - { - if (!char.IsWhiteSpace(_textField.parsedText[i])) - times++; - } - if (_textField.richTextField != null) - { - for (int i = 0; i < _textField.richTextField.htmlElementCount; i++) - { - if (_textField.richTextField.GetHtmlElementAt(i).isEntity) - times++; - } - } - return times; - } - } - - /// - /// 开始打字效果。可以重复调用重复启动。 - /// - public void Start() - { - if (_textField.SetTypingEffectPos(0) != -1) - { - _started = true; - _printIndex = 1; - - //隐藏所有混排的对象 - if (_textField.richTextField != null) - { - int ec = _textField.richTextField.htmlElementCount; - for (int i = 0; i < ec; i++) - _textField.richTextField.ShowHtmlObject(i, false); - } - } - else - _started = false; - } - - /// - /// 输出一个字符。如果已经没有剩余的字符,返回false。 - /// - /// - public bool Print() - { - if (!_started) - return false; - - _printIndex = _textField.SetTypingEffectPos(_printIndex); - if (_printIndex != -1) - return true; - else - { - _started = false; - return false; - } - } - - /// - /// 打印的协程。 - /// - /// 每个字符输出的时间间隔 - /// - public IEnumerator Print(float interval) - { - while (Print()) - yield return new WaitForSeconds(interval); - } - - /// - /// 使用固定时间间隔完成整个打印过程。 - /// - /// - public void PrintAll(float interval) - { - Timers.inst.StartCoroutine(Print(interval)); - } - - public void Cancel() - { - if (!_started) - return; - - _started = false; - _textField.SetTypingEffectPos(-1); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs.meta deleted file mode 100644 index f1fde14..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 213be0a4bfae47c4ebf643f5ee856399 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs b/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs deleted file mode 100644 index b6a65ee..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs +++ /dev/null @@ -1,319 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// UpdateContext is for internal use. - /// - public class UpdateContext - { - public struct ClipInfo - { - public Rect rect; - public Vector4 clipBox; - public bool soft; - public Vector4 softness;//left-top-right-bottom - public uint clipId; - public int rectMaskDepth; - public int referenceValue; - public bool reversed; - } - - Stack _clipStack; - - public bool clipped; - public ClipInfo clipInfo; - - public int renderingOrder; - public int batchingDepth; - public int rectMaskDepth; - public int stencilReferenceValue; - public int stencilCompareValue; - - public float alpha; - public bool grayed; - - public static UpdateContext current; - public static bool working; - - public static event Action OnBegin; - public static event Action OnEnd; - - static Action _tmpBegin; - - public UpdateContext() - { - _clipStack = new Stack(); - } - - /// - /// - /// - public void Begin() - { - current = this; - - renderingOrder = 0; - batchingDepth = 0; - rectMaskDepth = 0; - stencilReferenceValue = 0; - alpha = 1; - grayed = false; - - clipped = false; - _clipStack.Clear(); - - Stats.ObjectCount = 0; - Stats.GraphicsCount = 0; - - _tmpBegin = OnBegin; - OnBegin = null; - - //允许OnBegin里再次Add,这里没有做死锁检查 - while (_tmpBegin != null) - { - _tmpBegin.Invoke(); - _tmpBegin = OnBegin; - OnBegin = null; - } - - working = true; - } - - /// - /// - /// - public void End() - { - working = false; - - if (OnEnd != null) - OnEnd.Invoke(); - - OnEnd = null; - } - - /// - /// - /// - /// - /// - /// - public void EnterClipping(uint clipId, Rect clipRect, Vector4? softness) - { - _clipStack.Push(clipInfo); - - if (rectMaskDepth > 0) - clipRect = ToolSet.Intersection(ref clipInfo.rect, ref clipRect); - - clipped = true; - clipInfo.rectMaskDepth = ++rectMaskDepth; - /* clipPos = xy * clipBox.zw + clipBox.xy - * 利用这个公式,使clipPos变为当前顶点距离剪切区域中心的距离值,剪切区域的大小为2x2 - * 那么abs(clipPos)>1的都是在剪切区域外 - */ - clipInfo.rect = clipRect; - clipRect.x = clipRect.x + clipRect.width * 0.5f; - clipRect.y = clipRect.y + clipRect.height * 0.5f; - clipRect.width *= 0.5f; - clipRect.height *= 0.5f; - if (clipRect.width == 0 || clipRect.height == 0) - clipInfo.clipBox = new Vector4(-2, -2, 0, 0); - else - clipInfo.clipBox = new Vector4(-clipRect.x / clipRect.width, -clipRect.y / clipRect.height, - 1.0f / clipRect.width, 1.0f / clipRect.height); - clipInfo.clipId = clipId; - clipInfo.soft = softness != null; - if (clipInfo.soft) - { - clipInfo.softness = (Vector4)softness; - float vx = clipInfo.rect.width * Screen.height * 0.25f; - float vy = clipInfo.rect.height * Screen.height * 0.25f; - - if (clipInfo.softness.x > 0) - clipInfo.softness.x = vx / clipInfo.softness.x; - else - clipInfo.softness.x = 10000f; - - if (clipInfo.softness.y > 0) - clipInfo.softness.y = vy / clipInfo.softness.y; - else - clipInfo.softness.y = 10000f; - - if (clipInfo.softness.z > 0) - clipInfo.softness.z = vx / clipInfo.softness.z; - else - clipInfo.softness.z = 10000f; - - if (clipInfo.softness.w > 0) - clipInfo.softness.w = vy / clipInfo.softness.w; - else - clipInfo.softness.w = 10000f; - } - } - - /// - /// - /// - /// - /// - public void EnterClipping(uint clipId, bool reversedMask) - { - _clipStack.Push(clipInfo); - - if (stencilReferenceValue == 0) - stencilReferenceValue = 1; - else - stencilReferenceValue = stencilReferenceValue << 1; - - if (reversedMask) - { - if (clipInfo.reversed) - stencilCompareValue = (stencilReferenceValue >> 1) - 1; - else - stencilCompareValue = stencilReferenceValue - 1; - } - else - stencilCompareValue = (stencilReferenceValue << 1) - 1; - - clipInfo.clipId = clipId; - clipInfo.referenceValue = stencilReferenceValue; - clipInfo.reversed = reversedMask; - clipped = true; - } - - /// - /// - /// - public void LeaveClipping() - { - clipInfo = _clipStack.Pop(); - stencilReferenceValue = clipInfo.referenceValue; - rectMaskDepth = clipInfo.rectMaskDepth; - clipped = stencilReferenceValue != 0 || rectMaskDepth != 0; - } - - public void EnterPaintingMode() - { - //Reset clipping - _clipStack.Push(clipInfo); - - clipInfo.rectMaskDepth = 0; - clipInfo.referenceValue = 0; - clipInfo.reversed = false; - clipped = false; - } - - public void LeavePaintingMode() - { - clipInfo = _clipStack.Pop(); - stencilReferenceValue = clipInfo.referenceValue; - rectMaskDepth = clipInfo.rectMaskDepth; - clipped = stencilReferenceValue != 0 || rectMaskDepth != 0; - } - - public void ApplyClippingProperties(Material mat, bool isStdMaterial) - { - if (rectMaskDepth > 0) //在矩形剪裁下,且不是遮罩对象 - { - mat.SetVector(ShaderConfig.ID_ClipBox, clipInfo.clipBox); - if (clipInfo.soft) - mat.SetVector(ShaderConfig.ID_ClipSoftness, clipInfo.softness); - } - - if (stencilReferenceValue > 0) - { - mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); - mat.SetInt(ShaderConfig.ID_Stencil, stencilCompareValue); - mat.SetInt(ShaderConfig.ID_Stencil2, stencilCompareValue); - mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Keep); - mat.SetInt(ShaderConfig.ID_StencilReadMask, stencilReferenceValue | (stencilReferenceValue - 1)); - mat.SetInt(ShaderConfig.ID_ColorMask, 15); - } - else - { - mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Always); - mat.SetInt(ShaderConfig.ID_Stencil, 0); - mat.SetInt(ShaderConfig.ID_Stencil2, 0); - mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Keep); - mat.SetInt(ShaderConfig.ID_StencilReadMask, 255); - mat.SetInt(ShaderConfig.ID_ColorMask, 15); - } - - if (!isStdMaterial) - { - if (rectMaskDepth > 0) - { - if (clipInfo.soft) - mat.EnableKeyword("SOFT_CLIPPED"); - else - mat.EnableKeyword("CLIPPED"); - } - else - { - mat.DisableKeyword("CLIPPED"); - mat.DisableKeyword("SOFT_CLIPPED"); - } - } - } - - public void ApplyAlphaMaskProperties(Material mat, bool erasing) - { - if (!erasing) - { - if (stencilReferenceValue == 1) - { - mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Always); - mat.SetInt(ShaderConfig.ID_Stencil, 1); - mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Replace); - mat.SetInt(ShaderConfig.ID_StencilReadMask, 255); - mat.SetInt(ShaderConfig.ID_ColorMask, 0); - } - else - { - if (stencilReferenceValue != 0 & _clipStack.Peek().reversed) - mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.NotEqual); - else - mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); - mat.SetInt(ShaderConfig.ID_Stencil, stencilReferenceValue | (stencilReferenceValue - 1)); - mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Replace); - mat.SetInt(ShaderConfig.ID_StencilReadMask, stencilReferenceValue - 1); - mat.SetInt(ShaderConfig.ID_ColorMask, 0); - } - } - else - { - if (stencilReferenceValue != 0 & _clipStack.Peek().reversed) - { - int refValue = stencilReferenceValue | (stencilReferenceValue - 1); - mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); - mat.SetInt(ShaderConfig.ID_Stencil, refValue); - mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Zero); - mat.SetInt(ShaderConfig.ID_StencilReadMask, refValue); - mat.SetInt(ShaderConfig.ID_ColorMask, 0); - } - else - { - int refValue = stencilReferenceValue - 1; - mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); - mat.SetInt(ShaderConfig.ID_Stencil, refValue); - mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Replace); - mat.SetInt(ShaderConfig.ID_StencilReadMask, refValue); - mat.SetInt(ShaderConfig.ID_ColorMask, 0); - } - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - OnBegin = null; - OnEnd = null; - } -#endif - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs.meta deleted file mode 100644 index 63eca16..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: fa81e163380612a4a9591fe57a5b442c -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event.meta b/Assets/Plugins/FairyGUI/Scripts/Event.meta deleted file mode 100644 index b332a76..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: faa71f0e576742d46865b6bb7422b7f0 -folderAsset: yes -timeCreated: 1460480287 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs deleted file mode 100644 index 38bd08a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs +++ /dev/null @@ -1,176 +0,0 @@ -#if FAIRYGUI_TOLUA -using System; -using LuaInterface; -#endif - -namespace FairyGUI -{ - /// - /// - /// - class EventBridge - { - public EventDispatcher owner; - - EventCallback0 _callback0; - EventCallback1 _callback1; - EventCallback1 _captureCallback; - internal bool _dispatching; - - public EventBridge(EventDispatcher owner) - { - this.owner = owner; - } - - public void AddCapture(EventCallback1 callback) - { - _captureCallback -= callback; - _captureCallback += callback; - } - - public void RemoveCapture(EventCallback1 callback) - { - _captureCallback -= callback; - } - - public void Add(EventCallback1 callback) - { - _callback1 -= callback; - _callback1 += callback; - } - - public void Remove(EventCallback1 callback) - { - _callback1 -= callback; - } - - public void Add(EventCallback0 callback) - { - _callback0 -= callback; - _callback0 += callback; - } - - public void Remove(EventCallback0 callback) - { - _callback0 -= callback; - } - -#if FAIRYGUI_TOLUA - public void Add(LuaFunction func, LuaTable self) - { - EventCallback1 callback; - if(self != null) - callback = (EventCallback1)DelegateTraits.Create(func, self); - else - callback = (EventCallback1)DelegateTraits.Create(func); - _callback1 -= callback; - _callback1 += callback; - } - - public void Add(LuaFunction func, GComponent self) - { - if (self._peerTable == null) - throw new Exception("self is not connected to lua."); - - Add(func, self._peerTable); - } - - public void Remove(LuaFunction func, LuaTable self) - { - LuaState state = func.GetLuaState(); - LuaDelegate target; - if (self != null) - target = state.GetLuaDelegate(func, self); - else - target = state.GetLuaDelegate(func); - - Delegate[] ds = _callback1.GetInvocationList(); - - for (int i = 0; i < ds.Length; i++) - { - LuaDelegate ld = ds[i].Target as LuaDelegate; - if (ld != null && ld.Equals(target)) - { - _callback1 = (EventCallback1)Delegate.Remove(_callback1, ds[i]); - //DelayDispose will cause problem - //state.DelayDispose(ld.func); - //if (ld.self != null) - // state.DelayDispose(ld.self); - break; - } - } - } - - public void Remove(LuaFunction func, GComponent self) - { - if (self._peerTable == null) - throw new Exception("self is not connected to lua."); - - Remove(func, self._peerTable); - } -#endif - - public bool isEmpty - { - get { return _callback1 == null && _callback0 == null && _captureCallback == null; } - } - - public void Clear() - { -#if FAIRYGUI_TOLUA - //if (_callback1 != null) - //{ - // Delegate[] ds = _callback1.GetInvocationList(); - // for (int i = 0; i < ds.Length; i++) - // { - // LuaDelegate ld = ds[i].Target as LuaDelegate; - // if (ld != null) - // { - // LuaState state = ld.func.GetLuaState(); - // state.DelayDispose(ld.func); - // if (ld.self != null) - // state.DelayDispose(ld.self); - // } - // } - //} -#endif - _callback1 = null; - _callback0 = null; - _captureCallback = null; - } - - public void CallInternal(EventContext context) - { - _dispatching = true; - context.sender = owner; - try - { - if (_callback1 != null) - _callback1(context); - if (_callback0 != null) - _callback0(); - } - finally - { - _dispatching = false; - } - } - - public void CallCaptureInternal(EventContext context) - { - if (_captureCallback == null) - return; - - _dispatching = true; - context.sender = owner; - try - { - _captureCallback(context); - } - finally - { - _dispatching = false; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs.meta deleted file mode 100644 index e4e2f75..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e9712bee5e6977647989e012a6a332a6 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs deleted file mode 100644 index bc742ae..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class EventContext - { - /// - /// - /// - public EventDispatcher sender { get; internal set; } - - /// - /// / - /// - public object initiator { get; internal set; } - - /// - /// / - /// - public InputEvent inputEvent { get; internal set; } - - /// - /// - /// - public string type; - - /// - /// - /// - public object data; - - internal bool _defaultPrevented; - internal bool _stopsPropagation; - internal bool _touchCapture; - - internal List callChain = new List(); - - /// - /// - /// - public void StopPropagation() - { - _stopsPropagation = true; - } - - /// - /// - /// - public void PreventDefault() - { - _defaultPrevented = true; - } - - /// - /// - /// - public void CaptureTouch() - { - _touchCapture = true; - } - - /// - /// - /// - public bool isDefaultPrevented - { - get { return _defaultPrevented; } - } - - static Stack pool = new Stack(); - internal static EventContext Get() - { - if (pool.Count > 0) - { - EventContext context = pool.Pop(); - context._stopsPropagation = false; - context._defaultPrevented = false; - context._touchCapture = false; - return context; - } - else - return new EventContext(); - } - - internal static void Return(EventContext value) - { - pool.Push(value); - } - - - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - pool.Clear(); - } -#endif - } - -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs.meta deleted file mode 100644 index 1e00260..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3391a1fa2fc33b7448dfdf3e7c48880d -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs deleted file mode 100644 index 916db4a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs +++ /dev/null @@ -1,515 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace FairyGUI -{ - public delegate void EventCallback0(); - public delegate void EventCallback1(EventContext context); - - /// - /// - /// - public class EventDispatcher : IEventDispatcher - { - Dictionary _dic; - - public EventDispatcher() - { - } - - /// - /// - /// - /// - /// - public void AddEventListener(string strType, EventCallback1 callback) - { - GetBridge(strType).Add(callback); - } - - /// - /// - /// - /// - /// - public void AddEventListener(string strType, EventCallback0 callback) - { - GetBridge(strType).Add(callback); - } - - /// - /// - /// - /// - /// - public void RemoveEventListener(string strType, EventCallback1 callback) - { - if (_dic == null) - return; - - EventBridge bridge = null; - if (_dic.TryGetValue(strType, out bridge)) - bridge.Remove(callback); - } - - /// - /// - /// - /// - /// - public void RemoveEventListener(string strType, EventCallback0 callback) - { - if (_dic == null) - return; - - EventBridge bridge = null; - if (_dic.TryGetValue(strType, out bridge)) - bridge.Remove(callback); - } - - /// - /// - /// - /// - /// - public void AddCapture(string strType, EventCallback1 callback) - { - GetBridge(strType).AddCapture(callback); - } - - /// - /// - /// - /// - /// - public void RemoveCapture(string strType, EventCallback1 callback) - { - if (_dic == null) - return; - - EventBridge bridge = null; - if (_dic.TryGetValue(strType, out bridge)) - bridge.RemoveCapture(callback); - } - - /// - /// - /// - public void RemoveEventListeners() - { - RemoveEventListeners(null); - } - - /// - /// - /// - /// - public void RemoveEventListeners(string strType) - { - if (_dic == null) - return; - - if (strType != null) - { - EventBridge bridge; - if (_dic.TryGetValue(strType, out bridge)) - bridge.Clear(); - } - else - { - foreach (KeyValuePair kv in _dic) - kv.Value.Clear(); - } - } - - /// - /// - /// - /// - /// - public bool hasEventListeners(string strType) - { - EventBridge bridge = TryGetEventBridge(strType); - if (bridge == null) - return false; - - return !bridge.isEmpty; - } - - /// - /// - /// - /// - /// - public bool isDispatching(string strType) - { - EventBridge bridge = TryGetEventBridge(strType); - if (bridge == null) - return false; - - return bridge._dispatching; - } - - internal EventBridge TryGetEventBridge(string strType) - { - if (_dic == null) - return null; - - EventBridge bridge = null; - _dic.TryGetValue(strType, out bridge); - return bridge; - } - - internal EventBridge GetEventBridge(string strType) - { - if (_dic == null) - _dic = new Dictionary(); - - EventBridge bridge = null; - if (!_dic.TryGetValue(strType, out bridge)) - { - bridge = new EventBridge(this); - _dic[strType] = bridge; - } - return bridge; - } - - /// - /// - /// - /// - /// - public bool DispatchEvent(string strType) - { - return DispatchEvent(strType, null); - } - - /// - /// - /// - /// - /// - /// - public bool DispatchEvent(string strType, object data) - { - return InternalDispatchEvent(strType, null, data, null); - } - - public bool DispatchEvent(string strType, object data, object initiator) - { - return InternalDispatchEvent(strType, null, data, initiator); - } - - static InputEvent sCurrentInputEvent = new InputEvent(); - - internal bool InternalDispatchEvent(string strType, EventBridge bridge, object data, object initiator) - { - if (bridge == null) - bridge = TryGetEventBridge(strType); - - EventBridge gBridge = null; - if ((this is DisplayObject) && ((DisplayObject)this).gOwner != null) - gBridge = ((DisplayObject)this).gOwner.TryGetEventBridge(strType); - - bool b1 = bridge != null && !bridge.isEmpty; - bool b2 = gBridge != null && !gBridge.isEmpty; - if (b1 || b2) - { - EventContext context = EventContext.Get(); - context.initiator = initiator != null ? initiator : this; - context.type = strType; - context.data = data; - if (data is InputEvent) - sCurrentInputEvent = (InputEvent)data; - context.inputEvent = sCurrentInputEvent; - - if (b1) - { - bridge.CallCaptureInternal(context); - bridge.CallInternal(context); - } - - if (b2) - { - gBridge.CallCaptureInternal(context); - gBridge.CallInternal(context); - } - - EventContext.Return(context); - context.initiator = null; - context.sender = null; - context.data = null; - - return context._defaultPrevented; - } - else - return false; - } - - /// - /// - /// - /// - /// - public bool DispatchEvent(EventContext context) - { - EventBridge bridge = TryGetEventBridge(context.type); - EventBridge gBridge = null; - if ((this is DisplayObject) && ((DisplayObject)this).gOwner != null) - gBridge = ((DisplayObject)this).gOwner.TryGetEventBridge(context.type); - - EventDispatcher savedSender = context.sender; - - if (bridge != null && !bridge.isEmpty) - { - bridge.CallCaptureInternal(context); - bridge.CallInternal(context); - } - - if (gBridge != null && !gBridge.isEmpty) - { - gBridge.CallCaptureInternal(context); - gBridge.CallInternal(context); - } - - context.sender = savedSender; - return context._defaultPrevented; - } - - /// - /// - /// - /// - /// - /// - /// - internal bool BubbleEvent(string strType, object data, List addChain) - { - EventContext context = EventContext.Get(); - context.initiator = this; - - context.type = strType; - context.data = data; - if (data is InputEvent) - sCurrentInputEvent = (InputEvent)data; - context.inputEvent = sCurrentInputEvent; - List bubbleChain = context.callChain; - bubbleChain.Clear(); - - GetChainBridges(strType, bubbleChain, true); - - int length = bubbleChain.Count; - for (int i = length - 1; i >= 0; i--) - { - bubbleChain[i].CallCaptureInternal(context); - if (context._touchCapture) - { - context._touchCapture = false; - if (strType == "onTouchBegin") - Stage.inst.AddTouchMonitor(context.inputEvent.touchId, bubbleChain[i].owner); - } - } - - if (!context._stopsPropagation) - { - for (int i = 0; i < length; ++i) - { - bubbleChain[i].CallInternal(context); - - if (context._touchCapture) - { - context._touchCapture = false; - if (strType == "onTouchBegin") - Stage.inst.AddTouchMonitor(context.inputEvent.touchId, bubbleChain[i].owner); - } - - if (context._stopsPropagation) - break; - } - - if (addChain != null) - { - length = addChain.Count; - for (int i = 0; i < length; ++i) - { - EventBridge bridge = addChain[i]; - if (bubbleChain.IndexOf(bridge) == -1) - { - bridge.CallCaptureInternal(context); - bridge.CallInternal(context); - } - } - } - } - - EventContext.Return(context); - context.initiator = null; - context.sender = null; - context.data = null; - return context._defaultPrevented; - } - - /// - /// - /// - /// - /// - /// - public bool BubbleEvent(string strType, object data) - { - return BubbleEvent(strType, data, null); - } - - /// - /// - /// - /// - /// - /// - public bool BroadcastEvent(string strType, object data) - { - EventContext context = EventContext.Get(); - context.initiator = this; - context.type = strType; - context.data = data; - if (data is InputEvent) - sCurrentInputEvent = (InputEvent)data; - context.inputEvent = sCurrentInputEvent; - List bubbleChain = context.callChain; - bubbleChain.Clear(); - - if (this is Container) - GetChildEventBridges(strType, (Container)this, bubbleChain); - else if (this is GComponent) - GetChildEventBridges(strType, (GComponent)this, bubbleChain); - - int length = bubbleChain.Count; - for (int i = 0; i < length; ++i) - bubbleChain[i].CallInternal(context); - - EventContext.Return(context); - context.initiator = null; - context.sender = null; - context.data = null; - return context._defaultPrevented; - } - - EventBridge GetBridge(string strType) - { - if (strType == null) - throw new Exception("event type cant be null"); - - if (_dic == null) - _dic = new Dictionary(); - - EventBridge bridge = null; - if (!_dic.TryGetValue(strType, out bridge)) - { - bridge = new EventBridge(this); - _dic[strType] = bridge; - } - - return bridge; - } - - static void GetChildEventBridges(string strType, Container container, List bridges) - { - EventBridge bridge = container.TryGetEventBridge(strType); - if (bridge != null) - bridges.Add(bridge); - if (container.gOwner != null) - { - bridge = container.gOwner.TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - bridges.Add(bridge); - } - - int count = container.numChildren; - for (int i = 0; i < count; ++i) - { - DisplayObject obj = container.GetChildAt(i); - if (obj is Container) - GetChildEventBridges(strType, (Container)obj, bridges); - else - { - bridge = obj.TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - bridges.Add(bridge); - - if (obj.gOwner != null) - { - bridge = obj.gOwner.TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - bridges.Add(bridge); - } - } - } - } - - static void GetChildEventBridges(string strType, GComponent container, List bridges) - { - EventBridge bridge = container.TryGetEventBridge(strType); - if (bridge != null) - bridges.Add(bridge); - - int count = container.numChildren; - for (int i = 0; i < count; ++i) - { - GObject obj = container.GetChildAt(i); - if (obj is GComponent) - GetChildEventBridges(strType, (GComponent)obj, bridges); - else - { - bridge = obj.TryGetEventBridge(strType); - if (bridge != null) - bridges.Add(bridge); - } - } - } - - internal void GetChainBridges(string strType, List chain, bool bubble) - { - EventBridge bridge = TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - chain.Add(bridge); - - if ((this is DisplayObject) && ((DisplayObject)this).gOwner != null) - { - bridge = ((DisplayObject)this).gOwner.TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - chain.Add(bridge); - } - - if (!bubble) - return; - - if (this is DisplayObject) - { - DisplayObject element = (DisplayObject)this; - while ((element = element.parent) != null) - { - bridge = element.TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - chain.Add(bridge); - - if (element.gOwner != null) - { - bridge = element.gOwner.TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - chain.Add(bridge); - } - } - } - else if (this is GObject) - { - GObject element = (GObject)this; - while ((element = element.parent) != null) - { - bridge = element.TryGetEventBridge(strType); - if (bridge != null && !bridge.isEmpty) - chain.Add(bridge); - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs.meta deleted file mode 100644 index 7ba0ee8..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7f31d18fa6488bb469504c7128522d21 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs deleted file mode 100644 index 4082688..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs +++ /dev/null @@ -1,267 +0,0 @@ -#if FAIRYGUI_TOLUA -using LuaInterface; -#endif - -namespace FairyGUI -{ - /// - /// - /// - public class EventListener - { - EventBridge _bridge; - string _type; - - public EventListener(EventDispatcher owner, string type) - { - _bridge = owner.GetEventBridge(type); - _type = type; - } - - /// - /// - /// - public string type - { - get { return _type; } - } - - /// - /// - /// - /// - public void AddCapture(EventCallback1 callback) - { - _bridge.AddCapture(callback); - } - - /// - /// - /// - /// - public void RemoveCapture(EventCallback1 callback) - { - _bridge.RemoveCapture(callback); - } - - /// - /// - /// - /// - public void Add(EventCallback1 callback) - { - _bridge.Add(callback); - } - - /// - /// - /// - /// - public void Remove(EventCallback1 callback) - { - _bridge.Remove(callback); - } - - /// - /// - /// - /// -#if FAIRYGUI_TOLUA - [NoToLua] -#endif - public void Add(EventCallback0 callback) - { - _bridge.Add(callback); - } - - /// - /// - /// - /// -#if FAIRYGUI_TOLUA - [NoToLua] -#endif - public void Remove(EventCallback0 callback) - { - _bridge.Remove(callback); - } - - /// - /// - /// - /// - public void Set(EventCallback1 callback) - { - _bridge.Clear(); - if (callback != null) - _bridge.Add(callback); - } - - /// - /// - /// - /// -#if FAIRYGUI_TOLUA - [NoToLua] -#endif - public void Set(EventCallback0 callback) - { - _bridge.Clear(); - if (callback != null) - _bridge.Add(callback); - } - -#if FAIRYGUI_TOLUA - /// - /// - /// - /// - /// - public void Add(LuaFunction func, LuaTable self) - { - _bridge.Add(func, self); - } - - /// - /// - /// - /// - /// - public void Add(LuaFunction func, GComponent self) - { - _bridge.Add(func, self); - } - - /// - /// - /// - /// - /// - public void Remove(LuaFunction func, LuaTable self) - { - _bridge.Remove(func, self); - } - - /// - /// - /// - /// - /// - public void Remove(LuaFunction func, GComponent self) - { - _bridge.Remove(func, self); - } - - /// - /// - /// - /// - /// - public void Set(LuaFunction func, LuaTable self) - { - _bridge.Clear(); - if (func != null) - Add(func, self); - } - - /// - /// - /// - /// - /// - public void Set(LuaFunction func, GComponent self) - { - _bridge.Clear(); - if (func != null) - Add(func, self); - } -#endif - - /// - /// - /// - public bool isEmpty - { - get - { - return !_bridge.owner.hasEventListeners(_type); - } - } - - /// - /// - /// - public bool isDispatching - { - get - { - return _bridge.owner.isDispatching(_type); - } - } - - /// - /// - /// - public void Clear() - { - _bridge.Clear(); - } - - /// - /// - /// - /// - public bool Call() - { - return _bridge.owner.InternalDispatchEvent(_type, _bridge, null, null); - } - - /// - /// - /// - /// - /// - public bool Call(object data) - { - return _bridge.owner.InternalDispatchEvent(_type, _bridge, data, null); - } - - /// - /// - /// - /// - /// - public bool BubbleCall(object data) - { - return _bridge.owner.BubbleEvent(_type, data); - } - - /// - /// - /// - /// - public bool BubbleCall() - { - return _bridge.owner.BubbleEvent(_type, null); - } - - /// - /// - /// - /// - /// - public bool BroadcastCall(object data) - { - return _bridge.owner.BroadcastEvent(_type, data); - } - - /// - /// - /// - /// - public bool BroadcastCall() - { - return _bridge.owner.BroadcastEvent(_type, null); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs.meta deleted file mode 100644 index 465d16d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8747c4706bc8c864786f691555eaa2fb -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs b/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs deleted file mode 100644 index 2185444..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace FairyGUI -{ - /// - /// - /// - public interface IEventDispatcher - { - void AddEventListener(string strType, EventCallback0 callback); - void AddEventListener(string strType, EventCallback1 callback); - void RemoveEventListener(string strType, EventCallback0 callback); - void RemoveEventListener(string strType, EventCallback1 callback); - bool DispatchEvent(EventContext context); - bool DispatchEvent(string strType); - bool DispatchEvent(string strType, object data); - bool DispatchEvent(string strType, object data, object initiator); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs.meta deleted file mode 100644 index f9ebc4c..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a8dfc3c6bb6a91445b52cee1e916c398 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs b/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs deleted file mode 100644 index 6bc1a56..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs +++ /dev/null @@ -1,175 +0,0 @@ -using UnityEngine; - -#if FAIRYGUI_INPUT_SYSTEM -using UnityEngine.InputSystem; -#endif - -namespace FairyGUI -{ - /// - /// - /// - public class InputEvent - { - /// - /// x position in stage coordinates. - /// - public float x { get; internal set; } - - /// - /// y position in stage coordinates. - /// - public float y { get; internal set; } - - /// - /// - /// - public KeyCode keyCode { get; internal set; } - - /// - /// - /// - public char character { get; internal set; } - - /// - /// - /// - public EventModifiers modifiers { get; internal set; } - - /// - /// - /// - public float mouseWheelDelta { get; internal set; } - - /// - /// - /// - public int touchId { get; internal set; } - - /// - /// -1-none,0-left,1-right,2-middle - /// - public int button { get; internal set; } - - /// - /// - /// - /// - public int clickCount { get; internal set; } - - /// - /// Duraion of holding the button. You can read this in touchEnd or click event. - /// - /// - public float holdTime { get; internal set; } - - public InputEvent() - { - touchId = -1; - x = 0; - y = 0; - clickCount = 0; - keyCode = KeyCode.None; - character = '\0'; - modifiers = 0; - mouseWheelDelta = 0; - } - - /// - /// - /// - public Vector2 position - { - get { return new Vector2(x, y); } - } - - /// - /// - /// - public bool isDoubleClick - { - get { return clickCount > 1 && button == 0; } - } - - /// - /// - /// - public bool ctrlOrCmd - { - get - { - return ctrl || command; - } - } - - /// - /// - /// - public bool ctrl - { - get - { -#if FAIRYGUI_INPUT_SYSTEM - Keyboard keyboard = Keyboard.current; - return keyboard != null && (keyboard.leftCtrlKey.isPressed || keyboard.rightCtrlKey.isPressed); -#else - return Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl); -#endif - } - } - - /// - /// - /// - public bool shift - { - get - { -#if FAIRYGUI_INPUT_SYSTEM - Keyboard keyboard = Keyboard.current; - return keyboard != null && (keyboard.leftShiftKey.isPressed || keyboard.rightShiftKey.isPressed); -#else - return Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); -#endif - } - } - - /// - /// - /// - public bool alt - { - get - { -#if FAIRYGUI_INPUT_SYSTEM - Keyboard keyboard = Keyboard.current; - return keyboard != null && (keyboard.leftAltKey.isPressed || keyboard.rightAltKey.isPressed); -#else - return Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt); -#endif - } - } - - /// - /// - /// - public bool command - { - get - { - // In win, as long as the win key and other keys are pressed at the same time, the getKey will continue to return true. So it can only be shielded. - if (Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXEditor) - { -#if FAIRYGUI_INPUT_SYSTEM - Keyboard keyboard = Keyboard.current; - return keyboard != null && (keyboard.leftCommandKey.isPressed || keyboard.rightCommandKey.isPressed); -#else - return Input.GetKey(KeyCode.LeftCommand) || Input.GetKey(KeyCode.RightCommand); -#endif - } - else - return false; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs.meta deleted file mode 100644 index 2a2595b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: cc16eca0c17d9344882b6e63f26ecc9e -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions.meta deleted file mode 100644 index b6de61e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2ba74f03fb7064ac19ec735c621b7aec -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones.meta deleted file mode 100644 index 1a5a896..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2d9a58836214e4e58b41c998e14a4239 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs deleted file mode 100644 index 1e9948a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs +++ /dev/null @@ -1,109 +0,0 @@ -#if FAIRYGUI_DRAGONBONES - -using UnityEngine; -using DragonBones; - -namespace FairyGUI -{ - /// - /// - /// - public partial class GLoader3D : GObject - { - UnityArmatureComponent _armatureComponent; - - /// - /// - /// - /// - public UnityArmatureComponent armatureComponent - { - get { return _armatureComponent; } - } - - /// - /// - /// - /// - /// - /// - /// - public void SetDragonBones(DragonBonesData asset, int width, int height, Vector2 anchor) - { - if (_armatureComponent != null) - FreeDragonBones(); - - _armatureComponent = UnityFactory.factory.BuildArmatureComponent(asset.armatureNames[0], asset.name, null, asset.name); - _armatureComponent.gameObject.transform.localScale = new Vector3(100, 100, 1); - _armatureComponent.gameObject.transform.localPosition = new Vector3(anchor.x, -anchor.y, 0); - SetWrapTarget(_armatureComponent.gameObject, true, width, height); - - var ct = _armatureComponent.color; - ct.redMultiplier = _color.r; - ct.greenMultiplier = _color.g; - ct.blueMultiplier = _color.b; - _armatureComponent.color = ct; - - OnChangeDragonBones(null); - } - - protected void LoadDragonBones() - { - DragonBonesData asset = (DragonBonesData)_contentItem.skeletonAsset; - if (asset == null) - return; - - SetDragonBones(asset, _contentItem.width, _contentItem.height, _contentItem.skeletonAnchor); - } - - protected void OnChangeDragonBones(string propertyName) - { - if (_armatureComponent == null) - return; - - if (propertyName == "color") - { - var ct = _armatureComponent.color; - ct.redMultiplier = _color.r; - ct.greenMultiplier = _color.g; - ct.blueMultiplier = _color.b; - _armatureComponent.color = ct; - return; - } - - if (!string.IsNullOrEmpty(_animationName)) - { - if (_playing) - _armatureComponent.animation.Play(_animationName, _loop ? 0 : 1); - else - _armatureComponent.animation.GotoAndStopByFrame(_animationName, (uint)_frame); - } - else - _armatureComponent.animation.Reset(); - } - - protected void FreeDragonBones() - { - if (_armatureComponent != null) - { - _armatureComponent.Dispose(); - if (Application.isPlaying) - GameObject.Destroy(_armatureComponent.gameObject); - else - GameObject.DestroyImmediate(_armatureComponent.gameObject); - } - } - - protected void OnUpdateDragonBones(UpdateContext context) - { - if (_armatureComponent != null) - { - var ct = _armatureComponent.color; - ct.alphaMultiplier = context.alpha * _content.alpha; - _armatureComponent.color = ct; - } - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs.meta deleted file mode 100644 index d3733a2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9d48ba38d2e2e420085e6c98407dc1fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine.meta deleted file mode 100644 index 56dde9b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d55093b745d3d452699bdfe7bd8ac88e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs deleted file mode 100644 index 0f4902e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs +++ /dev/null @@ -1,188 +0,0 @@ -#if FAIRYGUI_SPINE - -using System; -using System.Collections.Generic; -using UnityEngine; -using Spine.Unity; - -namespace FairyGUI -{ - /// - /// - /// - public partial class GLoader3D : GObject - { - public static Action CustomSpineDestroyMethod; - - SkeletonAnimation _spineAnimation; - - /// - /// - /// - /// - public SkeletonAnimation spineAnimation - { - get { return _spineAnimation; } - } - - /// - /// - /// - /// - public void SetSpine(SkeletonDataAsset asset) - { - SetSpine(asset, _contentItem.width, _contentItem.height, _contentItem.skeletonAnchor); - } - - /// - /// - /// - /// - /// - /// - /// - public void SetSpine(SkeletonDataAsset asset, int width, int height, Vector2 anchor) - { - SetSpine(asset, width, height, anchor, true); - } - - /// - /// - /// - /// - /// - /// - /// - /// - public void SetSpine(SkeletonDataAsset asset, int width, int height, Vector2 anchor, bool cloneMaterial) - { - if (_spineAnimation != null) - FreeSpine(); - - _content.customCloneMaterials = MaterialOverride; - _content.customRecoverMaterials = CleanMaterialOverride; - - _spineAnimation = SkeletonRenderer.NewSpineGameObject(asset); - _spineAnimation.gameObject.name = asset.name; - Spine.SkeletonData dat = asset.GetSkeletonData(false); - _spineAnimation.gameObject.transform.localScale = new Vector3(1 / asset.scale, 1 / asset.scale, 1); - _spineAnimation.gameObject.transform.localPosition = new Vector3(anchor.x, -anchor.y, 0); - SetWrapTarget(_spineAnimation.gameObject, cloneMaterial, width, height); - - _spineAnimation.skeleton.R = _color.r; - _spineAnimation.skeleton.G = _color.g; - _spineAnimation.skeleton.B = _color.b; - - OnChangeSpine(null); - } - - protected void LoadSpine() - { - SkeletonDataAsset asset = (SkeletonDataAsset)_contentItem.skeletonAsset; - if (asset == null) - return; - - SetSpine(asset, _contentItem.width, _contentItem.height, _contentItem.skeletonAnchor); - } - - protected void OnChangeSpine(string propertyName) - { - if (_spineAnimation == null) - return; - - if (propertyName == "color") - { - _spineAnimation.skeleton.R = _color.r; - _spineAnimation.skeleton.G = _color.g; - _spineAnimation.skeleton.B = _color.b; - return; - } - - var skeletonData = _spineAnimation.skeleton.Data; - - var state = _spineAnimation.AnimationState; - Spine.Animation animationToUse = !string.IsNullOrEmpty(_animationName) ? skeletonData.FindAnimation(_animationName) : null; - if (animationToUse != null) - { - var trackEntry = state.GetCurrent(0); - if (trackEntry == null || trackEntry.Animation.Name != _animationName || trackEntry.IsComplete && !trackEntry.Loop) - trackEntry = state.SetAnimation(0, animationToUse, _loop); - else - trackEntry.Loop = _loop; - - if (_playing) - trackEntry.TimeScale = 1; - else - { - trackEntry.TimeScale = 0; - trackEntry.TrackTime = Mathf.Lerp(0, trackEntry.AnimationEnd - trackEntry.AnimationStart, _frame / 100f); - } - } - else - state.ClearTrack(0); - - var skin = !string.IsNullOrEmpty(skinName) ? skeletonData.FindSkin(skinName) : skeletonData.DefaultSkin; - if (skin == null && skeletonData.Skins.Count > 0) - skin = skeletonData.Skins.Items[0]; - if (_spineAnimation.skeleton.Skin != skin) - { - _spineAnimation.skeleton.SetSkin(skin); - _spineAnimation.skeleton.SetSlotsToSetupPose(); - } - } - - protected void FreeSpine() - { - if (_spineAnimation != null) - { - if (CustomSpineDestroyMethod != null) - { - CustomSpineDestroyMethod(_spineAnimation); - } - else - { - if (Application.isPlaying) - GameObject.Destroy(_spineAnimation.gameObject); - else - GameObject.DestroyImmediate(_spineAnimation.gameObject); - } - - _content.customCloneMaterials = null; - _content.customRecoverMaterials = null; - } - } - - protected void OnUpdateSpine(UpdateContext context) - { - if (_spineAnimation != null) - _spineAnimation.skeleton.A = context.alpha * _content.alpha; - } - - private void MaterialOverride(Dictionary materials) - { - if (_spineAnimation != null) - { - foreach (var kv in materials) - { - _spineAnimation.CustomMaterialOverride[kv.Key] = kv.Value; - } - } - } - - private void CleanMaterialOverride() - { - if (_spineAnimation != null) - _spineAnimation.CustomMaterialOverride.Clear(); - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - CustomSpineDestroyMethod = null; - } -#endif - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs.meta deleted file mode 100644 index 006fbf1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e3757a6f06ad143439bb00cd7190c6d1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro.meta deleted file mode 100644 index 7942609..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1de100836593c444995397fa368017d5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders.meta deleted file mode 100644 index bad3753..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e302db5f01fdb46b5b45f44c25164846 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader deleted file mode 100644 index 5a91338..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader +++ /dev/null @@ -1,478 +0,0 @@ -Shader "FairyGUI/TextMeshPro/Distance Field" { - -Properties { - _FaceTex ("Face Texture", 2D) = "white" {} - _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 - _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 - _FaceColor ("Face Color", Color) = (1,1,1,1) - _FaceDilate ("Face Dilate", Range(-1,1)) = 0 - - _OutlineColor ("Outline Color", Color) = (0,0,0,1) - _OutlineTex ("Outline Texture", 2D) = "white" {} - _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 - _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 - _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 - _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 - - _Bevel ("Bevel", Range(0,1)) = 0.5 - _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 - _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 - _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 - _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 - - _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 - _SpecularColor ("Specular", Color) = (1,1,1,1) - _SpecularPower ("Specular", Range(0,4)) = 2.0 - _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 - _Diffuse ("Diffuse", Range(0,1)) = 0.5 - _Ambient ("Ambient", Range(1,0)) = 0.5 - - _BumpMap ("Normal map", 2D) = "bump" {} - _BumpOutline ("Bump Outline", Range(0,1)) = 0 - _BumpFace ("Bump Face", Range(0,1)) = 0 - - _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) - _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) - _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } - _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) - - - _UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) - _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 - _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 - _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 - _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 - - _GlowColor ("Color", Color) = (0, 1, 0, 0.5) - _GlowOffset ("Offset", Range(-1,1)) = 0 - _GlowInner ("Inner", Range(0,1)) = 0.05 - _GlowOuter ("Outer", Range(0,1)) = 0.05 - _GlowPower ("Falloff", Range(1, 0)) = 0.75 - - _WeightNormal ("Weight Normal", float) = 0 - _WeightBold ("Weight Bold", float) = 0.5 - - _ShaderFlags ("Flags", float) = 0 - _ScaleRatioA ("Scale RatioA", float) = 1 - _ScaleRatioB ("Scale RatioB", float) = 1 - _ScaleRatioC ("Scale RatioC", float) = 1 - - _MainTex ("Font Atlas", 2D) = "white" {} - _TextureWidth ("Texture Width", float) = 512 - _TextureHeight ("Texture Height", float) = 512 - _GradientScale ("Gradient Scale", float) = 5.0 - _ScaleX ("Scale X", float) = 1.0 - _ScaleY ("Scale Y", float) = 1.0 - _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 - _Sharpness ("Sharpness", Range(-1,1)) = 0 - - _VertexOffsetX ("Vertex OffsetX", float) = 0 - _VertexOffsetY ("Vertex OffsetY", float) = 0 - - _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) - _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) - _MaskSoftnessX ("Mask SoftnessX", float) = 0 - _MaskSoftnessY ("Mask SoftnessY", float) = 0 - - _StencilComp ("Stencil Comparison", Float) = 8 - _Stencil ("Stencil ID", Float) = 0 - _StencilOp ("Stencil Operation", Float) = 0 - _StencilWriteMask ("Stencil Write Mask", Float) = 255 - _StencilReadMask ("Stencil Read Mask", Float) = 255 - - _ColorMask ("Color Mask", Float) = 15 - - _BlendSrcFactor ("Blend SrcFactor", Float) = 1 - _BlendDstFactor ("Blend DstFactor", Float) = 10 -} - -SubShader { - - Tags - { - "Queue"="Transparent" - "IgnoreProjector"="True" - "RenderType"="Transparent" - } - - Stencil - { - Ref [_Stencil] - Comp [_StencilComp] - Pass [_StencilOp] - ReadMask [_StencilReadMask] - WriteMask [_StencilWriteMask] - } - - Cull [_CullMode] - ZWrite Off - Lighting Off - Fog { Mode Off } - ZTest [unity_GUIZTestMode] - - Blend [_BlendSrcFactor] [_BlendDstFactor] - ColorMask [_ColorMask] - - Pass { - CGPROGRAM - #pragma target 3.0 - #pragma vertex VertShader - #pragma fragment PixShader - //#pragma shader_feature __ BEVEL_ON - #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER - //#pragma shader_feature __ GLOW_ON - - //#pragma multi_compile __ UNITY_UI_CLIP_RECT - //#pragma multi_compile __ UNITY_UI_ALPHACLIP - #pragma multi_compile _ GRAYED - #pragma multi_compile _ CLIPPED SOFT_CLIPPED - - #include "UnityCG.cginc" - #include "UnityUI.cginc" - - //begin copy - //#include "Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc" - //#include "Assets/TextMesh Pro/Shaders/TMPro.cginc" - - // UI Editable properties - uniform sampler2D _FaceTex; // Alpha : Signed Distance - uniform float _FaceUVSpeedX; - uniform float _FaceUVSpeedY; - uniform fixed4 _FaceColor; // RGBA : Color + Opacity - uniform float _FaceDilate; // v[ 0, 1] - uniform float _OutlineSoftness; // v[ 0, 1] - - uniform sampler2D _OutlineTex; // RGBA : Color + Opacity - uniform float _OutlineUVSpeedX; - uniform float _OutlineUVSpeedY; - uniform fixed4 _OutlineColor; // RGBA : Color + Opacity - uniform float _OutlineWidth; // v[ 0, 1] - - uniform float _Bevel; // v[ 0, 1] - uniform float _BevelOffset; // v[-1, 1] - uniform float _BevelWidth; // v[-1, 1] - uniform float _BevelClamp; // v[ 0, 1] - uniform float _BevelRoundness; // v[ 0, 1] - - uniform sampler2D _BumpMap; // Normal map - uniform float _BumpOutline; // v[ 0, 1] - uniform float _BumpFace; // v[ 0, 1] - - uniform samplerCUBE _Cube; // Cube / sphere map - uniform fixed4 _ReflectFaceColor; // RGB intensity - uniform fixed4 _ReflectOutlineColor; - //uniform float _EnvTiltX; // v[-1, 1] - //uniform float _EnvTiltY; // v[-1, 1] - uniform float3 _EnvMatrixRotation; - uniform float4x4 _EnvMatrix; - - uniform fixed4 _SpecularColor; // RGB intensity - uniform float _LightAngle; // v[ 0,Tau] - uniform float _SpecularPower; // v[ 0, 1] - uniform float _Reflectivity; // v[ 5, 15] - uniform float _Diffuse; // v[ 0, 1] - uniform float _Ambient; // v[ 0, 1] - - uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity - uniform float _UnderlayOffsetX; // v[-1, 1] - uniform float _UnderlayOffsetY; // v[-1, 1] - uniform float _UnderlayDilate; // v[-1, 1] - uniform float _UnderlaySoftness; // v[ 0, 1] - - uniform fixed4 _GlowColor; // RGBA : Color + Intesity - uniform float _GlowOffset; // v[-1, 1] - uniform float _GlowOuter; // v[ 0, 1] - uniform float _GlowInner; // v[ 0, 1] - uniform float _GlowPower; // v[ 1, 1/(1+4*4)] - - // API Editable properties - uniform float _ShaderFlags; - uniform float _WeightNormal; - uniform float _WeightBold; - - uniform float _ScaleRatioA; - uniform float _ScaleRatioB; - uniform float _ScaleRatioC; - - uniform float _VertexOffsetX; - uniform float _VertexOffsetY; - - //uniform float _UseClipRect; - uniform float _MaskID; - uniform sampler2D _MaskTex; - uniform float4 _MaskCoord; - uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) - //uniform float _MaskWipeControl; - //uniform float _MaskEdgeSoftness; - //uniform fixed4 _MaskEdgeColor; - //uniform bool _MaskInverse; - - uniform float _MaskSoftnessX; - uniform float _MaskSoftnessY; - - // Font Atlas properties - uniform sampler2D _MainTex; - uniform float _TextureWidth; - uniform float _TextureHeight; - uniform float _GradientScale; - uniform float _ScaleX; - uniform float _ScaleY; - uniform float _PerspectiveFilter; - uniform float _Sharpness; - - float2 UnpackUV(float uv) - { - float2 output; - output.x = floor(uv / 4096); - output.y = uv - 4096 * output.x; - - return output * 0.001953125; - } - - fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) - { - half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); - half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); - - faceColor.rgb *= faceColor.a; - outlineColor.rgb *= outlineColor.a; - - faceColor = lerp(faceColor, outlineColor, outlineAlpha); - - faceColor *= faceAlpha; - - return faceColor; - } - - //end copy - - - struct vertex_t { - UNITY_VERTEX_INPUT_INSTANCE_ID - float4 position : POSITION; - float3 normal : NORMAL; - fixed4 color : COLOR; - float2 texcoord0 : TEXCOORD0; - float2 texcoord1 : TEXCOORD1; - }; - - - struct pixel_t { - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - float4 position : SV_POSITION; - fixed4 color : COLOR; - float2 atlas : TEXCOORD0; // Atlas - float4 param : TEXCOORD1; // alphaClip, scale, bias, weight - float2 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) - float3 viewDir : TEXCOORD3; - - #if (UNDERLAY_ON || UNDERLAY_INNER) - float4 texcoord2 : TEXCOORD4; // u,v, scale, bias - fixed4 underlayColor : COLOR1; - #endif - float4 textures : TEXCOORD5; - }; - - // Used by Unity internally to handle Texture Tiling and Offset. - float4 _FaceTex_ST; - float4 _OutlineTex_ST; - - CBUFFER_START(UnityPerMaterial) - #ifdef CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - #endif - - #ifdef SOFT_CLIPPED - float4 _ClipBox = float4(-2, -2, 0, 0); - float4 _ClipSoftness = float4(0, 0, 0, 0); - #endif - CBUFFER_END - - pixel_t VertShader(vertex_t input) - { - pixel_t output; - - UNITY_INITIALIZE_OUTPUT(pixel_t, output); - UNITY_SETUP_INSTANCE_ID(input); - UNITY_TRANSFER_INSTANCE_ID(input,output); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); - - float bold = step(input.texcoord1.y, 0); - - float4 vert = input.position; - vert.x += _VertexOffsetX; - vert.y += _VertexOffsetY; - - float4 vPosition = UnityObjectToClipPos(vert); - - float2 pixelSize = vPosition.w; - pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); - float scale = rsqrt(dot(pixelSize, pixelSize)); - scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); - if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); - - float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; - weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; - - float bias =(.5 - weight) + (.5 / scale); - - float alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _OutlineSoftness * _ScaleRatioA); - - // #if GLOW_ON - // alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); - // #endif - - alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; - - #if (UNDERLAY_ON || UNDERLAY_INNER) - float4 underlayColor = _UnderlayColor; - underlayColor.rgb *= underlayColor.a; - - float bScale = scale; - bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); - float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); - - float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; - float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; - float2 bOffset = float2(x, y); - #endif - - // Generate UV for the Masking Texture - // float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); - // float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); - - // Support for texture tiling and offset - float2 textureUV = UnpackUV(input.texcoord1.x); - //float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); - //float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); - - output.position = vPosition; - #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) - output.color.rgb = GammaToLinearSpace(input.color.rgb); - output.color.a = input.color.a; - #else - output.color = input.color; - #endif - output.atlas = input.texcoord0; - output.param = float4(alphaClip, scale, bias, weight); - //output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); - output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); - #if (UNDERLAY_ON || UNDERLAY_INNER) - output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); - output.underlayColor = underlayColor; - #endif - //output.textures = float4(faceUV, outlineUV); - - #ifdef CLIPPED - output.mask = mul(unity_ObjectToWorld, input.position).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - #ifdef SOFT_CLIPPED - output.mask = mul(unity_ObjectToWorld, input.position).xy * _ClipBox.zw + _ClipBox.xy; - #endif - - return output; - } - - - fixed4 PixShader(pixel_t input) : SV_Target - { - UNITY_SETUP_INSTANCE_ID(input); - - float c = tex2D(_MainTex, input.atlas).a; - - #ifndef UNDERLAY_ON - clip(c - input.param.x); - #endif - - float scale = input.param.y; - float bias = input.param.z; - float weight = input.param.w; - float sd = (bias - c) * scale; - - float outline = (_OutlineWidth * _ScaleRatioA) * scale; - float softness = (_OutlineSoftness * _ScaleRatioA) * scale; - - half4 faceColor = _FaceColor; - half4 outlineColor = _OutlineColor; - - faceColor.rgb *= input.color.rgb; - - //faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); - //outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); - - faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); - - // #if BEVEL_ON - // float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); - // float3 n = GetSurfaceNormal(input.atlas, weight, dxy); - - // float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; - // bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); - // n = normalize(n- bump); - - // float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); - - // float3 col = GetSpecular(n, light); - // faceColor.rgb += col*faceColor.a; - // faceColor.rgb *= 1-(dot(n, light)*_Diffuse); - // faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); - - // fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); - // faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; - // #endif - - #if UNDERLAY_ON - float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; - faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); - #endif - - #if UNDERLAY_INNER - float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; - faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); - #endif - - // #if GLOW_ON - // float4 glowColor = GetGlowColor(sd, scale); - // faceColor.rgb += glowColor.rgb * glowColor.a; - // #endif - - // Alternative implementation to UnityGet2DClipping with support for softness. - // #if UNITY_UI_CLIP_RECT - // half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); - // faceColor *= m.x * m.y; - // #endif - - // #if UNITY_UI_ALPHACLIP - // clip(faceColor.a - 0.001); - // #endif - - #ifdef GRAYED - fixed grey = dot(faceColor.rgb, fixed3(0.299, 0.587, 0.114)); - faceColor.rgb = fixed3(grey, grey, grey); - #endif - - #ifdef CLIPPED - float2 factor = abs(input.mask); - clip(1-max(factor.x, factor.y)); - #endif - - #ifdef SOFT_CLIPPED - float2 factor; - float2 condition = step(input.mask.xy, 0); - float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); - factor.xy = (1.0 - abs(input.mask.xy)) * (clip_softness.xw + clip_softness.zy); - faceColor.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); - clip(faceColor.a - 0.001); - #endif - return faceColor * input.color.a; -} - - ENDCG - } -} - -//Fallback "TextMeshPro/Mobile/Distance Field" -CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader.meta deleted file mode 100644 index 3eee1cd..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: de10f84640569464799f0e0bfa1ab7b0 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs deleted file mode 100644 index 01482ba..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs +++ /dev/null @@ -1,807 +0,0 @@ -#if FAIRYGUI_TMPRO - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.TextCore; -using TMPro; - -namespace FairyGUI -{ - /// - /// TextMeshPro text adapter for FairyGUI. Most of codes were taken from TextMeshPro! - /// Note that not all of TextMeshPro features are supported. - /// - public class TMPFont : BaseFont - { - protected TMP_FontAsset _fontAsset; - - FontStyles _style; - float _scale; - float _padding; - float _stylePadding; - float _ascent; - float _lineHeight; - float _boldMultiplier; - FontWeight _defaultFontWeight; - FontWeight _fontWeight; - TextFormat _topTextFormat; - TextFormat _format; - float _fontSizeScale; - TMP_Character _char; - NTexture[] _atlasTextures; - - float _gradientScale; - float _ratioA; - float _ratioB; - float _ratioC; - - int _formatVersion; - TMPFont _fallbackFont; - List _fallbackFonts; - VertexBuffer[] _subMeshBuffers; - bool _preparing; - - public TMPFont() - { - this.canTint = true; - this.shader = "FairyGUI/TextMeshPro/Distance Field"; - this.keepCrisp = true; - - _defaultFontWeight = FontWeight.Medium; - _fallbackFonts = new List(); - _atlasTextures = new NTexture[0]; - _subMeshBuffers = new VertexBuffer[0]; - } - - override public void Dispose() - { - Release(); - } - - public TMP_FontAsset fontAsset - { - get { return _fontAsset; } - set - { - _fontAsset = value; - Init(); - } - } - - public FontWeight fontWeight - { - get { return _defaultFontWeight; } - set { _defaultFontWeight = value; } - } - - void Release() - { - foreach (var tex in _atlasTextures) - { - if (tex != null) - tex.Dispose(); - } - } - - void Init() - { - Release(); - - mainTexture = WrapAtlasTexture(0); - - // _ascent = _fontAsset.faceInfo.ascentLine; - // _lineHeight = _fontAsset.faceInfo.lineHeight; - _ascent = _fontAsset.faceInfo.pointSize; - _lineHeight = _fontAsset.faceInfo.pointSize * 1.25f; - _gradientScale = fontAsset.atlasPadding + 1; - } - - void OnCreateNewMaterial(Material mat) - { - mat.SetFloat(ShaderUtilities.ID_TextureWidth, mainTexture.width); - mat.SetFloat(ShaderUtilities.ID_TextureHeight, mainTexture.height); - mat.SetFloat(ShaderUtilities.ID_GradientScale, _gradientScale); - mat.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); - mat.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); - } - - public override void Prepare(TextFormat format) - { - _preparing = true; - _topTextFormat = _format = format; - } - - static List subInstancesCopy = new List(); - public override bool BuildGraphics(NGraphics graphics) - { - _preparing = false; - _format = _topTextFormat; - - if (graphics.subInstances != null) - subInstancesCopy.AddRange(graphics.subInstances); - - UpdatePaddings(); - UpdateGraphics(graphics); - - bool changed = CreateSubGraphics(graphics, true); - - for (int i = 0; i < _fallbackFonts.Count; i++) - { - _fallbackFonts[i]._format = _format; - if (_fallbackFonts[i].CreateSubGraphics(graphics, false)) - changed = true; - } - - if (subInstancesCopy.Count > 0) - { - foreach (var g in subInstancesCopy) - { - if (g != null) - { - g.texture = null; - g.enabled = false; - } - } - subInstancesCopy.Clear(); - } - - return changed; - } - - bool CreateSubGraphics(NGraphics graphics, bool paddingsUpdated) - { - bool changed = false; - for (int i = 0; i < _atlasTextures.Length; i++) - { - var texture = _atlasTextures[i]; - if (texture == null || texture.lastActive == 0) - continue; - - texture.lastActive = 0; - - NGraphics sub = null; - if (graphics.subInstances != null) - { - int index = graphics.subInstances.FindIndex(g => g.texture == texture); - if (index == -1) - index = graphics.subInstances.FindIndex(g => g.texture == null); - if (index != -1) - { - sub = graphics.subInstances[index]; - subInstancesCopy[index] = null; - } - } - if (sub == null) - { - sub = graphics.CreateSubInstance("SubTextField"); - sub.meshFactory = new TMPFont_SubMesh(); - sub.SetShaderAndTexture(shader, texture); - graphics.subInstances.Add(sub); - changed = true; - } - else if (sub.texture != texture) - { - sub.SetShaderAndTexture(shader, texture); - sub.enabled = true; - changed = true; - } - - if (!paddingsUpdated) - { - paddingsUpdated = true; - UpdatePaddings(); - } - - UpdateGraphics(sub); - ((TMPFont_SubMesh)sub.meshFactory).font = this; - ((TMPFont_SubMesh)sub.meshFactory).atlasIndex = i; - } - - return changed; - } - - void UpdateGraphics(NGraphics graphics) - { - graphics.userData.x = _padding; - graphics.userData.y = _stylePadding; - - MaterialPropertyBlock block = graphics.materialPropertyBlock; - - block.SetFloat(ShaderUtilities.ID_ScaleRatio_A, _ratioA); - block.SetFloat(ShaderUtilities.ID_ScaleRatio_B, _ratioB); - block.SetFloat(ShaderUtilities.ID_ScaleRatio_C, _ratioC); - - block.SetFloat(ShaderUtilities.ID_FaceDilate, _format.faceDilate); - - if (_format.outline > 0) - { - graphics.ToggleKeyword("OUTLINE_ON", true); - - block.SetFloat(ShaderUtilities.ID_OutlineWidth, _format.outline); - block.SetColor(ShaderUtilities.ID_OutlineColor, _format.outlineColor); - block.SetFloat(ShaderUtilities.ID_OutlineSoftness, _format.outlineSoftness); - } - else - { - graphics.ToggleKeyword("OUTLINE_ON", false); - - block.SetFloat(ShaderUtilities.ID_OutlineWidth, 0); - block.SetFloat(ShaderUtilities.ID_OutlineSoftness, 0); - } - - if (_format.shadowOffset.x != 0 || _format.shadowOffset.y != 0) - { - graphics.ToggleKeyword("UNDERLAY_ON", true); - - block.SetColor(ShaderUtilities.ID_UnderlayColor, _format.shadowColor); - block.SetFloat(ShaderUtilities.ID_UnderlayOffsetX, _format.shadowOffset.x); - block.SetFloat(ShaderUtilities.ID_UnderlayOffsetY, -_format.shadowOffset.y); - block.SetFloat(ShaderUtilities.ID_UnderlaySoftness, _format.underlaySoftness); - } - else - { - graphics.ToggleKeyword("UNDERLAY_ON", false); - - block.SetFloat(ShaderUtilities.ID_UnderlayOffsetX, 0); - block.SetFloat(ShaderUtilities.ID_UnderlayOffsetY, 0); - block.SetFloat(ShaderUtilities.ID_UnderlaySoftness, 0); - } - } - - override public void StartDraw(NGraphics graphics) - { - _padding = graphics.userData.x; - _stylePadding = graphics.userData.y; - - if (graphics.subInstances != null) - { - foreach (var g in graphics.subInstances) - { - if (g.texture == null) - continue; - - var mesh = g.meshFactory as TMPFont_SubMesh; - if (mesh != null) - { - mesh.font._padding = g.userData.x; - mesh.font._stylePadding = g.userData.y; - mesh.font._subMeshBuffers[mesh.atlasIndex] = mesh.source = VertexBuffer.Begin(); - } - } - } - } - - NTexture WrapAtlasTexture(int index) - { - if (_atlasTextures.Length != fontAsset.atlasTextures.Length) - { - Array.Resize(ref _atlasTextures, fontAsset.atlasTextures.Length); - Array.Resize(ref _subMeshBuffers, _atlasTextures.Length); - } - - var texture = _atlasTextures[index]; - if (texture == null) - { - texture = new NTexture(_fontAsset.atlasTextures[index]); - texture.destroyMethod = DestroyMethod.None; - _atlasTextures[index] = texture; - - var manager = texture.GetMaterialManager(this.shader); - manager.onCreateNewMaterial += OnCreateNewMaterial; - } - else if (texture.nativeTexture != _fontAsset.atlasTextures[index]) - { - texture.Reload(_fontAsset.atlasTextures[index], null); - } - - return texture; - } - - override public void SetFormat(TextFormat format, float fontSizeScale) - { - _format = format; - _formatVersion++; - - _fontSizeScale = fontSizeScale; - float size = _format.size * fontSizeScale; - if (_format.specialStyle == TextFormat.SpecialStyle.Subscript || _format.specialStyle == TextFormat.SpecialStyle.Superscript) - size *= SupScale; - - _scale = size / _fontAsset.faceInfo.pointSize * _fontAsset.faceInfo.scale; - _style = FontStyles.Normal; - if (_format.bold) - { - _style |= FontStyles.Bold; - _fontWeight = FontWeight.Bold; - _boldMultiplier = 1 + _fontAsset.boldSpacing * 0.01f; - } - else - { - _fontWeight = _defaultFontWeight; - _boldMultiplier = 1.0f; - } - if (_format.italic) - _style |= FontStyles.Italic; - - _format.FillVertexColors(vertexColors); - } - - override public bool GetGlyph(char ch, out float width, out float height, out float baseline) - { - if (!GetCharacterFromFontAsset(ch, _style, _fontWeight)) - { - width = height = baseline = 0; - return false; - } - - var font = _fallbackFont ?? this; - - width = _char.glyph.metrics.horizontalAdvance * font._boldMultiplier * font._scale; - height = font._lineHeight * font._scale; - baseline = font._ascent * font._scale; - - if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) - { - height /= SupScale; - baseline /= SupScale; - } - else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) - { - height = height / SupScale + baseline * SupOffset; - baseline *= (SupOffset + 1 / SupScale); - } - - height = Mathf.RoundToInt(height); - baseline = Mathf.RoundToInt(baseline); - - return true; - } - - bool GetCharacterFromFontAsset(uint unicode, FontStyles fontStyle, FontWeight fontWeight) - { - bool isAlternativeTypeface; - - // #region OLD_TMP_VERION - // TMP_FontAsset actualAsset; - // _char = TMP_FontAssetUtilities.GetCharacterFromFontAsset(unicode, _fontAsset, true, fontStyle, fontWeight, - // out isAlternativeTypeface, out actualAsset - // ); - // if (_char == null) - // return false; - // #endregion - - #region NEW_TMP_VERION - _char = TMP_FontAssetUtilities.GetCharacterFromFontAsset(unicode, _fontAsset, true, fontStyle, fontWeight, - out isAlternativeTypeface - ); - if (_char == null) - return false; - - TMP_FontAsset actualAsset = _char.textAsset as TMP_FontAsset; - #endregion - - if (actualAsset != _fontAsset) //fallback - { - if (_fallbackFont == null || _fallbackFont._fontAsset != actualAsset) - { - _fallbackFont = _fallbackFonts.Find(x => x._fontAsset == actualAsset); - if (_fallbackFont == null && _preparing) - { - _fallbackFont = new TMPFont(); - _fallbackFont.fontAsset = actualAsset; - _fallbackFonts.Add(_fallbackFont); - } - } - if (_fallbackFont != null) - { - if (_fallbackFont._formatVersion != _formatVersion) - { - _fallbackFont.SetFormat(_format, _fontSizeScale); - _fallbackFont._formatVersion = _formatVersion; - } - - _fallbackFont._char = _char; - } - } - else - _fallbackFont = null; - - if (_preparing) - { - if (_fallbackFont != null) - { - _fallbackFont.WrapAtlasTexture(_char.glyph.atlasIndex).lastActive = 1; - } - else if (_char.glyph.atlasIndex != 0) - { - WrapAtlasTexture(_char.glyph.atlasIndex).lastActive = 1; - } - } - - return true; - } - - static Vector3 bottomLeft; - static Vector3 topLeft; - static Vector3 topRight; - static Vector3 bottomRight; - - static Vector4 uvBottomLeft; - static Vector4 uvTopLeft; - static Vector4 uvTopRight; - static Vector4 uvBottomRight; - - static Vector4 uv2BottomLeft; - static Vector4 uv2TopLeft; - static Vector4 uv2TopRight; - static Vector4 uv2BottomRight; - - static Color32[] vertexColors = new Color32[4]; - - override public void DrawGlyph(VertexBuffer vb, float x, float y) - { - if (_fallbackFont != null) - { - _fallbackFont.DrawGlyph(vb, x, y); - return; - } - - vb = _subMeshBuffers[_char.glyph.atlasIndex] ?? vb; - GlyphMetrics metrics = _char.glyph.metrics; - GlyphRect rect = _char.glyph.glyphRect; - - if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) - y = y - Mathf.RoundToInt(_ascent * _scale * SupOffset); - else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) - y = y + Mathf.RoundToInt(_ascent * _scale * (1 / SupScale - 1 + SupOffset)); - - topLeft.x = x + (metrics.horizontalBearingX - _padding - _stylePadding) * _scale; - topLeft.y = y + (metrics.horizontalBearingY + _padding) * _scale; - bottomRight.x = topLeft.x + (metrics.width + _padding * 2 + _stylePadding * 2) * _scale; - bottomRight.y = topLeft.y - (metrics.height + _padding * 2) * _scale; - - topRight.x = bottomRight.x; - topRight.y = topLeft.y; - bottomLeft.x = topLeft.x; - bottomLeft.y = bottomRight.y; - - #region Handle Italic & Shearing - if (((_style & FontStyles.Italic) == FontStyles.Italic)) - { - // Shift Top vertices forward by half (Shear Value * height of character) and Bottom vertices back by same amount. - float shear_value = _fontAsset.italicStyle * 0.01f; - Vector3 topShear = new Vector3(shear_value * ((metrics.horizontalBearingY + _padding + _stylePadding) * _scale), 0, 0); - Vector3 bottomShear = new Vector3(shear_value * (((metrics.horizontalBearingY - metrics.height - _padding - _stylePadding)) * _scale), 0, 0); - - topLeft += topShear; - bottomLeft += bottomShear; - topRight += topShear; - bottomRight += bottomShear; - } - #endregion Handle Italics & Shearing - - vb.vertices.Add(bottomLeft); - vb.vertices.Add(topLeft); - vb.vertices.Add(topRight); - vb.vertices.Add(bottomRight); - - float u = (rect.x - _padding - _stylePadding) / _fontAsset.atlasWidth; - float v = (rect.y - _padding - _stylePadding) / _fontAsset.atlasHeight; - float uw = rect.width > 0 ? (rect.width + _padding * 2 + _stylePadding * 2) / _fontAsset.atlasWidth : 0; - float vw = rect.height > 0 ? (rect.height + _padding * 2 + _stylePadding * 2) / _fontAsset.atlasHeight : 0; - - uvBottomLeft = new Vector2(u, v); - uvTopLeft = new Vector2(u, v + vw); - uvTopRight = new Vector2(u + uw, v + vw); - uvBottomRight = new Vector2(u + uw, v); - - float xScale = _scale * 0.01f; - if (_format.bold) - xScale *= -1; - uv2BottomLeft = new Vector2(0, xScale); - uv2TopLeft = new Vector2(511, xScale); - uv2TopRight = new Vector2(2093567, xScale); - uv2BottomRight = new Vector2(2093056, xScale); - - vb.uvs.Add(uvBottomLeft); - vb.uvs.Add(uvTopLeft); - vb.uvs.Add(uvTopRight); - vb.uvs.Add(uvBottomRight); - - vb.uvs2.Add(uv2BottomLeft); - vb.uvs2.Add(uv2TopLeft); - vb.uvs2.Add(uv2TopRight); - vb.uvs2.Add(uv2BottomRight); - - vb.colors.Add(vertexColors[0]); - vb.colors.Add(vertexColors[1]); - vb.colors.Add(vertexColors[2]); - vb.colors.Add(vertexColors[3]); - } - - override public void DrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) - { - if (!GetCharacterFromFontAsset('_', _style, FontWeight.Regular)) - return; - - if (_fallbackFont != null) - _fallbackFont.InternalDrawLine(vb, x, y, width, fontSize, type); - else - InternalDrawLine(vb, x, y, width, fontSize, type); - } - - void InternalDrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) - { - vb = _subMeshBuffers[_char.glyph.atlasIndex] ?? vb; - - float thickness; - float offset; - - if (type == 0) - { - thickness = _fontAsset.faceInfo.underlineThickness; - offset = _fontAsset.faceInfo.underlineOffset; - } - else - { - thickness = _fontAsset.faceInfo.strikethroughThickness; - offset = _fontAsset.faceInfo.strikethroughOffset; - } - - GlyphRect rect = _char.glyph.glyphRect; - float scale = (float)fontSize / _fontAsset.faceInfo.pointSize * _fontAsset.faceInfo.scale; - float segmentWidth = _char.glyph.metrics.width / 2 * scale; - width += _padding * 2; - if (width < _char.glyph.metrics.width * scale) - segmentWidth = width / 2f; - - // UNDERLINE VERTICES FOR (3) LINE SEGMENTS - #region UNDERLINE VERTICES - - thickness = thickness * scale; - if (thickness < 1) - thickness = 1; - offset = Mathf.RoundToInt(offset * scale); - - x -= _padding; - y += offset; - - // Front Part of the Underline - topLeft.x = x; - topLeft.y = y + _padding * scale; - bottomRight.x = x + segmentWidth; - bottomRight.y = y - thickness - _padding * scale; - - topRight.x = bottomRight.x; - topRight.y = topLeft.y; - bottomLeft.x = topLeft.x; - bottomLeft.y = bottomRight.y; - - vb.vertices.Add(bottomLeft); - vb.vertices.Add(topLeft); - vb.vertices.Add(topRight); - vb.vertices.Add(bottomRight); - - // Middle Part of the Underline - topLeft = topRight; - bottomLeft = bottomRight; - - topRight.x = x + width - segmentWidth; - bottomRight.x = topRight.x; - - vb.vertices.Add(bottomLeft); - vb.vertices.Add(topLeft); - vb.vertices.Add(topRight); - vb.vertices.Add(bottomRight); - - // End Part of the Underline - topLeft = topRight; - bottomLeft = bottomRight; - - topRight.x = x + width; - bottomRight.x = topRight.x; - - vb.vertices.Add(bottomLeft); - vb.vertices.Add(topLeft); - vb.vertices.Add(topRight); - vb.vertices.Add(bottomRight); - - #endregion - - // UNDERLINE UV0 - #region HANDLE UV0 - - // Calculate UV required to setup the 3 Quads for the Underline. - Vector2 uv0 = new Vector2((rect.x - _padding) / _fontAsset.atlasWidth, (rect.y - _padding) / _fontAsset.atlasHeight); // bottom left - Vector2 uv1 = new Vector2(uv0.x, (rect.y + rect.height + _padding) / _fontAsset.atlasHeight); // top left - Vector2 uv2 = new Vector2((rect.x - _padding + (float)rect.width / 2) / _fontAsset.atlasWidth, uv1.y); // Mid Top Left - Vector2 uv3 = new Vector2(uv2.x, uv0.y); // Mid Bottom Left - Vector2 uv4 = new Vector2((rect.x + _padding + (float)rect.width / 2) / _fontAsset.atlasWidth, uv1.y); // Mid Top Right - Vector2 uv5 = new Vector2(uv4.x, uv0.y); // Mid Bottom right - Vector2 uv6 = new Vector2((rect.x + _padding + rect.width) / _fontAsset.atlasWidth, uv1.y); // End Part - Bottom Right - Vector2 uv7 = new Vector2(uv6.x, uv0.y); // End Part - Top Right - - vb.uvs.Add(uv0); - vb.uvs.Add(uv1); - vb.uvs.Add(uv2); - vb.uvs.Add(uv3); - - // Middle Part of the Underline - vb.uvs.Add(new Vector2(uv2.x - uv2.x * 0.001f, uv0.y)); - vb.uvs.Add(new Vector2(uv2.x - uv2.x * 0.001f, uv1.y)); - vb.uvs.Add(new Vector2(uv2.x + uv2.x * 0.001f, uv1.y)); - vb.uvs.Add(new Vector2(uv2.x + uv2.x * 0.001f, uv0.y)); - - // Right Part of the Underline - - vb.uvs.Add(uv5); - vb.uvs.Add(uv4); - vb.uvs.Add(uv6); - vb.uvs.Add(uv7); - - #endregion - - // UNDERLINE UV2 - #region HANDLE UV2 - SDF SCALE - // UV1 contains Face / Border UV layout. - float segUv1 = segmentWidth / width; - float segUv2 = 1 - segUv1; - - //Calculate the xScale or how much the UV's are getting stretched on the X axis for the middle section of the underline. - float xScale = scale * 0.01f; - - vb.uvs2.Add(PackUV(0, 0, xScale)); - vb.uvs2.Add(PackUV(0, 1, xScale)); - vb.uvs2.Add(PackUV(segUv1, 1, xScale)); - vb.uvs2.Add(PackUV(segUv1, 0, xScale)); - - vb.uvs2.Add(PackUV(segUv1, 0, xScale)); - vb.uvs2.Add(PackUV(segUv1, 1, xScale)); - vb.uvs2.Add(PackUV(segUv2, 1, xScale)); - vb.uvs2.Add(PackUV(segUv2, 0, xScale)); - - vb.uvs2.Add(PackUV(segUv2, 0, xScale)); - vb.uvs2.Add(PackUV(segUv2, 1, xScale)); - vb.uvs2.Add(PackUV(1, 1, xScale)); - vb.uvs2.Add(PackUV(1, 0, xScale)); - - #endregion - - // UNDERLINE VERTEX COLORS - #region - // Alpha is the lower of the vertex color or tag color alpha used. - - for (int i = 0; i < 12; i++) - vb.colors.Add(vertexColors[0]); - - #endregion - } - - Vector2 PackUV(float x, float y, float xScale) - { - double x0 = (int)(x * 511); - double y0 = (int)(y * 511); - - return new Vector2((float)((x0 * 4096) + y0), xScale); - } - - override public bool HasCharacter(char ch) - { - return _fontAsset.HasCharacter(ch, true); - } - - override public int GetLineHeight(int size) - { - return Mathf.RoundToInt(_lineHeight * ((float)size / _fontAsset.faceInfo.pointSize * _fontAsset.faceInfo.scale)); - } - - void UpdatePaddings() - { - UpdateShaderRatios(); - - _padding = GetPadding(); - _stylePadding = (((_style & FontStyles.Bold) == FontStyles.Bold) ? _fontAsset.boldStyle : _fontAsset.normalStyle) - / 4.0f * _gradientScale * _ratioA; - // Clamp overall padding to Gradient Scale size. - if (_stylePadding + _padding > _gradientScale) - _padding = _gradientScale - _stylePadding; - } - - float GetPadding() - { - Vector4 padding = Vector4.zero; - Vector4 maxPadding = Vector4.zero; - - float faceDilate = _format.faceDilate * _ratioA; - float outlineSoftness = _format.outline > 0 ? _format.outlineSoftness : 0; - float faceSoftness = outlineSoftness * _ratioA; - float outlineThickness = _format.outline * _ratioA; - - float uniformPadding = outlineThickness + faceSoftness + faceDilate; - - // Underlay padding contribution - if (_format.shadowOffset.x != 0 || _format.shadowOffset.y != 0) - { - float offsetX = _format.shadowOffset.x * _ratioC; - float offsetY = -_format.shadowOffset.y * _ratioC; - float dilate = _format.faceDilate * _ratioC; - float softness = _format.underlaySoftness * _ratioC; - - padding.x = Mathf.Max(padding.x, faceDilate + dilate + softness - offsetX); - padding.y = Mathf.Max(padding.y, faceDilate + dilate + softness - offsetY); - padding.z = Mathf.Max(padding.z, faceDilate + dilate + softness + offsetX); - padding.w = Mathf.Max(padding.w, faceDilate + dilate + softness + offsetY); - } - - padding.x = Mathf.Max(padding.x, uniformPadding); - padding.y = Mathf.Max(padding.y, uniformPadding); - padding.z = Mathf.Max(padding.z, uniformPadding); - padding.w = Mathf.Max(padding.w, uniformPadding); - - padding.x = Mathf.Min(padding.x, 1); - padding.y = Mathf.Min(padding.y, 1); - padding.z = Mathf.Min(padding.z, 1); - padding.w = Mathf.Min(padding.w, 1); - - maxPadding.x = maxPadding.x < padding.x ? padding.x : maxPadding.x; - maxPadding.y = maxPadding.y < padding.y ? padding.y : maxPadding.y; - maxPadding.z = maxPadding.z < padding.z ? padding.z : maxPadding.z; - maxPadding.w = maxPadding.w < padding.w ? padding.w : maxPadding.w; - - padding *= _gradientScale; - - // Set UniformPadding to the maximum value of any of its components. - uniformPadding = Mathf.Max(padding.x, padding.y); - uniformPadding = Mathf.Max(padding.z, uniformPadding); - uniformPadding = Mathf.Max(padding.w, uniformPadding); - - return uniformPadding + 1.25f; - } - - // Scale Ratios to ensure property ranges are optimum in Material Editor - void UpdateShaderRatios() - { - _ratioA = _ratioB = _ratioC = 1; - - float clamp = 1; - - float weight = Mathf.Max(fontAsset.normalStyle, fontAsset.boldStyle) / 4.0f; - float range = (weight + _format.faceDilate) * (_gradientScale - clamp); - - // Compute Ratio A - float outlineSoftness = _format.outline > 0 ? _format.outlineSoftness : 0; - float t = Mathf.Max(1, weight + _format.faceDilate + _format.outline + outlineSoftness); - _ratioA = (_gradientScale - clamp) / (_gradientScale * t); - - // Compute Ratio B - // no glow support yet - - // Compute Ratio C - if (_format.shadowOffset.x != 0 || _format.shadowOffset.y != 0) - { - t = Mathf.Max(1, Mathf.Max(Mathf.Abs(_format.shadowOffset.x), Mathf.Abs(-_format.shadowOffset.y)) + _format.faceDilate + _format.underlaySoftness); - _ratioC = Mathf.Max(0, _gradientScale - clamp - range) / (_gradientScale * t); - } - } - } - - class TMPFont_SubMesh : IMeshFactory - { - public TMPFont font; - public int atlasIndex; - public VertexBuffer source; - - public void OnPopulateMesh(VertexBuffer vb) - { - if (source != null) - { - vb.Append(source); - vb.AddTriangles(); - source = null; - } - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs.meta deleted file mode 100644 index f816457..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d7b7ade279883464288671135d22476f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs deleted file mode 100644 index 89758dc..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if FAIRYGUI_TMPRO - -namespace FairyGUI -{ - /// - /// - /// - public partial class TextFormat - { - public float faceDilate; - public float outlineSoftness; - public float underlaySoftness; - } -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs.meta deleted file mode 100644 index 5a9b378..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6dd33b417fbb245f887d32166c8acc1d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput.meta deleted file mode 100644 index a277c71..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 75af914f7d92f454d9c7719275cf401c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs deleted file mode 100644 index a00ed1e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs +++ /dev/null @@ -1,77 +0,0 @@ -#if UNITY_WEBGL && FAIRYGUI_WEBGL_TEXT_INPUT - -using System; -using System.Runtime.InteropServices; -using AOT; -using FairyGUI; -using UnityEngine; - -public static class WebGLTextInput -{ - static WebGLTextInput() - { - WebGLTextInputInit(OnInput, OnBlur); - } - - public static void Start(InputTextField target) - { - WebGLTextInputSetText(target.text, - !target.textField.singleLine, - ColorUtility.ToHtmlStringRGBA(target.textFormat.color), - target.textFormat.size, - target.textFormat.font, - target.maxLength); - - WebGLInput.captureAllKeyboardInput = false; - - SyncTransform(target); - } - - public static void Stop() - { - WebGLTextInputHide(); - } - - public static void SyncTransform(InputTextField target) - { - Rect rect = target.TransformRect(new Rect(0, 0, target.width, target.height), null); - rect.min = StageCamera.main.WorldToScreenPoint(rect.min); - rect.max = StageCamera.main.WorldToScreenPoint(rect.max); - rect.y = Screen.height - rect.y - rect.height; - - WebGLTextInputShow(rect.x, rect.y, target.width, target.height, - rect.width / target.width, rect.height / target.height); - } - - [MonoPInvokeCallback(typeof(Action))] - static void OnInput(string value) - { - var focus = Stage.inst.focus as InputTextField; - if (focus != null) - focus.ReplaceText(value); - } - - [MonoPInvokeCallback(typeof(Action))] - static void OnBlur() - { - WebGLInput.captureAllKeyboardInput = true; - - var focus = Stage.inst.focus as InputTextField; - if (focus != null) - Stage.inst.SetFocus(null, true); - } - - [DllImport("__Internal")] - public static extern void WebGLTextInputInit(Action onInputCallback, Action onBlurCallback); - - [DllImport("__Internal")] - public static extern void WebGLTextInputSetText(string text, bool multiline, string color, int fontSize, string fontFace, int maxLength); - - [DllImport("__Internal")] - public static extern void WebGLTextInputShow(float x, float y, float width, float height, float scaleX, float scaleY); - - [DllImport("__Internal")] - public static extern void WebGLTextInputHide(); -} - -#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs.meta deleted file mode 100644 index 2a276ad..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 13531b8bb4ecf47a995ffa3e9c54ab0c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib deleted file mode 100644 index a22e316..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib +++ /dev/null @@ -1,107 +0,0 @@ -var WebGLTextInput = { - $canvasEle: null, - $containerEle: null, - $inputEle: null, - $textareaEle: null, - $callbacks: null, - - WebGLTextInputInit: function (onInputCallback, onBlurCallback) { - callbacks = { onInputCallback: onInputCallback, onBlurCallback: onBlurCallback }; - canvasEle = document.getElementById('unity-canvas'); - }, - - WebGLTextInputSetText: function (text, multiline, color, fontSize, fontFace, maxLength) { - if (containerEle == null) { - InitInput(inputEle = document.createElement("input")); - InitInput(textareaEle = document.createElement("textarea")); - - containerEle = document.createElement("div"); - containerEle.style.cssText = "transform-origin:0 0;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-o-transform-origin:0 0;"; - containerEle.style.position = "absolute"; - containerEle.style.zIndex = '1E5'; - containerEle.name = "WebGLTextInput"; - canvasEle.parentElement.appendChild(containerEle); - } - - inputEle.parentElement && (containerEle.removeChild(inputEle)); - textareaEle.parentElement && (containerEle.removeChild(textareaEle)); - - var current = multiline ? textareaEle : inputEle; - containerEle.appendChild(current); - containerEle.style.display = ""; - - current.maxLength = maxLength <= 0 ? 1E5 : maxLength; - current.value = UTF8ToString(text); - current.style.color = color; - current.style.fontSize = fontSize + 'px'; - current.style.fontFamily = fontFace; - current.focus(); - }, - - WebGLTextInputShow: function (x, y, width, height, scaleX, scaleY) { - containerEle.style.top = y + "px"; - containerEle.style.left = x + "px"; - containerEle.style.width = width + "px"; - containerEle.style.height = height + "px"; - containerEle.style.transform = "scale(" + scaleX + "," + scaleY + ")"; - }, - - WebGLTextInputHide: function () { - containerEle.style.display = "none"; - }, - - - $InitInput: function (input) { - var style = input.style; - style.position = "absolute"; - style.width = "100%"; - style.height = "100%"; - style.overflow = "hidden"; - style.resize = 'none'; - style.backgroundColor = 'transparent'; - style.border = 'none'; - style.outline = 'none'; - - var t = callbacks; - input.addEventListener('input', function () { - var returnStr = input.value; - var bufferSize = lengthBytesUTF8(returnStr) + 1; - var buffer = _malloc(bufferSize); - stringToUTF8(returnStr, buffer, bufferSize); - dynCall("vi", t.onInputCallback, [buffer]); - }); - - input.addEventListener('blur', function () { - if (input.parentElement) - input.parentElement.style.display = "none"; - dynCall("v", t.onBlurCallback); - }); - - if (input.tagName == "INPUT") { - input.addEventListener('keydown', function (e) { - if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) { - e.preventDefault(); - input.blur(); - } - }); - } - - var stopEvent = function (e) { - if (e.type == 'touchmove') - e.preventDefault(); - e.stopPropagation && e.stopPropagation(); - } - - input.addEventListener('mousemove', stopEvent, { passive: false }); - input.addEventListener('mousedown', stopEvent, { passive: false }); - input.addEventListener('touchmove', stopEvent, { passive: false }); - }, -}; - -autoAddDeps(WebGLTextInput, '$canvasEle'); -autoAddDeps(WebGLTextInput, '$containerEle'); -autoAddDeps(WebGLTextInput, '$inputEle'); -autoAddDeps(WebGLTextInput, '$textareaEle'); -autoAddDeps(WebGLTextInput, "$callbacks"); -autoAddDeps(WebGLTextInput, '$InitInput'); -mergeInto(LibraryManager.library, WebGLTextInput); \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib.meta deleted file mode 100644 index 9fff117..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 3613e6a08c3e07c47937410768813692 -timeCreated: 1565948029 -licenseType: Pro -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Facebook: WebGL - second: - enabled: 1 - settings: {} - - first: - WebGL: WebGL - second: - enabled: 1 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef b/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef deleted file mode 100644 index a2a73d7..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "FairyGUI", - "rootNamespace": "", - "references": [ - "Unity.TextMeshPro" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef.meta b/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef.meta deleted file mode 100644 index 295eb12..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8c8f9d96103e94a7da84b012fd7e9f13 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter.meta b/Assets/Plugins/FairyGUI/Scripts/Filter.meta deleted file mode 100644 index 1f7a0c7..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Filter.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 433dd68fcd8eedd489b1c789a3bdd726 -folderAsset: yes -timeCreated: 1464768258 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs b/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs deleted file mode 100644 index b1c1ae2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class BlurFilter : IFilter - { - //ref http://blog.csdn.net/u011047171/article/details/47947397 - - /// - /// - /// - public float blurSize; - - DisplayObject _target; - Material _blitMaterial; - - public BlurFilter() - { - blurSize = 1f; - } - - public DisplayObject target - { - get { return _target; } - set - { - _target = value; - _target.EnterPaintingMode(1, null); - _target.onPaint += OnRenderImage; - - _blitMaterial = new Material(ShaderConfig.GetShader("FairyGUI/BlurFilter")); - _blitMaterial.hideFlags = DisplayObject.hideFlags; - } - } - - public void Dispose() - { - _target.LeavePaintingMode(1); - _target.onPaint -= OnRenderImage; - _target = null; - - if (Application.isPlaying) - Material.Destroy(_blitMaterial); - else - Material.DestroyImmediate(_blitMaterial); - } - - public void Update() - { - } - - void FourTapCone(RenderTexture source, RenderTexture dest, int iteration) - { - float off = blurSize * iteration + 0.5f; - Graphics.BlitMultiTap(source, dest, _blitMaterial, - new Vector2(-off, -off), - new Vector2(-off, off), - new Vector2(off, off), - new Vector2(off, -off) - ); - } - - void DownSample4x(RenderTexture source, RenderTexture dest) - { - float off = 1.0f; - Graphics.BlitMultiTap(source, dest, _blitMaterial, - new Vector2(off, off), - new Vector2(-off, off), - new Vector2(off, off), - new Vector2(off, -off) - ); - } - - void OnRenderImage() - { - if (blurSize < 0.01) - return; - - RenderTexture sourceTexture = (RenderTexture)_target.paintingGraphics.texture.nativeTexture; - int rtW = sourceTexture.width / 8; - int rtH = sourceTexture.height / 8; - RenderTexture buffer = RenderTexture.GetTemporary(rtW, rtH, 0); - - DownSample4x(sourceTexture, buffer); - - for (int i = 0; i < 2; i++) - { - RenderTexture buffer2 = RenderTexture.GetTemporary(rtW, rtH, 0); - FourTapCone(buffer, buffer2, i); - RenderTexture.ReleaseTemporary(buffer); - buffer = buffer2; - } - Graphics.Blit(buffer, sourceTexture); - - RenderTexture.ReleaseTemporary(buffer); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs.meta deleted file mode 100644 index 2e9a0f4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 93a10729ff0ced14c97c9ae9d4771c4c -timeCreated: 1464768262 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs b/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs deleted file mode 100644 index c48bf2e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs +++ /dev/null @@ -1,238 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class ColorFilter : IFilter - { - // Most of the color transformation math was taken from the excellent ColorMatrixFilter class in Starling Framework - - DisplayObject _target; - float[] _matrix; - - const float LUMA_R = 0.299f; - const float LUMA_G = 0.587f; - const float LUMA_B = 0.114f; - - static float[] IDENTITY = new float[] { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }; - static float[] tmp = new float[20]; - - public ColorFilter() - { - _matrix = new float[20]; - Array.Copy(IDENTITY, _matrix, _matrix.Length); - } - - public DisplayObject target - { - get { return _target; } - set - { - _target = value; - - //这里做一个优化,如果对象是图片或者动画,则通过直接修改目标的材质完成滤镜功能 - if ((_target is Image) || (_target is MovieClip)) - _target.graphics.ToggleKeyword("COLOR_FILTER", true); - else //否则通过绘画模式,需要建立一张RT,所以会有一定消耗 - { - _target.EnterPaintingMode(1, null); - _target.paintingGraphics.ToggleKeyword("COLOR_FILTER", true); - } - - UpdateMatrix(); - } - } - - public void Dispose() - { - if (!_target.isDisposed) - { - if ((_target is Image) || (_target is MovieClip)) - _target.graphics.ToggleKeyword("COLOR_FILTER", false); - else - { - _target.paintingGraphics.ToggleKeyword("COLOR_FILTER", false); - _target.LeavePaintingMode(1); - } - } - - _target = null; - } - - public void Update() - { - } - - public void Invert() - { - _ConcatValues(0, -1, 0, 0, 0, 1); - _ConcatValues(1, 0, -1, 0, 0, 1); - _ConcatValues(2, 0, 0, -1, 0, 1); - _ConcatValues(3, 0, 0, 0, 1, 0); - } - - /// - /// Changes the saturation. Typical values are in the range (-1, 1). - /// Values above zero will raise, values below zero will reduce the saturation. - /// '-1' will produce a grayscale image. - /// - /// - public void AdjustSaturation(float sat) - { - sat += 1; - - float invSat = 1 - sat; - float invLumR = invSat * LUMA_R; - float invLumG = invSat * LUMA_G; - float invLumB = invSat * LUMA_B; - - _ConcatValues(0, (invLumR + sat), invLumG, invLumB, 0, 0); - _ConcatValues(1, invLumR, (invLumG + sat), invLumB, 0, 0); - _ConcatValues(2, invLumR, invLumG, (invLumB + sat), 0, 0); - _ConcatValues(3, 0, 0, 0, 1, 0); - } - - /// - /// Changes the contrast. Typical values are in the range (-1, 1). - /// Values above zero will raise, values below zero will reduce the contrast. - /// - /// - public void AdjustContrast(float value) - { - float s = value + 1; - float o = 128f / 255 * (1 - s); - - _ConcatValues(0, s, 0, 0, 0, o); - _ConcatValues(1, 0, s, 0, 0, o); - _ConcatValues(2, 0, 0, s, 0, o); - _ConcatValues(3, 0, 0, 0, 1, 0); - } - - /// - /// Changes the brightness. Typical values are in the range (-1, 1). - /// Values above zero will make the image brighter, values below zero will make it darker. - /// - /// - public void AdjustBrightness(float value) - { - _ConcatValues(0, 1, 0, 0, 0, value); - _ConcatValues(1, 0, 1, 0, 0, value); - _ConcatValues(2, 0, 0, 1, 0, value); - _ConcatValues(3, 0, 0, 0, 1, 0); - } - - /// - ///Changes the hue of the image. Typical values are in the range (-1, 1). - /// - /// - public void AdjustHue(float value) - { - value *= Mathf.PI; - - float cos = Mathf.Cos(value); - float sin = Mathf.Sin(value); - - _ConcatValues(0, ((LUMA_R + (cos * (1 - LUMA_R))) + (sin * -(LUMA_R))), ((LUMA_G + (cos * -(LUMA_G))) + (sin * -(LUMA_G))), ((LUMA_B + (cos * -(LUMA_B))) + (sin * (1 - LUMA_B))), 0, 0); - _ConcatValues(1, ((LUMA_R + (cos * -(LUMA_R))) + (sin * 0.143f)), ((LUMA_G + (cos * (1 - LUMA_G))) + (sin * 0.14f)), ((LUMA_B + (cos * -(LUMA_B))) + (sin * -0.283f)), 0, 0); - _ConcatValues(2, ((LUMA_R + (cos * -(LUMA_R))) + (sin * -((1 - LUMA_R)))), ((LUMA_G + (cos * -(LUMA_G))) + (sin * LUMA_G)), ((LUMA_B + (cos * (1 - LUMA_B))) + (sin * LUMA_B)), 0, 0); - _ConcatValues(3, 0, 0, 0, 1, 0); - } - - /// - /// Tints the image in a certain color, analog to what can be done in Adobe Animate. - /// - /// the RGB color with which the image should be tinted. - /// the intensity with which tinting should be applied. Range (0, 1). - public void Tint(Color color, float amount = 1.0f) - { - float q = 1 - amount; - - float rA = amount * color.r; - float gA = amount * color.g; - float bA = amount * color.b; - - _ConcatValues(0, q + rA * LUMA_R, rA * LUMA_G, rA * LUMA_B, 0, 0); - _ConcatValues(1, gA * LUMA_R, q + gA * LUMA_G, gA * LUMA_B, 0, 0); - _ConcatValues(2, bA * LUMA_R, bA * LUMA_G, q + bA * LUMA_B, 0, 0); - _ConcatValues(3, 0, 0, 0, 1, 0); - } - - /// - /// Changes the filter matrix back to the identity matrix - /// - public void Reset() - { - Array.Copy(IDENTITY, _matrix, _matrix.Length); - - UpdateMatrix(); - } - - void _ConcatValues(int index, float f0, float f1, float f2, float f3, float f4) - { - int i = index * 5; - for (int x = 0; x < 5; ++x) - { - tmp[i + x] = f0 * _matrix[x] + f1 * _matrix[x + 5] + f2 * _matrix[x + 10] + f3 * _matrix[x + 15] + (x == 4 ? f4 : 0); - } - - if (index == 3) - { - Array.Copy(tmp, _matrix, tmp.Length); - - UpdateMatrix(); - } - } - - /// - /// - /// - /// - public void ConcatValues(params float[] values) - { - int i = 0; - - for (int y = 0; y < 4; ++y) - { - for (int x = 0; x < 5; ++x) - { - tmp[i + x] = values[i] * _matrix[x] + - values[i + 1] * _matrix[x + 5] + - values[i + 2] * _matrix[x + 10] + - values[i + 3] * _matrix[x + 15] + - (x == 4 ? values[i + 4] : 0); - } - i += 5; - } - Array.Copy(tmp, _matrix, tmp.Length); - - UpdateMatrix(); - } - - void UpdateMatrix() - { - if (_target == null) - return; - - Matrix4x4 matrix = new Matrix4x4(); - matrix.SetRow(0, new Vector4(_matrix[0], _matrix[1], _matrix[2], _matrix[3])); - matrix.SetRow(1, new Vector4(_matrix[5], _matrix[6], _matrix[7], _matrix[8])); - matrix.SetRow(2, new Vector4(_matrix[10], _matrix[11], _matrix[12], _matrix[13])); - matrix.SetRow(3, new Vector4(_matrix[15], _matrix[16], _matrix[17], _matrix[18])); - - Vector4 offset = new Vector4(_matrix[4], _matrix[9], _matrix[14], _matrix[19]); - - MaterialPropertyBlock block; - if ((_target is Image) || (_target is MovieClip)) - block = _target.graphics.materialPropertyBlock; - else - block = _target.paintingGraphics.materialPropertyBlock; - - block.SetMatrix(ShaderConfig.ID_ColorMatrix, matrix); - block.SetVector(ShaderConfig.ID_ColorOffset, offset); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs.meta deleted file mode 100644 index 31a8376..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: f03204401ceeb6d4dad6b55e0889c0ae -timeCreated: 1464768266 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs b/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs deleted file mode 100644 index f4a6392..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - public interface IFilter - { - /// - /// - /// - DisplayObject target { get; set; } - - /// - /// - /// - void Update(); - - /// - /// - /// - void Dispose(); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs.meta deleted file mode 100644 index 289ed4e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5c508023e115ed34a94f92161160ef24 -timeCreated: 1464768262 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture.meta deleted file mode 100644 index 3982f1c..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1208c6212379851499f0b304870357dd -folderAsset: yes -timeCreated: 1464244762 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs deleted file mode 100644 index 15edb4b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// 长按手势。当按下一定时间后(duration),派发onAction,如果once为false,则间隔duration时间持续派发onAction,直到手指释放。 - /// - public class LongPressGesture : EventDispatcher - { - /// - /// - /// - public GObject host { get; private set; } - - /// - /// 当手指按下时派发该事件。 - /// - public EventListener onBegin { get; private set; } - /// - /// 手指离开屏幕时派发该事件。 - /// - public EventListener onEnd { get; private set; } - /// - /// 当手指按下后一段时间后派发该事件。并且在手指离开前按一定周期派发该事件。 - /// - public EventListener onAction { get; private set; } - - /// - /// 第一次派发事件的触发时间。单位秒 - /// - public float trigger; - - /// - /// 派发onAction事件的时间间隔。单位秒。 - /// - public float interval; - - /// - /// 如果为真,则onAction再一次按下释放过程只派发一次。如果为假,则每隔duration时间派发一次。 - /// - public bool once; - - /// - /// 手指按住后,移动超出此半径范围则手势停止。 - /// - public int holdRangeRadius; - - Vector2 _startPoint; - bool _started; - int _touchId; - - public static float TRIGGER = 1.5f; - public static float INTERVAL = 1f; - - public LongPressGesture(GObject host) - { - this.host = host; - trigger = TRIGGER; - interval = INTERVAL; - holdRangeRadius = 50; - Enable(true); - - onBegin = new EventListener(this, "onLongPressBegin"); - onEnd = new EventListener(this, "onLongPressEnd"); - onAction = new EventListener(this, "onLongPressAction"); - } - - public void Dispose() - { - Enable(false); - host = null; - } - - public void Enable(bool value) - { - if (value) - { - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Add(__touchBegin); - Stage.inst.onTouchEnd.Add(__touchEnd); - } - else - { - host.onTouchBegin.Add(__touchBegin); - host.onTouchEnd.Add(__touchEnd); - } - } - else - { - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Remove(__touchBegin); - Stage.inst.onTouchEnd.Remove(__touchEnd); - } - else - { - host.onTouchBegin.Remove(__touchBegin); - host.onTouchEnd.Remove(__touchEnd); - } - Timers.inst.Remove(__timer); - } - } - - public void Cancel() - { - Timers.inst.Remove(__timer); - _started = false; - } - - void __touchBegin(EventContext context) - { - InputEvent evt = context.inputEvent; - _startPoint = host.GlobalToLocal(new Vector2(evt.x, evt.y)); - _started = false; - _touchId = evt.touchId; - - Timers.inst.Add(trigger, 1, __timer); - context.CaptureTouch(); - } - - void __timer(object param) - { - Vector2 pt = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touchId)); - if (Mathf.Pow(pt.x - _startPoint.x, 2) + Mathf.Pow(pt.y - _startPoint.y, 2) > Mathf.Pow(holdRangeRadius, 2)) - { - Timers.inst.Remove(__timer); - return; - } - if (!_started) - { - _started = true; - onBegin.Call(); - - if (!once) - Timers.inst.Add(interval, 0, __timer); - } - - onAction.Call(); - } - - void __touchEnd(EventContext context) - { - Timers.inst.Remove(__timer); - - if (_started) - { - _started = false; - onEnd.Call(); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs.meta deleted file mode 100644 index e35b0e1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 036b702098f47c24ea9cda6c2948507d -timeCreated: 1464244762 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs deleted file mode 100644 index 53cddc9..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// 两个指头捏或者放的手势。 - /// - public class PinchGesture : EventDispatcher - { - /// - /// - /// - public GObject host { get; private set; } - - /// - /// 当两个手指开始呈捏手势时派发该事件。 - /// - public EventListener onBegin { get; private set; } - /// - /// 当其中一个手指离开屏幕时派发该事件。 - /// - public EventListener onEnd { get; private set; } - /// - /// 当手势动作时派发该事件。 - /// - public EventListener onAction { get; private set; } - - /// - /// 总共缩放的量。 - /// - public float scale; - - /// - /// 从上次通知后的改变量。 - /// - public float delta; - - float _startDistance; - float _lastScale; - int[] _touches; - bool _started; - bool _touchBegan; - - public PinchGesture(GObject host) - { - this.host = host; - Enable(true); - - _touches = new int[2]; - - onBegin = new EventListener(this, "onPinchBegin"); - onEnd = new EventListener(this, "onPinchEnd"); - onAction = new EventListener(this, "onPinchAction"); - } - - public void Dispose() - { - Enable(false); - host = null; - } - - public void Enable(bool value) - { - if (value) - { - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Add(__touchBegin); - Stage.inst.onTouchMove.Add(__touchMove); - Stage.inst.onTouchEnd.Add(__touchEnd); - } - else - { - host.onTouchBegin.Add(__touchBegin); - host.onTouchMove.Add(__touchMove); - host.onTouchEnd.Add(__touchEnd); - } - } - else - { - _started = false; - _touchBegan = false; - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Remove(__touchBegin); - Stage.inst.onTouchMove.Remove(__touchMove); - Stage.inst.onTouchEnd.Remove(__touchEnd); - } - else - { - host.onTouchBegin.Remove(__touchBegin); - host.onTouchMove.Remove(__touchMove); - host.onTouchEnd.Remove(__touchEnd); - } - } - } - - void __touchBegin(EventContext context) - { - if (Stage.inst.touchCount == 2) - { - if (!_started && !_touchBegan) - { - _touchBegan = true; - Stage.inst.GetAllTouch(_touches); - Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); - Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); - _startDistance = Vector2.Distance(pt1, pt2); - - context.CaptureTouch(); - } - } - } - - void __touchMove(EventContext context) - { - if (!_touchBegan || Stage.inst.touchCount != 2) - return; - - InputEvent evt = context.inputEvent; - Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); - Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); - float dist = Vector2.Distance(pt1, pt2); - - if (!_started && Mathf.Abs(dist - _startDistance) > UIConfig.touchDragSensitivity) - { - _started = true; - scale = 1; - _lastScale = 1; - - onBegin.Call(evt); - } - - if (_started) - { - float ss = dist / _startDistance; - delta = ss - _lastScale; - _lastScale = ss; - this.scale += delta; - onAction.Call(evt); - } - } - - void __touchEnd(EventContext context) - { - _touchBegan = false; - if (_started) - { - _started = false; - onEnd.Call(context.inputEvent); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs.meta deleted file mode 100644 index 969c086..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: dc85a819551042448a16308b82054c89 -timeCreated: 1464244766 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs deleted file mode 100644 index 173fe14..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// 手指反向操作的手势。 - /// - public class RotationGesture : EventDispatcher - { - /// - /// - /// - public GObject host { get; private set; } - - /// - /// 当两个手指开始呈反向操作时派发该事件。 - /// - public EventListener onBegin { get; private set; } - /// - /// 当其中一个手指离开屏幕时派发该事件。 - /// - public EventListener onEnd { get; private set; } - /// - /// 当手势动作时派发该事件。 - /// - public EventListener onAction { get; private set; } - - /// - /// 总共旋转的角度。 - /// - public float rotation; - - /// - /// 从上次通知后的改变量。 - /// - public float delta; - - /// - /// 是否把变化量强制为整数。默认true。 - /// - public bool snapping; - - Vector2 _startVector; - float _lastRotation; - int[] _touches; - bool _started; - bool _touchBegan; - - public RotationGesture(GObject host) - { - this.host = host; - Enable(true); - - _touches = new int[2]; - snapping = true; - - onBegin = new EventListener(this, "onRotationBegin"); - onEnd = new EventListener(this, "onRotationEnd"); - onAction = new EventListener(this, "onRotationAction"); - } - - public void Dispose() - { - Enable(false); - host = null; - } - - public void Enable(bool value) - { - if (value) - { - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Add(__touchBegin); - Stage.inst.onTouchMove.Add(__touchMove); - Stage.inst.onTouchEnd.Add(__touchEnd); - } - else - { - host.onTouchBegin.Add(__touchBegin); - host.onTouchMove.Add(__touchMove); - host.onTouchEnd.Add(__touchEnd); - } - } - else - { - _started = false; - _touchBegan = false; - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Remove(__touchBegin); - Stage.inst.onTouchMove.Remove(__touchMove); - Stage.inst.onTouchEnd.Remove(__touchEnd); - } - else - { - host.onTouchBegin.Remove(__touchBegin); - host.onTouchMove.Remove(__touchMove); - host.onTouchEnd.Remove(__touchEnd); - } - } - } - - void __touchBegin(EventContext context) - { - if (Stage.inst.touchCount == 2) - { - if (!_started && !_touchBegan) - { - _touchBegan = true; - Stage.inst.GetAllTouch(_touches); - Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); - Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); - _startVector = pt1 - pt2; - - context.CaptureTouch(); - } - } - } - - void __touchMove(EventContext context) - { - if (!_touchBegan || Stage.inst.touchCount != 2) - return; - - InputEvent evt = context.inputEvent; - Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); - Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); - Vector2 vec = pt1 - pt2; - - float rot = Mathf.Rad2Deg * ((Mathf.Atan2(vec.y, vec.x) - Mathf.Atan2(_startVector.y, _startVector.x))); - if (snapping) - { - rot = Mathf.Round(rot); - if (rot == 0) - return; - } - - if (!_started && rot > 5) - { - _started = true; - rotation = 0; - _lastRotation = 0; - - onBegin.Call(evt); - } - - if (_started) - { - delta = rot - _lastRotation; - _lastRotation = rot; - this.rotation += delta; - onAction.Call(evt); - } - } - - void __touchEnd(EventContext context) - { - _touchBegan = false; - if (_started) - { - _started = false; - onEnd.Call(context.inputEvent); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs.meta deleted file mode 100644 index 4b04f1f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 155eda39968f1194d9b4b7bbd63596ee -timeCreated: 1464244762 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs deleted file mode 100644 index 96ef55a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs +++ /dev/null @@ -1,228 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// 滑动手势。你可以通过onBegin+onMove+onEnd关心整个滑动过程,也可以只使用onAction关注最后的滑动结果。滑动结果包括方向和加速度,可以从position和velocity获得。 - /// 注意onAction仅当滑动超过一定距离(actionDistance)时才触发。 - /// - public class SwipeGesture : EventDispatcher - { - /// - /// - /// - public GObject host { get; private set; } - - /// - /// 当手指开始扫动时派发该事件。 - /// - public EventListener onBegin { get; private set; } - /// - /// 手指离开屏幕时派发该事件。 - /// - public EventListener onEnd { get; private set; } - /// - /// 手指在滑动时派发该事件。 - /// - public EventListener onMove { get; private set; } - /// - /// 当手指从按下到离开经过的距离大于actionDistance时派发该事件。 - /// - public EventListener onAction { get; private set; } - - /// - /// 手指离开时的加速度 - /// - public Vector2 velocity; - - /// - /// 你可以在onBegin事件中设置这个值,那个后续将根据手指移动的距离修改这个值。如果不设置,那position初始为(0,0),反映手指扫过的距离。 - /// - public Vector2 position; - - /// - /// 移动的变化值 - /// - public Vector2 delta; - - /// - /// The min distance to fire onAction event - /// 派发onAction事件的最小距离。如果手指扫过的距离少于此值,onAction不会触发(但onEnd仍然会派发) - /// - public int actionDistance; - - /// - /// 是否把变化量强制为整数。默认true。 - /// - public bool snapping; - - Vector2 _startPoint; - Vector2 _lastPoint; - float _time; - bool _started; - bool _touchBegan; - - public static int ACTION_DISTANCE = 200; - - public SwipeGesture(GObject host) - { - this.host = host; - actionDistance = ACTION_DISTANCE; - snapping = true; - Enable(true); - - onBegin = new EventListener(this, "onSwipeBegin"); - onEnd = new EventListener(this, "onSwipeEnd"); - onMove = new EventListener(this, "onSwipeMove"); - onAction = new EventListener(this, "onnSwipeAction"); - } - - public void Dispose() - { - Enable(false); - host = null; - } - - public void Enable(bool value) - { - if (value) - { - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Add(__touchBegin); - Stage.inst.onTouchMove.Add(__touchMove); - Stage.inst.onTouchEnd.Add(__touchEnd); - } - else - { - host.onTouchBegin.Add(__touchBegin); - host.onTouchMove.Add(__touchMove); - host.onTouchEnd.Add(__touchEnd); - } - } - else - { - _started = false; - _touchBegan = false; - if (host == GRoot.inst) - { - Stage.inst.onTouchBegin.Remove(__touchBegin); - Stage.inst.onTouchMove.Remove(__touchMove); - Stage.inst.onTouchEnd.Remove(__touchEnd); - } - else - { - host.onTouchBegin.Remove(__touchBegin); - host.onTouchMove.Remove(__touchMove); - host.onTouchEnd.Remove(__touchEnd); - } - } - } - - void __touchBegin(EventContext context) - { - if (Stage.inst.touchCount > 1) - { - _touchBegan = false; - if (_started) - { - _started = false; - onEnd.Call(context.inputEvent); - } - return; - } - - InputEvent evt = context.inputEvent; - _startPoint = _lastPoint = host.GlobalToLocal(new Vector2(evt.x, evt.y)); - _lastPoint = _startPoint; - - _time = Time.unscaledTime; - _started = false; - velocity = Vector2.zero; - position = Vector2.zero; - _touchBegan = true; - - context.CaptureTouch(); - } - - void __touchMove(EventContext context) - { - if (!_touchBegan || Stage.inst.touchCount > 1) - return; - - InputEvent evt = context.inputEvent; - Vector2 pt = host.GlobalToLocal(new Vector2(evt.x, evt.y)); - delta = pt - _lastPoint; - if (snapping) - { - delta.x = Mathf.Round(delta.x); - delta.y = Mathf.Round(delta.y); - if (delta.x == 0 && delta.y == 0) - return; - } - - float deltaTime = Time.unscaledDeltaTime; - float elapsed = (Time.unscaledTime - _time) * 60 - 1; - if (elapsed > 1) //速度衰减 - velocity = velocity * Mathf.Pow(0.833f, elapsed); - velocity = Vector3.Lerp(velocity, delta / deltaTime, deltaTime * 10); - _time = Time.unscaledTime; - position += delta; - _lastPoint = pt; - - if (!_started) - { //灵敏度检查,为了和点击区分 - int sensitivity; - if (Stage.touchScreen) - sensitivity = UIConfig.touchDragSensitivity; - else - sensitivity = 5; - - if (Mathf.Abs(delta.x) < sensitivity && Mathf.Abs(delta.y) < sensitivity) - return; - - _started = true; - onBegin.Call(evt); - } - - onMove.Call(evt); - } - - void __touchEnd(EventContext context) - { - _touchBegan = false; - - if (!_started) - return; - - _started = false; - - InputEvent evt = context.inputEvent; - Vector2 pt = host.GlobalToLocal(new Vector2(evt.x, evt.y)); - delta = pt - _lastPoint; - if (snapping) - { - delta.x = Mathf.Round(delta.x); - delta.y = Mathf.Round(delta.y); - } - position += delta; - - //更新速度 - float elapsed = (Time.unscaledTime - _time) * 60 - 1; - if (elapsed > 1) - velocity = velocity * Mathf.Pow(0.833f, elapsed); - if (snapping) - { - velocity.x = Mathf.Round(velocity.x); - velocity.y = Mathf.Round(velocity.y); - } - onEnd.Call(evt); - - pt -= _startPoint; - if (Mathf.Abs(pt.x) > actionDistance || Mathf.Abs(pt.y) > actionDistance) - onAction.Call(evt); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs.meta deleted file mode 100644 index 6a47786..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7bed3df24eb979345a4d3ed9cd34ca0e -timeCreated: 1464244762 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween.meta b/Assets/Plugins/FairyGUI/Scripts/Tween.meta deleted file mode 100644 index 4bcd274..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: af2102ef32b55854c993041a6940127e -folderAsset: yes -timeCreated: 1531222519 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs deleted file mode 100644 index 4bd5f15..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs +++ /dev/null @@ -1,248 +0,0 @@ -// Author: Daniele Giardini - http://www.demigiant.com -// Created: 2014/07/19 14:11 -// -// License Copyright (c) Daniele Giardini. -// This work is subject to the terms at http://dotween.demigiant.com/license.php -// -// ============================================================= -// Contains Daniele Giardini's C# port of the easing equations created by Robert Penner -// (all easing equations except for Flash, InFlash, OutFlash, InOutFlash, -// which use some parts of Robert Penner's equations but were created by Daniele Giardini) -// http://robertpenner.com/easing, see license below: -// ============================================================= -// -// TERMS OF USE - EASING EQUATIONS -// -// Open source under the BSD License. -// -// Copyright ? 2001 Robert Penner -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -// - Neither the name of the author nor the names of contributors may be used to endorse -// or promote products derived from this software without specific prior written permission. -// - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -using System; -using UnityEngine; - -#pragma warning disable 1591 -namespace FairyGUI -{ - public static class EaseManager - { - const float _PiOver2 = Mathf.PI * 0.5f; - const float _TwoPi = Mathf.PI * 2; - - /// - /// Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected - /// - public static float Evaluate(EaseType easeType, float time, float duration, - float overshootOrAmplitude = 1.70158f, - float period = 0, - CustomEase customEase = null) - { - if (duration <= 0) - return 1; - - switch (easeType) - { - case EaseType.Linear: - return time / duration; - case EaseType.SineIn: - return -(float)Math.Cos(time / duration * _PiOver2) + 1; - case EaseType.SineOut: - return (float)Math.Sin(time / duration * _PiOver2); - case EaseType.SineInOut: - return -0.5f * ((float)Math.Cos(Mathf.PI * time / duration) - 1); - case EaseType.QuadIn: - return (time /= duration) * time; - case EaseType.QuadOut: - return -(time /= duration) * (time - 2); - case EaseType.QuadInOut: - if ((time /= duration * 0.5f) < 1) return 0.5f * time * time; - return -0.5f * ((--time) * (time - 2) - 1); - case EaseType.CubicIn: - return (time /= duration) * time * time; - case EaseType.CubicOut: - return ((time = time / duration - 1) * time * time + 1); - case EaseType.CubicInOut: - if ((time /= duration * 0.5f) < 1) return 0.5f * time * time * time; - return 0.5f * ((time -= 2) * time * time + 2); - case EaseType.QuartIn: - return (time /= duration) * time * time * time; - case EaseType.QuartOut: - return -((time = time / duration - 1) * time * time * time - 1); - case EaseType.QuartInOut: - if ((time /= duration * 0.5f) < 1) return 0.5f * time * time * time * time; - return -0.5f * ((time -= 2) * time * time * time - 2); - case EaseType.QuintIn: - return (time /= duration) * time * time * time * time; - case EaseType.QuintOut: - return ((time = time / duration - 1) * time * time * time * time + 1); - case EaseType.QuintInOut: - if ((time /= duration * 0.5f) < 1) return 0.5f * time * time * time * time * time; - return 0.5f * ((time -= 2) * time * time * time * time + 2); - case EaseType.ExpoIn: - return (time == 0) ? 0 : (float)Math.Pow(2, 10 * (time / duration - 1)); - case EaseType.ExpoOut: - if (time == duration) return 1; - return (-(float)Math.Pow(2, -10 * time / duration) + 1); - case EaseType.ExpoInOut: - if (time == 0) return 0; - if (time == duration) return 1; - if ((time /= duration * 0.5f) < 1) return 0.5f * (float)Math.Pow(2, 10 * (time - 1)); - return 0.5f * (-(float)Math.Pow(2, -10 * --time) + 2); - case EaseType.CircIn: - return -((float)Math.Sqrt(1 - (time /= duration) * time) - 1); - case EaseType.CircOut: - return (float)Math.Sqrt(1 - (time = time / duration - 1) * time); - case EaseType.CircInOut: - if ((time /= duration * 0.5f) < 1) return -0.5f * ((float)Math.Sqrt(1 - time * time) - 1); - return 0.5f * ((float)Math.Sqrt(1 - (time -= 2) * time) + 1); - case EaseType.ElasticIn: - float s0; - if (time == 0) return 0; - if ((time /= duration) == 1) return 1; - if (period == 0) period = duration * 0.3f; - if (overshootOrAmplitude < 1) - { - overshootOrAmplitude = 1; - s0 = period / 4; - } - else s0 = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude); - return -(overshootOrAmplitude * (float)Math.Pow(2, 10 * (time -= 1)) * (float)Math.Sin((time * duration - s0) * _TwoPi / period)); - case EaseType.ElasticOut: - float s1; - if (time == 0) return 0; - if ((time /= duration) == 1) return 1; - if (period == 0) period = duration * 0.3f; - if (overshootOrAmplitude < 1) - { - overshootOrAmplitude = 1; - s1 = period / 4; - } - else s1 = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude); - return (overshootOrAmplitude * (float)Math.Pow(2, -10 * time) * (float)Math.Sin((time * duration - s1) * _TwoPi / period) + 1); - case EaseType.ElasticInOut: - float s; - if (time == 0) return 0; - if ((time /= duration * 0.5f) == 2) return 1; - if (period == 0) period = duration * (0.3f * 1.5f); - if (overshootOrAmplitude < 1) - { - overshootOrAmplitude = 1; - s = period / 4; - } - else s = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude); - if (time < 1) return -0.5f * (overshootOrAmplitude * (float)Math.Pow(2, 10 * (time -= 1)) * (float)Math.Sin((time * duration - s) * _TwoPi / period)); - return overshootOrAmplitude * (float)Math.Pow(2, -10 * (time -= 1)) * (float)Math.Sin((time * duration - s) * _TwoPi / period) * 0.5f + 1; - case EaseType.BackIn: - return (time /= duration) * time * ((overshootOrAmplitude + 1) * time - overshootOrAmplitude); - case EaseType.BackOut: - return ((time = time / duration - 1) * time * ((overshootOrAmplitude + 1) * time + overshootOrAmplitude) + 1); - case EaseType.BackInOut: - if ((time /= duration * 0.5f) < 1) return 0.5f * (time * time * (((overshootOrAmplitude *= (1.525f)) + 1) * time - overshootOrAmplitude)); - return 0.5f * ((time -= 2) * time * (((overshootOrAmplitude *= (1.525f)) + 1) * time + overshootOrAmplitude) + 2); - case EaseType.BounceIn: - return Bounce.EaseIn(time, duration); - case EaseType.BounceOut: - return Bounce.EaseOut(time, duration); - case EaseType.BounceInOut: - return Bounce.EaseInOut(time, duration); - - case EaseType.Custom: - return customEase != null ? customEase.Evaluate(time / duration) : (time / duration); - - default: - return -(time /= duration) * (time - 2); - } - } - - /// - /// This class contains a C# port of the easing equations created by Robert Penner (http://robertpenner.com/easing). - /// - static class Bounce - { - /// - /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity. - /// - /// - /// Current time (in frames or seconds). - /// - /// - /// Expected easing duration (in frames or seconds). - /// - /// - /// The eased value. - /// - public static float EaseIn(float time, float duration) - { - return 1 - EaseOut(duration - time, duration); - } - - /// - /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity. - /// - /// - /// Current time (in frames or seconds). - /// - /// - /// Expected easing duration (in frames or seconds). - /// - /// - /// The eased value. - /// - public static float EaseOut(float time, float duration) - { - if ((time /= duration) < (1 / 2.75f)) - { - return (7.5625f * time * time); - } - if (time < (2 / 2.75f)) - { - return (7.5625f * (time -= (1.5f / 2.75f)) * time + 0.75f); - } - if (time < (2.5f / 2.75f)) - { - return (7.5625f * (time -= (2.25f / 2.75f)) * time + 0.9375f); - } - return (7.5625f * (time -= (2.625f / 2.75f)) * time + 0.984375f); - } - - /// - /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration. - /// - /// - /// Current time (in frames or seconds). - /// - /// - /// Expected easing duration (in frames or seconds). - /// - /// - /// The eased value. - /// - public static float EaseInOut(float time, float duration) - { - if (time < duration * 0.5f) - { - return EaseIn(time * 2, duration) * 0.5f; - } - return EaseOut(time * 2 - duration, duration) * 0.5f + 0.5f; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs.meta deleted file mode 100644 index 098835f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 080d1dce1c76e154c9c8f50151e6d69e -timeCreated: 1531473796 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs deleted file mode 100644 index e64c7e0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public enum EaseType - { - Linear, - SineIn, - SineOut, - SineInOut, - QuadIn, - QuadOut, - QuadInOut, - CubicIn, - CubicOut, - CubicInOut, - QuartIn, - QuartOut, - QuartInOut, - QuintIn, - QuintOut, - QuintInOut, - ExpoIn, - ExpoOut, - ExpoInOut, - CircIn, - CircOut, - CircInOut, - ElasticIn, - ElasticOut, - ElasticInOut, - BackIn, - BackOut, - BackInOut, - BounceIn, - BounceOut, - BounceInOut, - Custom - } - - /// - /// - /// - public class CustomEase - { - Vector2[] _points; - int _pointDensity; - - static GPath helperPath = new GPath(); - - /// - /// - /// - /// - public CustomEase(int pointDensity = 200) - { - _points = new Vector2[pointDensity + 1]; - _pointDensity = pointDensity; - } - - /// - /// - /// - /// - public void Create(IEnumerable pathPoints) - { - helperPath.Create(pathPoints); - for (int i = 0; i <= _pointDensity; i++) - { - Vector3 pt = helperPath.GetPointAt(i / (float)_pointDensity); - _points[i] = pt; - } - _points[0] = Vector2.zero; - _points[_pointDensity] = Vector2.one; - - Array.Sort(_points, (Vector2 p1, Vector2 p2) => - { - return p1.x.CompareTo(p2.x); - }); - } - - /// - /// - /// - /// - /// - public float Evaluate(float time) - { - if (time <= 0) - return 0; - else if (time >= 1) - return 1; - - int low = 0; - int high = _pointDensity; - int cur = 0; - while (low != high) - { - cur = low + (int)((high - low) / 2f); - float x = _points[cur].x; - if (time == x) - break; - else if (time > x) - { - if (low == cur) - { - cur = high; - break; - } - low = cur; - } - else - { - if (high == cur) - { - cur = low; - break; - } - high = cur; - } - } - - Vector2 v0 = _points[cur]; - Vector2 v1; - if (cur == _pointDensity) - v1 = Vector2.one; - else - v1 = _points[cur + 1]; - float k = (v1.y - v0.y) / (v1.x - v0.x); - if (float.IsNaN(k)) - k = 0; - - return v0.y + (time - v0.x) * k; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs.meta deleted file mode 100644 index 23492da..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b3faa49ad96d1cb45acf0a5534094d09 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs deleted file mode 100644 index daefedf..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs +++ /dev/null @@ -1,475 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - [System.Serializable] - public struct GPathPoint - { - /// - /// - /// - public Vector3 pos; - - /// - /// - /// - public Vector3 control1; - - /// - /// - /// - public Vector3 control2; - - /// - /// - /// - public CurveType curveType; - - /// - /// - /// - public bool smooth; - - /// - /// - /// - public enum CurveType - { - CRSpline, - Bezier, - CubicBezier, - Straight - } - - /// - /// - /// - /// - public GPathPoint(Vector3 pos) - { - this.pos = pos; - this.control1 = Vector3.zero; - this.control2 = Vector3.zero; - this.curveType = CurveType.CRSpline; - this.smooth = true; - } - - /// - /// - /// - /// - /// - public GPathPoint(Vector3 pos, Vector3 control) - { - this.pos = pos; - this.control1 = control; - this.control2 = Vector3.zero; - this.curveType = CurveType.Bezier; - this.smooth = true; - } - - /// - /// - /// - /// - /// - /// - public GPathPoint(Vector3 pos, Vector3 control1, Vector3 control2) - { - this.pos = pos; - this.control1 = control1; - this.control2 = control2; - this.curveType = CurveType.CubicBezier; - this.smooth = true; - } - - /// - /// - /// - /// - /// - public GPathPoint(Vector3 pos, CurveType curveType) - { - this.pos = pos; - this.control1 = Vector3.zero; - this.control2 = Vector3.zero; - this.curveType = curveType; - this.smooth = true; - } - } - - /// - /// - /// - public class GPath - { - protected struct Segment - { - public GPathPoint.CurveType type; - public float length; - public int ptStart; - public int ptCount; - } - - protected List _segments; - protected List _points; - protected float _fullLength; - - static List helperList = new List(); - static List splinePoints = new List(); - - public GPath() - { - _segments = new List(); - _points = new List(); - } - - /// - /// - /// - public float length - { - get { return _fullLength; } - } - - /// - /// - /// - /// - /// - public void Create(GPathPoint pt1, GPathPoint pt2) - { - helperList.Clear(); - helperList.Add(pt1); - helperList.Add(pt2); - Create(helperList); - } - - /// - /// - /// - /// - /// - /// - public void Create(GPathPoint pt1, GPathPoint pt2, GPathPoint pt3) - { - helperList.Clear(); - helperList.Add(pt1); - helperList.Add(pt2); - helperList.Add(pt3); - Create(helperList); - } - - /// - /// - /// - /// - /// - /// - /// - public void Create(GPathPoint pt1, GPathPoint pt2, GPathPoint pt3, GPathPoint pt4) - { - helperList.Clear(); - helperList.Add(pt1); - helperList.Add(pt2); - helperList.Add(pt3); - helperList.Add(pt4); - Create(helperList); - } - - /// - /// - /// - /// - public void Create(IEnumerable points) - { - _segments.Clear(); - _points.Clear(); - splinePoints.Clear(); - _fullLength = 0; - - var et = points.GetEnumerator(); - if (!et.MoveNext()) - return; - - GPathPoint prev = et.Current; - if (prev.curveType == GPathPoint.CurveType.CRSpline) - splinePoints.Add(prev.pos); - - while (et.MoveNext()) - { - GPathPoint current = et.Current; - - if (prev.curveType != GPathPoint.CurveType.CRSpline) - { - Segment seg = new Segment(); - seg.type = prev.curveType; - seg.ptStart = _points.Count; - if (prev.curveType == GPathPoint.CurveType.Straight) - { - seg.ptCount = 2; - _points.Add(prev.pos); - _points.Add(current.pos); - } - else if (prev.curveType == GPathPoint.CurveType.Bezier) - { - seg.ptCount = 3; - _points.Add(prev.pos); - _points.Add(current.pos); - _points.Add(prev.control1); - } - else if (prev.curveType == GPathPoint.CurveType.CubicBezier) - { - seg.ptCount = 4; - _points.Add(prev.pos); - _points.Add(current.pos); - _points.Add(prev.control1); - _points.Add(prev.control2); - } - seg.length = Vector3.Distance(prev.pos, current.pos); - _fullLength += seg.length; - _segments.Add(seg); - } - - if (current.curveType != GPathPoint.CurveType.CRSpline) - { - if (splinePoints.Count > 0) - { - splinePoints.Add(current.pos); - CreateSplineSegment(); - } - } - else - splinePoints.Add(current.pos); - - prev = current; - } - - if (splinePoints.Count > 1) - CreateSplineSegment(); - } - - void CreateSplineSegment() - { - int cnt = splinePoints.Count; - splinePoints.Insert(0, splinePoints[0]); - splinePoints.Add(splinePoints[cnt]); - splinePoints.Add(splinePoints[cnt]); - cnt += 3; - - Segment seg = new Segment(); - seg.type = GPathPoint.CurveType.CRSpline; - seg.ptStart = _points.Count; - seg.ptCount = cnt; - _points.AddRange(splinePoints); - - seg.length = 0; - for (int i = 1; i < cnt; i++) - seg.length += Vector3.Distance(splinePoints[i - 1], splinePoints[i]); - _fullLength += seg.length; - _segments.Add(seg); - splinePoints.Clear(); - } - - /// - /// - /// - public void Clear() - { - _segments.Clear(); - _points.Clear(); - } - - /// - /// - /// - /// - /// - public Vector3 GetPointAt(float t) - { - t = Mathf.Clamp01(t); - int cnt = _segments.Count; - if (cnt == 0) - return Vector3.zero; - - Segment seg; - if (t == 1) - { - seg = _segments[cnt - 1]; - - if (seg.type == GPathPoint.CurveType.Straight) - return Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t); - else if (seg.type == GPathPoint.CurveType.Bezier || seg.type == GPathPoint.CurveType.CubicBezier) - return onBezierCurve(seg.ptStart, seg.ptCount, t); - else - return onCRSplineCurve(seg.ptStart, seg.ptCount, t); - } - - float len = t * _fullLength; - Vector3 pt = new Vector3(); - for (int i = 0; i < cnt; i++) - { - seg = _segments[i]; - - len -= seg.length; - if (len < 0) - { - t = 1 + len / seg.length; - - if (seg.type == GPathPoint.CurveType.Straight) - pt = Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t); - else if (seg.type == GPathPoint.CurveType.Bezier || seg.type == GPathPoint.CurveType.CubicBezier) - pt = onBezierCurve(seg.ptStart, seg.ptCount, t); - else - pt = onCRSplineCurve(seg.ptStart, seg.ptCount, t); - - break; - } - } - - return pt; - } - - /// - /// - /// - public int segmentCount - { - get { return _segments.Count; } - } - - /// - /// - /// - /// - /// - public float GetSegmentLength(int segmentIndex) - { - return _segments[segmentIndex].length; - } - - /// - /// - /// - /// - /// - /// - /// - /// - public void GetPointsInSegment(int segmentIndex, float t0, float t1, List points, List ts = null, float pointDensity = 0.1f) - { - if (points == null) - points = new List(); - - if (ts != null) - ts.Add(t0); - Segment seg = _segments[segmentIndex]; - if (seg.type == GPathPoint.CurveType.Straight) - { - points.Add(Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t0)); - points.Add(Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t1)); - } - else if (seg.type == GPathPoint.CurveType.Bezier || seg.type == GPathPoint.CurveType.CubicBezier) - { - points.Add(onBezierCurve(seg.ptStart, seg.ptCount, t0)); - int SmoothAmount = (int)Mathf.Min(seg.length * pointDensity, 50); - for (int j = 0; j <= SmoothAmount; j++) - { - float t = (float)j / SmoothAmount; - if (t > t0 && t < t1) - { - points.Add(onBezierCurve(seg.ptStart, seg.ptCount, t)); - if (ts != null) - ts.Add(t); - } - } - points.Add(onBezierCurve(seg.ptStart, seg.ptCount, t1)); - } - else - { - points.Add(onCRSplineCurve(seg.ptStart, seg.ptCount, t0)); - int SmoothAmount = (int)Mathf.Min(seg.length * pointDensity, 50); - for (int j = 0; j <= SmoothAmount; j++) - { - float t = (float)j / SmoothAmount; - if (t > t0 && t < t1) - { - points.Add(onCRSplineCurve(seg.ptStart, seg.ptCount, t)); - if (ts != null) - ts.Add(t); - } - } - points.Add(onCRSplineCurve(seg.ptStart, seg.ptCount, t1)); - } - - if (ts != null) - ts.Add(t1); - } - - /// - /// - /// - /// - public void GetAllPoints(List points, float pointDensity = 0.1f) - { - int cnt = _segments.Count; - for (int i = 0; i < cnt; i++) - GetPointsInSegment(i, 0, 1, points, null, pointDensity); - } - - /// - /// Catmull rom spline implementation - /// by Stéphane Drouot, laei - http://games.laei.org - /// - /// Actual translation of math gebrish to C# credit is due to - /// Boon Cotter - http://www.booncotter.com/waypoints-catmull-rom-splines/ - /// - /// This takes a list of vector3 (or an array) and gives a function called .onCurve(t) - /// returning a value on a Catmull-Rom spline for 0 <= t <= 1 - /// - Vector3 onCRSplineCurve(int ptStart, int ptCount, float t) - { - int adjustedIndex = Mathf.FloorToInt(t * (ptCount - 4)) + ptStart; //Since the equation works with 4 points, we adjust the starting point depending on t to return a point on the specific segment - - Vector3 result = new Vector3(); - - Vector3 p0 = _points[adjustedIndex]; - Vector3 p1 = _points[adjustedIndex + 1]; - Vector3 p2 = _points[adjustedIndex + 2]; - Vector3 p3 = _points[adjustedIndex + 3]; - - float adjustedT = (t == 1f) ? 1f : Mathf.Repeat(t * (ptCount - 4), 1f); // Then we adjust t to be that value on that new piece of segment... for t == 1f don't use repeat (that would return 0f); - - float t0 = ((-adjustedT + 2f) * adjustedT - 1f) * adjustedT * 0.5f; - float t1 = (((3f * adjustedT - 5f) * adjustedT) * adjustedT + 2f) * 0.5f; - float t2 = ((-3f * adjustedT + 4f) * adjustedT + 1f) * adjustedT * 0.5f; - float t3 = ((adjustedT - 1f) * adjustedT * adjustedT) * 0.5f; - - result.x = p0.x * t0 + p1.x * t1 + p2.x * t2 + p3.x * t3; - result.y = p0.y * t0 + p1.y * t1 + p2.y * t2 + p3.y * t3; - result.z = p0.z * t0 + p1.z * t1 + p2.z * t2 + p3.z * t3; - - return result; - } - - Vector3 onBezierCurve(int ptStart, int ptCount, float t) - { - float t2 = 1f - t; - Vector3 p0 = _points[ptStart]; - Vector3 p1 = _points[ptStart + 1]; - Vector3 cp0 = _points[ptStart + 2]; - - if (ptCount == 4) - { - Vector3 cp1 = _points[ptStart + 3]; - return t2 * t2 * t2 * p0 + 3f * t2 * t2 * t * cp0 + 3f * t2 * t * t * cp1 + t * t * t * p1; - } - else - return t2 * t2 * p0 + 2f * t2 * t * cp0 + t * t * p1; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs.meta deleted file mode 100644 index 6df535d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3755f976b6dd17c408731fa87b3cb006 -timeCreated: 1546592349 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs deleted file mode 100644 index b2d985d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs +++ /dev/null @@ -1,189 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class GTween - { - /// - /// - /// - public static bool catchCallbackExceptions = false; - - /// - /// - /// - /// - /// - /// - /// - public static GTweener To(float startValue, float endValue, float duration) - { - return TweenManager.CreateTween()._To(startValue, endValue, duration); - } - - /// - /// - /// - /// - /// - /// - /// - public static GTweener To(Vector2 startValue, Vector2 endValue, float duration) - { - return TweenManager.CreateTween()._To(startValue, endValue, duration); - } - - /// - /// - /// - /// - /// - /// - /// - public static GTweener To(Vector3 startValue, Vector3 endValue, float duration) - { - return TweenManager.CreateTween()._To(startValue, endValue, duration); - } - - /// - /// - /// - /// - /// - /// - /// - public static GTweener To(Vector4 startValue, Vector4 endValue, float duration) - { - return TweenManager.CreateTween()._To(startValue, endValue, duration); - } - - /// - /// - /// - /// - /// - /// - /// - public static GTweener To(Color startValue, Color endValue, float duration) - { - return TweenManager.CreateTween()._To(startValue, endValue, duration); - } - - /// - /// - /// - /// - /// - /// - /// - public static GTweener ToDouble(double startValue, double endValue, float duration) - { - return TweenManager.CreateTween()._To(startValue, endValue, duration); - } - - /// - /// - /// - /// - /// - public static GTweener DelayedCall(float delay) - { - return TweenManager.CreateTween().SetDelay(delay); - } - - /// - /// - /// - /// - /// - /// - /// - public static GTweener Shake(Vector3 startValue, float amplitude, float duration) - { - return TweenManager.CreateTween()._Shake(startValue, amplitude, duration); - } - - /// - /// - /// - /// - /// - public static bool IsTweening(object target) - { - return TweenManager.IsTweening(target, TweenPropType.None); - } - - /// - /// - /// - /// - /// - /// - public static bool IsTweening(object target, TweenPropType propType) - { - return TweenManager.IsTweening(target, propType); - } - - /// - /// - /// - /// - public static void Kill(object target) - { - TweenManager.KillTweens(target, TweenPropType.None, false); - } - - /// - /// - /// - /// - /// - public static void Kill(object target, bool complete) - { - TweenManager.KillTweens(target, TweenPropType.None, complete); - } - - /// - /// - /// - /// - /// - /// - public static void Kill(object target, TweenPropType propType, bool complete) - { - TweenManager.KillTweens(target, propType, complete); - } - - /// - /// - /// - /// - /// - public static GTweener GetTween(object target) - { - return TweenManager.GetTween(target, TweenPropType.None); - } - - /// - /// - /// - /// - /// - /// - public static GTweener GetTween(object target, TweenPropType propType) - { - return TweenManager.GetTween(target, propType); - } - - /// - /// - /// - public static void Clean() - { - TweenManager.Clean(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs.meta deleted file mode 100644 index 369c30f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 613566965c56f6e4e9a95936b8128f90 -timeCreated: 1531222519 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs deleted file mode 100644 index 613152e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs +++ /dev/null @@ -1,863 +0,0 @@ -using System; -using UnityEngine; -#if FAIRYGUI_TOLUA -using LuaInterface; -#endif - -namespace FairyGUI -{ - /// - /// - /// - public delegate void GTweenCallback(); - - /// - /// - /// - /// - public delegate void GTweenCallback1(GTweener tweener); - - /// - /// - /// - public interface ITweenListener - { - /// - /// - /// - /// - void OnTweenStart(GTweener tweener); - - /// - /// - /// - /// - void OnTweenUpdate(GTweener tweener); - - /// - /// - /// - /// - void OnTweenComplete(GTweener tweener); - } - - /// - /// - /// - public class GTweener - { - public static EaseType defaultEaseType = EaseType.QuadOut; - public static bool defaultIgnoreEngineTimeScale = false; - public static float defaultTimeScale = 1; - - internal object _target; - internal TweenPropType _propType; - internal bool _killed; - internal bool _paused; - - float _delay; - float _duration; - float _breakpoint; - EaseType _easeType; - float _easeOvershootOrAmplitude; - float _easePeriod; - int _repeat; - bool _yoyo; - float _timeScale; - bool _ignoreEngineTimeScale; - bool _snapping; - object _userData; - GPath _path; - CustomEase _customEase; - - GTweenCallback _onUpdate; - GTweenCallback _onStart; - GTweenCallback _onComplete; - GTweenCallback1 _onUpdate1; - GTweenCallback1 _onStart1; - GTweenCallback1 _onComplete1; - ITweenListener _listener; - - TweenValue _startValue; - TweenValue _endValue; - TweenValue _value; - TweenValue _deltaValue; - int _valueSize; - - bool _started; - int _ended; - float _elapsedTime; - float _normalizedTime; - int _smoothStart; - - public GTweener() - { - _startValue = new TweenValue(); - _endValue = new TweenValue(); - _value = new TweenValue(); - _deltaValue = new TweenValue(); - } - - /// - /// - /// - /// - /// - public GTweener SetDelay(float value) - { - _delay = value; - return this; - } - - /// - /// - /// - public float delay - { - get { return _delay; } - } - - /// - /// - /// - /// - /// - public GTweener SetDuration(float value) - { - _duration = value; - return this; - } - - /// - /// - /// - public float duration - { - get { return _duration; } - } - - /// - /// - /// - /// - /// - public GTweener SetBreakpoint(float value) - { - _breakpoint = value; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetEase(EaseType value) - { - _easeType = value; - return this; - } - - /// - /// - /// - /// - /// - /// - public GTweener SetEase(EaseType value, CustomEase customEase) - { - _easeType = value; - _customEase = customEase; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetEasePeriod(float value) - { - _easePeriod = value; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetEaseOvershootOrAmplitude(float value) - { - _easeOvershootOrAmplitude = value; - return this; - } - - /// - /// - /// - /// - /// - /// - public GTweener SetRepeat(int times, bool yoyo = false) - { - _repeat = times; - _yoyo = yoyo; - return this; - } - - /// - /// - /// - public int repeat - { - get { return _repeat; } - } - - /// - /// - /// - /// - /// - public GTweener SetTimeScale(float value) - { - _timeScale = value; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetIgnoreEngineTimeScale(bool value) - { - _ignoreEngineTimeScale = value; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetSnapping(bool value) - { - _snapping = value; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetPath(GPath value) - { - _path = value; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetTarget(object value) - { - _target = value; - _propType = TweenPropType.None; - return this; - } - - /// - /// - /// - /// - /// - /// - public GTweener SetTarget(object value, TweenPropType propType) - { - _target = value; - _propType = propType; - return this; - } - - /// - /// - /// - public object target - { - get { return _target; } - } - - /// - /// - /// - /// - /// - public GTweener SetUserData(object value) - { - _userData = value; - return this; - } - - /// - /// - /// - public object userData - { - get { return _userData; } - } - - /// - /// - /// - /// - /// -#if FAIRYGUI_TOLUA - [NoToLua] -#endif - public GTweener OnUpdate(GTweenCallback callback) - { - _onUpdate = callback; - return this; - } - - /// - /// - /// - /// - /// -#if FAIRYGUI_TOLUA - [NoToLua] -#endif - public GTweener OnStart(GTweenCallback callback) - { - _onStart = callback; - return this; - } - - /// - /// - /// - /// - /// -#if FAIRYGUI_TOLUA - [NoToLua] -#endif - public GTweener OnComplete(GTweenCallback callback) - { - _onComplete = callback; - return this; - } - - /// - /// - /// - /// - /// - public GTweener OnUpdate(GTweenCallback1 callback) - { - _onUpdate1 = callback; - return this; - } - - /// - /// - /// - /// - /// - public GTweener OnStart(GTweenCallback1 callback) - { - _onStart1 = callback; - return this; - } - - /// - /// - /// - /// - /// - public GTweener OnComplete(GTweenCallback1 callback) - { - _onComplete1 = callback; - return this; - } - - /// - /// - /// - /// - /// - public GTweener SetListener(ITweenListener value) - { - _listener = value; - return this; - } - - /// - /// - /// - public TweenValue startValue - { - get { return _startValue; } - } - - /// - /// - /// - public TweenValue endValue - { - get { return _endValue; } - } - - /// - /// - /// - public TweenValue value - { - get { return _value; } - } - - /// - /// - /// - public TweenValue deltaValue - { - get { return _deltaValue; } - } - - /// - /// - /// - public float normalizedTime - { - get { return _normalizedTime; } - } - - /// - /// - /// - public bool completed - { - get { return _ended != 0; } - } - - /// - /// - /// - public bool allCompleted - { - get { return _ended == 1; } - } - - /// - /// - /// - /// - /// - public GTweener SetPaused(bool paused) - { - _paused = paused; - if (_paused) - _smoothStart = 0; - return this; - } - - /// - /// - /// - /// - public void Seek(float time) - { - if (_killed) - return; - - _elapsedTime = time; - if (_elapsedTime < _delay) - { - if (_started) - _elapsedTime = _delay; - else - return; - } - - Update(); - } - - /// - /// - /// - /// - public void Kill(bool complete = false) - { - if (_killed) - return; - - if (complete) - { - if (_ended == 0) - { - if (_breakpoint >= 0) - _elapsedTime = _delay + _breakpoint; - else if (_repeat >= 0) - _elapsedTime = _delay + _duration * (_repeat + 1); - else - _elapsedTime = _delay + _duration * 2; - Update(); - } - - CallCompleteCallback(); - } - - _killed = true; - } - - internal GTweener _To(float start, float end, float duration) - { - _valueSize = 1; - _startValue.x = start; - _endValue.x = end; - _value.x = start; - _duration = duration; - return this; - } - - internal GTweener _To(Vector2 start, Vector2 end, float duration) - { - _valueSize = 2; - _startValue.vec2 = start; - _endValue.vec2 = end; - _value.vec2 = start; - _duration = duration; - return this; - } - - internal GTweener _To(Vector3 start, Vector3 end, float duration) - { - _valueSize = 3; - _startValue.vec3 = start; - _endValue.vec3 = end; - _value.vec3 = start; - _duration = duration; - return this; - } - - internal GTweener _To(Vector4 start, Vector4 end, float duration) - { - _valueSize = 4; - _startValue.vec4 = start; - _endValue.vec4 = end; - _value.vec4 = start; - _duration = duration; - return this; - } - - internal GTweener _To(Color start, Color end, float duration) - { - _valueSize = 4; - _startValue.color = start; - _endValue.color = end; - _value.color = start; - _duration = duration; - return this; - } - - internal GTweener _To(double start, double end, float duration) - { - _valueSize = 5; - _startValue.d = start; - _endValue.d = end; - _value.d = start; - _duration = duration; - return this; - } - - internal GTweener _Shake(Vector3 start, float amplitude, float duration) - { - _valueSize = 6; - _startValue.vec3 = start; - _startValue.w = amplitude; - _duration = duration; - _easeType = EaseType.Linear; - return this; - } - - internal void _Init() - { - _delay = 0; - _duration = 0; - _breakpoint = -1; - _easeType = defaultEaseType; - _timeScale = defaultTimeScale; - _ignoreEngineTimeScale = defaultIgnoreEngineTimeScale; - _easePeriod = 0; - _easeOvershootOrAmplitude = 1.70158f; - _snapping = false; - _repeat = 0; - _yoyo = false; - _valueSize = 0; - _started = false; - _paused = false; - _killed = false; - _elapsedTime = 0; - _normalizedTime = 0; - _ended = 0; - _path = null; - _customEase = null; - _smoothStart = Time.frameCount == 1 ? 3 : 1;//刚启动时会有多帧的超时 - } - - internal void _Reset() - { - _target = null; - _listener = null; - _userData = null; - _onStart = _onUpdate = _onComplete = null; - _onStart1 = _onUpdate1 = _onComplete1 = null; - } - - internal void _Update() - { - if (_ended != 0) //Maybe completed by seek - { - CallCompleteCallback(); - _killed = true; - return; - } - - float dt; - if (_smoothStart > 0) - { - _smoothStart--; - dt = Mathf.Clamp(Time.unscaledDeltaTime, 0, Application.targetFrameRate > 0 ? (1.0f / Application.targetFrameRate) : 0.016f); - if (!_ignoreEngineTimeScale) - dt *= Time.timeScale; - } - else if (_ignoreEngineTimeScale) - dt = Time.unscaledDeltaTime; - else - dt = Time.deltaTime; - if (_timeScale != 1) - dt *= _timeScale; - if (dt == 0) - return; - - _elapsedTime += dt; - Update(); - - if (_ended != 0) - { - if (!_killed) - { - CallCompleteCallback(); - _killed = true; - } - } - } - - void Update() - { - _ended = 0; - - if (_valueSize == 0) //DelayedCall - { - if (_elapsedTime >= _delay + _duration) - _ended = 1; - - return; - } - - if (!_started) - { - if (_elapsedTime < _delay) - return; - - _started = true; - CallStartCallback(); - if (_killed) - return; - } - - bool reversed = false; - float tt = _elapsedTime - _delay; - if (_breakpoint >= 0 && tt >= _breakpoint) - { - tt = _breakpoint; - _ended = 2; - } - - if (_repeat != 0) - { - int round = Mathf.FloorToInt(tt / _duration); - tt -= _duration * round; - if (_yoyo) - reversed = round % 2 == 1; - - if (_repeat > 0 && _repeat - round < 0) - { - if (_yoyo) - reversed = _repeat % 2 == 1; - tt = _duration; - _ended = 1; - } - } - else if (tt >= _duration) - { - tt = _duration; - _ended = 1; - } - - _normalizedTime = EaseManager.Evaluate(_easeType, reversed ? (_duration - tt) : tt, _duration, - _easeOvershootOrAmplitude, _easePeriod, _customEase); - - _value.SetZero(); - _deltaValue.SetZero(); - - if (_valueSize == 5) - { - double d = _startValue.d + (_endValue.d - _startValue.d) * _normalizedTime; - if (_snapping) - d = Math.Round(d); - _deltaValue.d = d - _value.d; - _value.d = d; - _value.x = (float)d; - } - else if (_valueSize == 6) - { - if (_ended == 0) - { - Vector3 r = UnityEngine.Random.insideUnitSphere; - r.x = r.x > 0 ? 1 : -1; - r.y = r.y > 0 ? 1 : -1; - r.z = r.z > 0 ? 1 : -1; - r *= _startValue.w * (1 - _normalizedTime); - - _deltaValue.vec3 = r; - _value.vec3 = _startValue.vec3 + r; - } - else - _value.vec3 = _startValue.vec3; - } - else if (_path != null) - { - Vector3 vec3 = _path.GetPointAt(_normalizedTime); - if (_snapping) - { - vec3.x = Mathf.Round(vec3.x); - vec3.y = Mathf.Round(vec3.y); - vec3.z = Mathf.Round(vec3.z); - } - _deltaValue.vec3 = vec3 - _value.vec3; - _value.vec3 = vec3; - } - else - { - for (int i = 0; i < _valueSize; i++) - { - float n1 = _startValue[i]; - float n2 = _endValue[i]; - float f = n1 + (n2 - n1) * _normalizedTime; - if (_snapping) - f = Mathf.Round(f); - _deltaValue[i] = f - _value[i]; - _value[i] = f; - } - _value.d = _value.x; - } - - if (_target != null && _propType != TweenPropType.None) - TweenPropTypeUtils.SetProps(_target, _propType, _value); - - CallUpdateCallback(); - } - - void CallStartCallback() - { - if (GTween.catchCallbackExceptions) - { - try - { - if (_onStart1 != null) - _onStart1(this); - if (_onStart != null) - _onStart(); - if (_listener != null) - _listener.OnTweenStart(this); - } - catch (Exception e) - { - Debug.LogWarning("FairyGUI: error in start callback > " + e.Message); - } - } - else - { - if (_onStart1 != null) - _onStart1(this); - if (_onStart != null) - _onStart(); - if (_listener != null) - _listener.OnTweenStart(this); - } - } - - void CallUpdateCallback() - { - if (GTween.catchCallbackExceptions) - { - try - { - if (_onUpdate1 != null) - _onUpdate1(this); - if (_onUpdate != null) - _onUpdate(); - if (_listener != null) - _listener.OnTweenUpdate(this); - } - catch (Exception e) - { - Debug.LogWarning("FairyGUI: error in update callback > " + e.Message); - } - } - else - { - if (_onUpdate1 != null) - _onUpdate1(this); - if (_onUpdate != null) - _onUpdate(); - if (_listener != null) - _listener.OnTweenUpdate(this); - } - } - - void CallCompleteCallback() - { - if (GTween.catchCallbackExceptions) - { - try - { - if (_onComplete1 != null) - _onComplete1(this); - if (_onComplete != null) - _onComplete(); - if (_listener != null) - _listener.OnTweenComplete(this); - } - catch (Exception e) - { - Debug.LogWarning("FairyGUI: error in complete callback > " + e.Message); - } - } - else - { - if (_onComplete1 != null) - _onComplete1(this); - if (_onComplete != null) - _onComplete(); - if (_listener != null) - _listener.OnTweenComplete(this); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs.meta deleted file mode 100644 index fdd151e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 48e1b5ac4a90a5649962a3e75fd666c2 -timeCreated: 1531222519 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs deleted file mode 100644 index 379939a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs +++ /dev/null @@ -1,191 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - internal static class TweenManager - { - static GTweener[] _activeTweens = new GTweener[30]; - static List _tweenerPool = new List(30); - static int _totalActiveTweens = 0; - static bool _inited = false; - - internal static GTweener CreateTween() - { - if (!_inited) - Init(); - - GTweener tweener; - int cnt = _tweenerPool.Count; - if (cnt > 0) - { - tweener = _tweenerPool[cnt - 1]; - _tweenerPool.RemoveAt(cnt - 1); - } - else - tweener = new GTweener(); - tweener._Init(); - _activeTweens[_totalActiveTweens++] = tweener; - - if (_totalActiveTweens == _activeTweens.Length) - { - GTweener[] newArray = new GTweener[_activeTweens.Length + Mathf.CeilToInt(_activeTweens.Length * 0.5f)]; - _activeTweens.CopyTo(newArray, 0); - _activeTweens = newArray; - } - - return tweener; - } - - internal static bool IsTweening(object target, TweenPropType propType) - { - if (target == null) - return false; - - bool anyType = propType == TweenPropType.None; - for (int i = 0; i < _totalActiveTweens; i++) - { - GTweener tweener = _activeTweens[i]; - if (tweener != null && tweener.target == target && !tweener._killed - && (anyType || tweener._propType == propType)) - return true; - } - - return false; - } - - internal static bool KillTweens(object target, TweenPropType propType, bool completed) - { - if (target == null) - return false; - - bool flag = false; - int cnt = _totalActiveTweens; - bool anyType = propType == TweenPropType.None; - for (int i = 0; i < cnt; i++) - { - GTweener tweener = _activeTweens[i]; - if (tweener != null && tweener.target == target && !tweener._killed - && (anyType || tweener._propType == propType)) - { - tweener.Kill(completed); - flag = true; - } - } - - return flag; - } - - internal static GTweener GetTween(object target, TweenPropType propType) - { - if (target == null) - return null; - - int cnt = _totalActiveTweens; - bool anyType = propType == TweenPropType.None; - for (int i = 0; i < cnt; i++) - { - GTweener tweener = _activeTweens[i]; - if (tweener != null && tweener.target == target && !tweener._killed - && (anyType || tweener._propType == propType)) - { - return tweener; - } - } - - return null; - } - - internal static void Update() - { - int cnt = _totalActiveTweens; - int freePosStart = -1; - for (int i = 0; i < cnt; i++) - { - GTweener tweener = _activeTweens[i]; - if (tweener == null) - { - if (freePosStart == -1) - freePosStart = i; - } - else if (tweener._killed) - { - tweener._Reset(); - _tweenerPool.Add(tweener); - _activeTweens[i] = null; - - if (freePosStart == -1) - freePosStart = i; - } - else - { - if ((tweener._target is GObject) && ((GObject)tweener._target)._disposed) - tweener._killed = true; - else if (!tweener._paused) - tweener._Update(); - - if (freePosStart != -1) - { - _activeTweens[freePosStart] = tweener; - _activeTweens[i] = null; - freePosStart++; - } - } - } - - if (freePosStart >= 0) - { - if (_totalActiveTweens != cnt) //new tweens added - { - int j = cnt; - cnt = _totalActiveTweens - cnt; - for (int i = 0; i < cnt; i++) - { - _activeTweens[freePosStart++] = _activeTweens[j]; - _activeTweens[j] = null; - j++; - } - } - _totalActiveTweens = freePosStart; - } - } - - internal static void Clean() - { - _tweenerPool.Clear(); - } - - static void Init() - { - _inited = true; - if (Application.isPlaying) - { - GameObject gameObject = new GameObject("[FairyGUI.TweenManager]"); - gameObject.hideFlags = HideFlags.HideInHierarchy; - gameObject.SetActive(true); - Object.DontDestroyOnLoad(gameObject); - - gameObject.AddComponent(); - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - _tweenerPool.Clear(); - _activeTweens = new GTweener[30]; - _totalActiveTweens = 0; - _inited = false; - } -#endif - - class TweenEngine : MonoBehaviour - { - void Update() - { - TweenManager.Update(); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs.meta deleted file mode 100644 index 73db2cc..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3048174c9aaf2e840953e3cab497a426 -timeCreated: 1531222519 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs deleted file mode 100644 index 1842267..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs +++ /dev/null @@ -1,103 +0,0 @@ -namespace FairyGUI -{ - /// - /// - /// - public enum TweenPropType - { - None, - X, - Y, - Z, - XY, - Position, - Width, - Height, - Size, - ScaleX, - ScaleY, - Scale, - Rotation, - RotationX, - RotationY, - Alpha, - Progress - } - - internal class TweenPropTypeUtils - { - internal static void SetProps(object target, TweenPropType propType, TweenValue value) - { - GObject g = target as GObject; - if (g == null) - return; - - switch (propType) - { - case TweenPropType.X: - g.x = value.x; - break; - - case TweenPropType.Y: - g.y = value.x; - break; - - case TweenPropType.Z: - g.z = value.x; - break; - - case TweenPropType.XY: - g.xy = value.vec2; - break; - - case TweenPropType.Position: - g.position = value.vec3; - break; - - case TweenPropType.Width: - g.width = value.x; - break; - - case TweenPropType.Height: - g.height = value.x; - break; - - case TweenPropType.Size: - g.size = value.vec2; - break; - - case TweenPropType.ScaleX: - g.scaleX = value.x; - break; - - case TweenPropType.ScaleY: - g.scaleY = value.x; - break; - - case TweenPropType.Scale: - g.scale = value.vec2; - break; - - case TweenPropType.Rotation: - g.rotation = value.x; - break; - - case TweenPropType.RotationX: - g.rotationX = value.x; - break; - - case TweenPropType.RotationY: - g.rotationY = value.x; - break; - - case TweenPropType.Alpha: - g.alpha = value.x; - break; - - case TweenPropType.Progress: - g.asProgress.Update(value.d); - break; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs.meta deleted file mode 100644 index fa3ba5d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7000822d8123b4344b21dcfb230f8938 -timeCreated: 1531473796 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs deleted file mode 100644 index 0b18d05..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs +++ /dev/null @@ -1,151 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class TweenValue - { - /// - /// - /// - public float x; - - /// - /// - /// - public float y; - - /// - /// - /// - public float z; - - /// - /// - /// - public float w; - - /// - /// - /// - public double d; - - public TweenValue() - { - } - - /// - /// - /// - public Vector2 vec2 - { - get { return new Vector2(x, y); } - set - { - x = value.x; - y = value.y; - } - } - - /// - /// - /// - public Vector3 vec3 - { - get { return new Vector3(x, y, z); } - set - { - x = value.x; - y = value.y; - z = value.z; - } - } - - /// - /// - /// - public Vector4 vec4 - { - get { return new Vector4(x, y, z, w); } - set - { - x = value.x; - y = value.y; - z = value.z; - w = value.w; - } - } - - /// - /// - /// - public Color color - { - get { return new Color(x, y, z, w); } - set - { - x = value.r; - y = value.g; - z = value.b; - w = value.a; - } - } - - /// - /// - /// - /// - /// - public float this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - default: - throw new System.Exception("Index out of bounds: " + index); - } - } - - set - { - switch (index) - { - case 0: - x = value; - break; - case 1: - y = value; - break; - case 2: - z = value; - break; - case 3: - w = value; - break; - default: - throw new System.Exception("Index out of bounds: " + index); - } - } - } - - /// - /// - /// - public void SetZero() - { - x = y = z = w = 0; - d = 0; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs.meta deleted file mode 100644 index 3799346..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 97e8a1ca496b4d34cad5f2420a9f8809 -timeCreated: 1531473796 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI.meta b/Assets/Plugins/FairyGUI/Scripts/UI.meta deleted file mode 100644 index db6f75a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 929603a3379395146b898542bc37d31b -folderAsset: yes -timeCreated: 1460480287 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action.meta deleted file mode 100644 index e077566..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Action.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 76c9ac9d39933da4e833eddb1a96581a -folderAsset: yes -timeCreated: 1500559678 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs deleted file mode 100644 index a22d5a2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs +++ /dev/null @@ -1,52 +0,0 @@ -using FairyGUI.Utils; - -namespace FairyGUI -{ - public class ChangePageAction : ControllerAction - { - public string objectId; - public string controllerName; - public string targetPage; - - public ChangePageAction() - { - } - - override protected void Enter(Controller controller) - { - if (string.IsNullOrEmpty(controllerName)) - return; - - GComponent gcom; - if (!string.IsNullOrEmpty(objectId)) - gcom = controller.parent.GetChildById(objectId) as GComponent; - else - gcom = controller.parent; - if (gcom != null) - { - Controller cc = gcom.GetController(controllerName); - if (cc != null && cc != controller && !cc.changing) - { - if (this.targetPage == "~1") - { - if (controller.selectedIndex < cc.pageCount) - cc.selectedIndex = controller.selectedIndex; - } - else if (this.targetPage == "~2") - cc.selectedPage = controller.selectedPage; - else - cc.selectedPageId = this.targetPage; - } - } - } - - override public void Setup(ByteBuffer buffer) - { - base.Setup(buffer); - - objectId = buffer.ReadS(); - controllerName = buffer.ReadS(); - targetPage = buffer.ReadS(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs.meta deleted file mode 100644 index f81dfb2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 625a0a9a670984b47a4b170a801c850e -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs deleted file mode 100644 index b713a01..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using FairyGUI.Utils; - -namespace FairyGUI -{ - public class ControllerAction - { - public enum ActionType - { - PlayTransition, - ChangePage - } - - public string[] fromPage; - public string[] toPage; - - public static ControllerAction CreateAction(ActionType type) - { - switch (type) - { - case ActionType.PlayTransition: - return new PlayTransitionAction(); - - case ActionType.ChangePage: - return new ChangePageAction(); - } - return null; - } - - public ControllerAction() - { - } - - public void Run(Controller controller, string prevPage, string curPage) - { - if ((fromPage == null || fromPage.Length == 0 || Array.IndexOf(fromPage, prevPage) != -1) - && (toPage == null || toPage.Length == 0 || Array.IndexOf(toPage, curPage) != -1)) - Enter(controller); - else - Leave(controller); - } - - virtual protected void Enter(Controller controller) - { - - } - - virtual protected void Leave(Controller controller) - { - - } - - virtual public void Setup(ByteBuffer buffer) - { - int cnt; - - cnt = buffer.ReadShort(); - fromPage = new string[cnt]; - for (int i = 0; i < cnt; i++) - fromPage[i] = buffer.ReadS(); - - cnt = buffer.ReadShort(); - toPage = new string[cnt]; - for (int i = 0; i < cnt; i++) - toPage[i] = buffer.ReadS(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs.meta deleted file mode 100644 index 3889cd1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d6fb1eb3d57827b4bb09eddfa5c76137 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs deleted file mode 100644 index cf15661..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs +++ /dev/null @@ -1,52 +0,0 @@ -using FairyGUI.Utils; - -namespace FairyGUI -{ - public class PlayTransitionAction : ControllerAction - { - public string transitionName; - public int playTimes; - public float delay; - public bool stopOnExit; - - private Transition _currentTransition; - - public PlayTransitionAction() - { - playTimes = 1; - delay = 0; - } - - override protected void Enter(Controller controller) - { - Transition trans = controller.parent.GetTransition(transitionName); - if (trans != null) - { - if (_currentTransition != null && _currentTransition.playing) - trans.ChangePlayTimes(playTimes); - else - trans.Play(playTimes, delay, null); - _currentTransition = trans; - } - } - - override protected void Leave(Controller controller) - { - if (stopOnExit && _currentTransition != null) - { - _currentTransition.Stop(); - _currentTransition = null; - } - } - - override public void Setup(ByteBuffer buffer) - { - base.Setup(buffer); - - transitionName = buffer.ReadS(); - playTimes = buffer.ReadInt(); - delay = buffer.ReadFloat(); - stopOnExit = buffer.ReadBool(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs.meta deleted file mode 100644 index 36e302f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: eac7f8de0d09f17439fb3c8e4a06090e -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs b/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs deleted file mode 100644 index c415aff..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - public class AsyncCreationHelper - { - public static void CreateObject(PackageItem item, UIPackage.CreateObjectCallback callback) - { - Timers.inst.StartCoroutine(_CreateObject(item, callback)); - } - - static IEnumerator _CreateObject(PackageItem item, UIPackage.CreateObjectCallback callback) - { - Stats.LatestObjectCreation = 0; - Stats.LatestGraphicsCreation = 0; - - float frameTime = UIConfig.frameTimeForAsyncUIConstruction; - - List itemList = new List(); - DisplayListItem di = new DisplayListItem(item, ObjectType.Component); - di.childCount = CollectComponentChildren(item, itemList); - itemList.Add(di); - - int cnt = itemList.Count; - List objectPool = new List(cnt); - GObject obj; - float t = Time.realtimeSinceStartup; - bool alreadyNextFrame = false; - - for (int i = 0; i < cnt; i++) - { - di = itemList[i]; - if (di.packageItem != null) - { - obj = UIObjectFactory.NewObject(di.packageItem); - objectPool.Add(obj); - - UIPackage._constructing++; - if (di.packageItem.type == PackageItemType.Component) - { - int poolStart = objectPool.Count - di.childCount - 1; - - ((GComponent)obj).ConstructFromResource(objectPool, poolStart); - - objectPool.RemoveRange(poolStart, di.childCount); - } - else - { - obj.ConstructFromResource(); - } - UIPackage._constructing--; - } - else - { - obj = UIObjectFactory.NewObject(di.type); - objectPool.Add(obj); - - if (di.type == ObjectType.List && di.listItemCount > 0) - { - int poolStart = objectPool.Count - di.listItemCount - 1; - for (int k = 0; k < di.listItemCount; k++) //把他们都放到pool里,这样GList在创建时就不需要创建对象了 - ((GList)obj).itemPool.ReturnObject(objectPool[k + poolStart]); - objectPool.RemoveRange(poolStart, di.listItemCount); - } - } - - if ((i % 5 == 0) && Time.realtimeSinceStartup - t >= frameTime) - { - yield return null; - t = Time.realtimeSinceStartup; - alreadyNextFrame = true; - } - } - - if (!alreadyNextFrame) //强制至至少下一帧才调用callback,避免调用者逻辑出错 - yield return null; - - callback(objectPool[0]); - } - - /// - /// 收集创建目标对象所需的所有类型信息 - /// - /// - /// - static int CollectComponentChildren(PackageItem item, List list) - { - ByteBuffer buffer = item.rawData; - buffer.Seek(0, 2); - - int dcnt = buffer.ReadShort(); - DisplayListItem di; - PackageItem pi; - for (int i = 0; i < dcnt; i++) - { - int dataLen = buffer.ReadShort(); - int curPos = buffer.position; - - buffer.Seek(curPos, 0); - - ObjectType type = (ObjectType)buffer.ReadByte(); - string src = buffer.ReadS(); - string pkgId = buffer.ReadS(); - - buffer.position = curPos; - - if (src != null) - { - UIPackage pkg; - if (pkgId != null) - pkg = UIPackage.GetById(pkgId); - else - pkg = item.owner; - - pi = pkg != null ? pkg.GetItem(src) : null; - di = new DisplayListItem(pi, type); - - if (pi != null && pi.type == PackageItemType.Component) - di.childCount = CollectComponentChildren(pi, list); - } - else - { - di = new DisplayListItem(null, type); - if (type == ObjectType.List) //list - di.listItemCount = CollectListChildren(buffer, list); - } - - list.Add(di); - buffer.position = curPos + dataLen; - } - - return dcnt; - } - - static int CollectListChildren(ByteBuffer buffer, List list) - { - buffer.Seek(buffer.position, 8); - - string defaultItem = buffer.ReadS(); - int listItemCount = 0; - int itemCount = buffer.ReadShort(); - for (int i = 0; i < itemCount; i++) - { - int nextPos = buffer.ReadShort(); - nextPos += buffer.position; - - string url = buffer.ReadS(); - if (url == null) - url = defaultItem; - if (!string.IsNullOrEmpty(url)) - { - PackageItem pi = UIPackage.GetItemByURL(url); - if (pi != null) - { - DisplayListItem di = new DisplayListItem(pi, pi.objectType); - if (pi.type == PackageItemType.Component) - di.childCount = CollectComponentChildren(pi, list); - - list.Add(di); - listItemCount++; - } - } - buffer.position = nextPos; - } - - return listItemCount; - } - - /// - /// - /// - class DisplayListItem - { - public PackageItem packageItem; - public ObjectType type; - public int childCount; - public int listItemCount; - - public DisplayListItem(PackageItem pi, ObjectType type) - { - this.packageItem = pi; - this.type = type; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs.meta deleted file mode 100644 index b83a2c0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 99d38995f0d185d4eb694a7728219c01 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs deleted file mode 100644 index 039942a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs +++ /dev/null @@ -1,440 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; -using System; - -namespace FairyGUI -{ - /// - /// Controller class. - /// 控制器类。控制器的创建和设计需通过编辑器完成,不建议使用代码创建。 - /// 最常用的方法是通过selectedIndex获得或改变控制器的活动页面。如果要获得控制器页面改变的通知,使用onChanged事件。 - /// - public class Controller : EventDispatcher - { - /// - /// Name of the controller - /// 控制器名称。 - /// - public string name; - - internal GComponent parent; - internal bool autoRadioGroupDepth; - internal bool changing; - - int _selectedIndex; - int _previousIndex; - List _pageIds; - List _pageNames; - List _actions; - - EventListener _onChanged; - - static uint _nextPageId; - - public Controller() - { - _pageIds = new List(); - _pageNames = new List(); - _selectedIndex = -1; - _previousIndex = -1; - } - - public void Dispose() - { - RemoveEventListeners(); - } - - - /// - /// When controller page changed. - /// 当控制器活动页面改变时,此事件被触发。 - /// - public EventListener onChanged - { - get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } - } - - /// - /// Current page index. - /// 获得或设置当前活动页面索引。 - /// - public int selectedIndex - { - get - { - return _selectedIndex; - } - set - { - if (_selectedIndex != value) - { - if (value > _pageIds.Count - 1) - throw new IndexOutOfRangeException("" + value); - - changing = true; - - _previousIndex = _selectedIndex; - _selectedIndex = value; - parent.ApplyController(this); - - DispatchEvent("onChanged", null); - - changing = false; - } - } - } - - /// - /// Set current page index, no onChanged event. - /// 通过索引设置当前活动页面,和selectedIndex的区别在于,这个方法不会触发onChanged事件。 - /// - /// Page index - public void SetSelectedIndex(int value) - { - if (_selectedIndex != value) - { - if (value > _pageIds.Count - 1) - throw new IndexOutOfRangeException("" + value); - - changing = true; - _previousIndex = _selectedIndex; - _selectedIndex = value; - parent.ApplyController(this); - changing = false; - } - } - - /// - /// Set current page by name, no onChanged event. - /// 通过页面名称设置当前活动页面,和selectedPage的区别在于,这个方法不会触发onChanged事件。 - /// - /// Page name - public void SetSelectedPage(string value) - { - int i = _pageNames.IndexOf(value); - if (i == -1) - i = 0; - this.SetSelectedIndex(i); - } - - /// - /// Current page name. - /// 获得当前活动页面名称 - /// - public string selectedPage - { - get - { - if (_selectedIndex == -1) - return null; - else - return _pageNames[_selectedIndex]; - } - set - { - int i = _pageNames.IndexOf(value); - if (i == -1) - i = 0; - this.selectedIndex = i; - } - } - - [Obsolete("Use previousIndex")] - public int previsousIndex - { - get { return _previousIndex; } - } - - /// - /// Previouse page index. - /// 获得上次活动页面索引 - /// - public int previousIndex - { - get { return _previousIndex; } - } - - /// - /// Previous page name. - /// 获得上次活动页面名称。 - /// - public string previousPage - { - get - { - if (_previousIndex == -1) - return null; - else - return _pageNames[_previousIndex]; - } - } - - /// - /// Page count of this controller. - /// 获得页面数量。 - /// - public int pageCount - { - get { return _pageIds.Count; } - } - - /// - /// Get page name by an index. - /// 通过页面索引获得页面名称。 - /// - /// Page index - /// Page Name - public string GetPageName(int index) - { - return _pageNames[index]; - } - - /// - /// Get page id by an index. - /// 通过页面索引获得页面id。 - /// - /// Page index - /// Page Id - public string GetPageId(int index) - { - return _pageIds[index]; - } - - /// - /// Get page id by name - /// - /// - /// - public string GetPageIdByName(string aName) - { - int i = _pageNames.IndexOf(aName); - if (i != -1) - return _pageIds[i]; - else - return null; - } - - /// - /// Add a new page to this controller. - /// - /// Page name - public void AddPage(string name) - { - if (name == null) - name = string.Empty; - - AddPageAt(name, _pageIds.Count); - } - - /// - /// Add a new page to this controller at a certain index. - /// - /// Page name - /// Insert position - public void AddPageAt(string name, int index) - { - string nid = "_" + (_nextPageId++); - if (index == _pageIds.Count) - { - _pageIds.Add(nid); - _pageNames.Add(name); - } - else - { - _pageIds.Insert(index, nid); - _pageNames.Insert(index, name); - } - } - - /// - /// Remove a page. - /// - /// Page name - public void RemovePage(string name) - { - int i = _pageNames.IndexOf(name); - if (i != -1) - { - _pageIds.RemoveAt(i); - _pageNames.RemoveAt(i); - if (_selectedIndex >= _pageIds.Count) - this.selectedIndex = _selectedIndex - 1; - else - parent.ApplyController(this); - } - } - - /// - /// Removes a page at a certain index. - /// - /// - public void RemovePageAt(int index) - { - _pageIds.RemoveAt(index); - _pageNames.RemoveAt(index); - if (_selectedIndex >= _pageIds.Count) - this.selectedIndex = _selectedIndex - 1; - else - parent.ApplyController(this); - } - - /// - /// Remove all pages. - /// - public void ClearPages() - { - _pageIds.Clear(); - _pageNames.Clear(); - if (_selectedIndex != -1) - this.selectedIndex = -1; - else - parent.ApplyController(this); - } - - /// - /// Check if the controller has a page. - /// - /// Page name. - /// - public bool HasPage(string aName) - { - return _pageNames.IndexOf(aName) != -1; - } - - internal int GetPageIndexById(string aId) - { - return _pageIds.IndexOf(aId); - } - - internal string GetPageNameById(string aId) - { - int i = _pageIds.IndexOf(aId); - if (i != -1) - return _pageNames[i]; - else - return null; - } - - internal string selectedPageId - { - get - { - if (_selectedIndex == -1) - return string.Empty; - else - return _pageIds[_selectedIndex]; - } - set - { - int i = _pageIds.IndexOf(value); - if (i != -1) - this.selectedIndex = i; - } - } - - internal string oppositePageId - { - set - { - int i = _pageIds.IndexOf(value); - if (i > 0) - this.selectedIndex = 0; - else if (_pageIds.Count > 1) - this.selectedIndex = 1; - } - } - - internal string previousPageId - { - get - { - if (_previousIndex == -1) - return null; - else - return _pageIds[_previousIndex]; - } - } - - public void RunActions() - { - if (_actions != null) - { - int cnt = _actions.Count; - for (int i = 0; i < cnt; i++) - { - _actions[i].Run(this, previousPageId, selectedPageId); - } - } - } - - public void Setup(ByteBuffer buffer) - { - int beginPos = buffer.position; - buffer.Seek(beginPos, 0); - - name = buffer.ReadS(); - autoRadioGroupDepth = buffer.ReadBool(); - - buffer.Seek(beginPos, 1); - - int cnt = buffer.ReadShort(); - _pageIds.Capacity = cnt; - _pageNames.Capacity = cnt; - for (int i = 0; i < cnt; i++) - { - _pageIds.Add(buffer.ReadS()); - _pageNames.Add(buffer.ReadS()); - } - - int homePageIndex = 0; - if (buffer.version >= 2) - { - int homePageType = buffer.ReadByte(); - switch (homePageType) - { - case 1: - homePageIndex = buffer.ReadShort(); - break; - - case 2: - homePageIndex = _pageNames.IndexOf(UIPackage.branch); - if (homePageIndex == -1) - homePageIndex = 0; - break; - - case 3: - homePageIndex = _pageNames.IndexOf(UIPackage.GetVar(buffer.ReadS())); - if (homePageIndex == -1) - homePageIndex = 0; - break; - } - } - - buffer.Seek(beginPos, 2); - - cnt = buffer.ReadShort(); - if (cnt > 0) - { - if (_actions == null) - _actions = new List(cnt); - - for (int i = 0; i < cnt; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - ControllerAction action = ControllerAction.CreateAction((ControllerAction.ActionType)buffer.ReadByte()); - action.Setup(buffer); - _actions.Add(action); - - buffer.position = nextPos; - } - } - - if (parent != null && _pageIds.Count > 0) - _selectedIndex = homePageIndex; - else - _selectedIndex = -1; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs.meta deleted file mode 100644 index ed84d14..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7a032426f9564db4a95c1c5a513bcd12 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs b/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs deleted file mode 100644 index 2d4c00a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// Helper for drag and drop. - /// 这是一个提供特殊拖放功能的功能类。与GObject.draggable不同,拖动开始后,他使用一个替代的图标作为拖动对象。 - /// 当玩家释放鼠标/手指,目标组件会发出一个onDrop事件。 - /// - public class DragDropManager - { - private GLoader _agent; - private object _sourceData; - private GObject _source; - - private static DragDropManager _inst; - public static DragDropManager inst - { - get - { - if (_inst == null) - _inst = new DragDropManager(); - return _inst; - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - _inst = null; - } -#endif - public DragDropManager() - { - _agent = (GLoader)UIObjectFactory.NewObject(ObjectType.Loader); - _agent.gameObjectName = "DragDropAgent"; - _agent.SetHome(GRoot.inst); - _agent.touchable = false;//important - _agent.draggable = true; - _agent.SetSize(100, 100); - _agent.SetPivot(0.5f, 0.5f, true); - _agent.align = AlignType.Center; - _agent.verticalAlign = VertAlignType.Middle; - _agent.sortingOrder = int.MaxValue; - _agent.onDragEnd.Add(__dragEnd); - } - - /// - /// Loader object for real dragging. - /// 用于实际拖动的Loader对象。你可以根据实际情况设置loader的大小,对齐等。 - /// - public GLoader dragAgent - { - get { return _agent; } - } - - /// - /// Is dragging? - /// 返回当前是否正在拖动。 - /// - public bool dragging - { - get { return _agent.parent != null; } - } - - /// - /// Start dragging. - /// 开始拖动。 - /// - /// Source object. This is the object which initiated the dragging. - /// Icon to be used as the dragging sign. - /// Custom data. You can get it in the onDrop event data. - /// Copy the touchId from InputEvent to here, if has one. - public void StartDrag(GObject source, string icon, object sourceData, int touchPointID = -1) - { - if (_agent.parent != null) - return; - - _sourceData = sourceData; - _source = source; - _agent.url = icon; - GRoot.inst.AddChild(_agent); - _agent.xy = GRoot.inst.GlobalToLocal(Stage.inst.GetTouchPosition(touchPointID)); - _agent.StartDrag(touchPointID); - } - - /// - /// Cancel dragging. - /// 取消拖动。 - /// - public void Cancel() - { - if (_agent.parent != null) - { - _agent.StopDrag(); - GRoot.inst.RemoveChild(_agent); - _sourceData = null; - } - } - - private void __dragEnd(EventContext evt) - { - if (_agent.parent == null) //cancelled - return; - - GRoot.inst.RemoveChild(_agent); - - object sourceData = _sourceData; - GObject source = _source; - _sourceData = null; - _source = null; - - GObject obj = GRoot.inst.touchTarget; - while (obj != null) - { - if (obj.hasEventListeners("onDrop")) - { - obj.RequestFocus(); - obj.DispatchEvent("onDrop", sourceData, source); - return; - } - obj = obj.parent; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs.meta deleted file mode 100644 index d09fa30..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: fb013a6e64663c34694529d92a620777 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs b/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs deleted file mode 100644 index 18a7ce2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public interface EMRenderTarget - { - int EM_sortingOrder { get; } - - void EM_BeforeUpdate(); - void EM_Update(UpdateContext context); - void EM_Reload(); - } - - /// - /// 这是一个在编辑状态下渲染UI的功能类。EM=Edit Mode - /// - public class EMRenderSupport - { - /// - /// - /// - public static bool orderChanged; - - static UpdateContext _updateContext; - static List _targets = new List(); - - /// - /// - /// - public static bool packageListReady { get; private set; } - - /// - /// - /// - public static bool hasTarget - { - get { return _targets.Count > 0; } - } - - /// - /// - /// - /// - public static void Add(EMRenderTarget value) - { - if (!_targets.Contains(value)) - _targets.Add(value); - orderChanged = true; - } - - /// - /// - /// - /// - public static void Remove(EMRenderTarget value) - { - _targets.Remove(value); - } - - /// - /// 由StageCamera调用 - /// - public static void Update() - { - if (Application.isPlaying) - return; - - if (_updateContext == null) - _updateContext = new UpdateContext(); - - if (orderChanged) - { - _targets.Sort(CompareDepth); - orderChanged = false; - } - - int cnt = _targets.Count; - for (int i = 0; i < cnt; i++) - { - EMRenderTarget panel = _targets[i]; - panel.EM_BeforeUpdate(); - } - - if (packageListReady) - { - _updateContext.Begin(); - for (int i = 0; i < cnt; i++) - { - EMRenderTarget panel = _targets[i]; - panel.EM_Update(_updateContext); - } - _updateContext.End(); - } - } - - /// - /// 当发生二进制重载时,或用户点击刷新菜单 - /// - public static void Reload() - { - if (Application.isPlaying) - return; - - UIConfig.ClearResourceRefs(); -#if UNITY_2023_2_OR_NEWER - UIConfig[] configs = GameObject.FindObjectsByType(FindObjectsSortMode.None); -#else - UIConfig[] configs = GameObject.FindObjectsOfType(); -#endif - foreach (UIConfig config in configs) - config.Load(); - - packageListReady = true; - - int cnt = _targets.Count; - for (int i = 0; i < cnt; i++) - { - EMRenderTarget panel = _targets[i]; - panel.EM_Reload(); - } - } - - static int CompareDepth(EMRenderTarget c1, EMRenderTarget c2) - { - return c1.EM_sortingOrder - c2.EM_sortingOrder; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs.meta deleted file mode 100644 index f0cb7ec..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0ea7d5d9d5c232d4f9a312870329cbd2 -timeCreated: 1464535178 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs b/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs deleted file mode 100644 index 629a44e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs +++ /dev/null @@ -1,304 +0,0 @@ -namespace FairyGUI -{ - public enum PackageItemType - { - Image, - MovieClip, - Sound, - Component, - Atlas, - Font, - Swf, - Misc, - Unknown, - Spine, - DragoneBones - } - - public enum ObjectType - { - Image, - MovieClip, - Swf, - Graph, - Loader, - Group, - Text, - RichText, - InputText, - Component, - List, - Label, - Button, - ComboBox, - ProgressBar, - Slider, - ScrollBar, - Tree, - Loader3D - } - - public enum AlignType - { - Left, - Center, - Right - } - - public enum VertAlignType - { - Top, - Middle, - Bottom - } - - public enum OverflowType - { - Visible, - Hidden, - Scroll - } - - public enum FillType - { - None, - Scale, - ScaleMatchHeight, - ScaleMatchWidth, - ScaleFree, - ScaleNoBorder - } - - public enum AutoSizeType - { - None, - Both, - Height, - Shrink, - Ellipsis - } - - public enum ScrollType - { - Horizontal, - Vertical, - Both - } - - public enum ScrollBarDisplayType - { - Default, - Visible, - Auto, - Hidden - } - - public enum RelationType - { - Left_Left, - Left_Center, - Left_Right, - Center_Center, - Right_Left, - Right_Center, - Right_Right, - - Top_Top, - Top_Middle, - Top_Bottom, - Middle_Middle, - Bottom_Top, - Bottom_Middle, - Bottom_Bottom, - - Width, - Height, - - LeftExt_Left, - LeftExt_Right, - RightExt_Left, - RightExt_Right, - TopExt_Top, - TopExt_Bottom, - BottomExt_Top, - BottomExt_Bottom, - - Size - } - - public enum ListLayoutType - { - SingleColumn, - SingleRow, - FlowHorizontal, - FlowVertical, - Pagination - } - - public enum ListSelectionMode - { - Single, - Multiple, - Multiple_SingleClick, - None - } - - public enum ProgressTitleType - { - Percent, - ValueAndMax, - Value, - Max - } - - public enum ButtonMode - { - Common, - Check, - Radio - } - - public enum TransitionActionType - { - XY, - Size, - Scale, - Pivot, - Alpha, - Rotation, - Color, - Animation, - Visible, - Sound, - Transition, - Shake, - ColorFilter, - Skew, - Text, - Icon, - Unknown - } - - public enum GroupLayoutType - { - None, - Horizontal, - Vertical - } - - public enum ChildrenRenderOrder - { - Ascent, - Descent, - Arch, - } - - public enum PopupDirection - { - Auto, - Up, - Down - } - - /// - /// - /// - public enum FlipType - { - None, - Horizontal, - Vertical, - Both - } - - /// - /// - /// - public enum FillMethod - { - None = 0, - - /// - /// The Image will be filled Horizontally - /// - Horizontal = 1, - - /// - /// The Image will be filled Vertically. - /// - Vertical = 2, - - /// - /// The Image will be filled Radially with the radial center in one of the corners. - /// - Radial90 = 3, - - /// - /// The Image will be filled Radially with the radial center in one of the edges. - /// - Radial180 = 4, - - /// - /// The Image will be filled Radially with the radial center at the center. - /// - Radial360 = 5, - } - - /// - /// - /// - public enum OriginHorizontal - { - Left, - Right, - } - - /// - /// - /// - public enum OriginVertical - { - Top, - Bottom - } - - /// - /// - /// - public enum Origin90 - { - TopLeft, - TopRight, - BottomLeft, - BottomRight - } - - /// - /// - /// - public enum Origin180 - { - Top, - Bottom, - Left, - Right - } - - /// - /// - /// - public enum Origin360 - { - Top, - Bottom, - Left, - Right - } - - public enum FocusRule - { - NotFocusable, - Focusable, - NavigationBase - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs.meta deleted file mode 100644 index f04e809..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 1d03a824e0fdd8a48a0ad6173b4593e0 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs deleted file mode 100644 index 1401912..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs +++ /dev/null @@ -1,657 +0,0 @@ -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GButton class. - /// - public class GButton : GComponent, IColorGear - { - /// - /// Play sound when button is clicked. - /// - public NAudioClip sound; - - /// - /// Volume of the click sound. (0-1) - /// - public float soundVolumeScale; - - /// - /// For radio or checkbox. if false, the button will not change selected status on click. Default is true. - /// 如果为true,对于单选和多选按钮,当玩家点击时,按钮会自动切换状态。设置为false,则不会。默认为true。 - /// - public bool changeStateOnClick; - - /// - /// Show a popup on click. - /// 可以为按钮设置一个关联的组件,当按钮被点击时,此组件被自动弹出。 - /// - public GObject linkedPopup; - - protected GObject _titleObject; - protected GObject _iconObject; - protected Controller _relatedController; - protected string _relatedPageId; - - ButtonMode _mode; - bool _selected; - string _title; - string _icon; - string _selectedTitle; - string _selectedIcon; - Controller _buttonController; - int _downEffect; - float _downEffectValue; - bool _downScaled; - - bool _down; - bool _over; - - EventListener _onChanged; - - public const string UP = "up"; - public const string DOWN = "down"; - public const string OVER = "over"; - public const string SELECTED_OVER = "selectedOver"; - public const string DISABLED = "disabled"; - public const string SELECTED_DISABLED = "selectedDisabled"; - - public GButton() - { - sound = UIConfig.buttonSound; - soundVolumeScale = UIConfig.buttonSoundVolumeScale; - changeStateOnClick = true; - _downEffectValue = 0.8f; - _title = string.Empty; - } - - /// - /// Dispatched when the button status was changed. - /// 如果为单选或多选按钮,当按钮的选中状态发生改变时,此事件触发。 - /// - public EventListener onChanged - { - get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } - } - - /// - /// Icon of the button. - /// - override public string icon - { - get - { - return _icon; - } - set - { - _icon = value; - value = (_selected && _selectedIcon != null) ? _selectedIcon : _icon; - if (_iconObject != null) - _iconObject.icon = value; - UpdateGear(7); - } - } - - /// - /// Title of the button - /// - public string title - { - get - { - return _title; - } - set - { - _title = value; - if (_titleObject != null) - _titleObject.text = (_selected && _selectedTitle != null) ? _selectedTitle : _title; - UpdateGear(6); - } - } - - /// - /// Same of the title. - /// - override public string text - { - get { return this.title; } - set { this.title = value; } - } - - /// - /// Icon value on selected status. - /// - public string selectedIcon - { - get - { - return _selectedIcon; - } - set - { - _selectedIcon = value; - value = (_selected && _selectedIcon != null) ? _selectedIcon : _icon; - if (_iconObject != null) - _iconObject.icon = value; - } - } - - /// - /// Title value on selected status. - /// - public string selectedTitle - { - get - { - return _selectedTitle; - } - set - { - _selectedTitle = value; - if (_titleObject != null) - _titleObject.text = (_selected && _selectedTitle != null) ? _selectedTitle : _title; - } - } - - /// - /// Title color. - /// - public Color titleColor - { - get - { - GTextField tf = GetTextField(); - if (tf != null) - return tf.color; - else - return Color.black; - } - set - { - GTextField tf = GetTextField(); - if (tf != null) - { - tf.color = value; - UpdateGear(4); - } - } - } - - /// - /// - /// - public Color color - { - get { return this.titleColor; } - set { this.titleColor = value; } - } - - /// - /// - /// - public int titleFontSize - { - get - { - GTextField tf = GetTextField(); - if (tf != null) - return tf.textFormat.size; - else - return 0; - } - set - { - GTextField tf = GetTextField(); - if (tf != null) - { - TextFormat format = tf.textFormat; - format.size = value; - tf.textFormat = format; - } - } - } - - /// - /// If the button is in selected status. - /// - public bool selected - { - get - { - return _selected; - } - - set - { - if (_mode == ButtonMode.Common) - return; - - if (_selected != value) - { - _selected = value; - SetCurrentState(); - if (_selectedTitle != null && _titleObject != null) - _titleObject.text = _selected ? _selectedTitle : _title; - if (_selectedIcon != null) - { - string str = _selected ? _selectedIcon : _icon; - if (_iconObject != null) - _iconObject.icon = str; - } - if (_relatedController != null - && parent != null - && !parent._buildingDisplayList) - { - if (_selected) - { - _relatedController.selectedPageId = _relatedPageId; - if (_relatedController.autoRadioGroupDepth) - parent.AdjustRadioGroupDepth(this, _relatedController); - } - else if (_mode == ButtonMode.Check && _relatedController.selectedPageId == _relatedPageId) - _relatedController.oppositePageId = _relatedPageId; - } - } - - } - } - - /// - /// Button mode. - /// - /// - public ButtonMode mode - { - get - { - return _mode; - } - set - { - if (_mode != value) - { - if (value == ButtonMode.Common) - this.selected = false; - _mode = value; - } - } - } - - /// - /// A controller is connected to this button, the activate page of this controller will change while the button status changed. - /// 对应编辑器中的单选控制器。 - /// - public Controller relatedController - { - get - { - return _relatedController; - } - set - { - if (value != _relatedController) - { - _relatedController = value; - _relatedPageId = null; - } - } - } - - /// - /// - /// - public string relatedPageId - { - get - { - return _relatedPageId; - } - set - { - _relatedPageId = value; - } - } - - /// - /// Simulates a click on this button. - /// 模拟点击这个按钮。 - /// - /// If the down effect will simulate too. - public void FireClick(bool downEffect, bool clickCall = false) - { - if (downEffect && _mode == ButtonMode.Common) - { - SetState(OVER); - - Timers.inst.Add(0.1f, 1, (object param) => { SetState(DOWN); }); - Timers.inst.Add(0.2f, 1, - (object param) => - { - SetState(UP); - if (clickCall) - { - onClick.Call(); - } - } - ); - } - else - { - if (clickCall) - { - onClick.Call(); - } - } - __click(); - } - - /// - /// - /// - /// - public GTextField GetTextField() - { - if (_titleObject is GTextField) - return (GTextField)_titleObject; - else if (_titleObject is GLabel) - return ((GLabel)_titleObject).GetTextField(); - else if (_titleObject is GButton) - return ((GButton)_titleObject).GetTextField(); - else - return null; - } - - protected void SetState(string val) - { - if (_buttonController != null) - _buttonController.selectedPage = val; - - if (_downEffect == 1) - { - int cnt = this.numChildren; - if (val == DOWN || val == SELECTED_OVER || val == SELECTED_DISABLED) - { - Color color = new Color(_downEffectValue, _downEffectValue, _downEffectValue); - for (int i = 0; i < cnt; i++) - { - GObject obj = this.GetChildAt(i); - if ((obj is IColorGear) && !(obj is GTextField)) - ((IColorGear)obj).color = color; - } - } - else - { - for (int i = 0; i < cnt; i++) - { - GObject obj = this.GetChildAt(i); - if ((obj is IColorGear) && !(obj is GTextField)) - ((IColorGear)obj).color = Color.white; - } - } - } - else if (_downEffect == 2) - { - if (val == DOWN || val == SELECTED_OVER || val == SELECTED_DISABLED) - { - if (!_downScaled) - { - _downScaled = true; - SetScale(this.scaleX * _downEffectValue, this.scaleY * _downEffectValue); - } - } - else - { - if (_downScaled) - { - _downScaled = false; - SetScale(this.scaleX / _downEffectValue, this.scaleY / _downEffectValue); - } - } - } - } - - protected void SetCurrentState() - { - if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED)) - { - if (_selected) - SetState(SELECTED_DISABLED); - else - SetState(DISABLED); - } - else - { - if (_selected) - SetState(_over ? SELECTED_OVER : DOWN); - else - SetState(_over ? OVER : UP); - } - } - - override public void HandleControllerChanged(Controller c) - { - base.HandleControllerChanged(c); - - if (_relatedController == c) - this.selected = _relatedPageId == c.selectedPageId; - } - - override protected void HandleGrayedChanged() - { - if (_buttonController != null && _buttonController.HasPage(DISABLED)) - { - if (this.grayed) - { - if (_selected) - SetState(SELECTED_DISABLED); - else - SetState(DISABLED); - } - else - { - if (_selected) - SetState(DOWN); - else - SetState(UP); - } - } - else - base.HandleGrayedChanged(); - } - - override protected void ConstructExtension(ByteBuffer buffer) - { - buffer.Seek(0, 6); - - _mode = (ButtonMode)buffer.ReadByte(); - string str = buffer.ReadS(); - if (str != null) - sound = UIPackage.GetItemAssetByURL(str) as NAudioClip; - soundVolumeScale = buffer.ReadFloat(); - _downEffect = buffer.ReadByte(); - _downEffectValue = buffer.ReadFloat(); - if (_downEffect == 2) - SetPivot(0.5f, 0.5f, this.pivotAsAnchor); - - _buttonController = GetController("button"); - _titleObject = GetChild("title"); - _iconObject = GetChild("icon"); - if (_titleObject != null) - _title = _titleObject.text; - if (_iconObject != null) - _icon = _iconObject.icon; - - if (_mode == ButtonMode.Common) - SetState(UP); - - displayObject.onRollOver.Add(__rollover); - displayObject.onRollOut.Add(__rollout); - displayObject.onTouchBegin.Add(__touchBegin); - displayObject.onTouchEnd.Add(__touchEnd); - displayObject.onRemovedFromStage.Add(__removedFromStage); - displayObject.onClick.Add(__click); - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - if (!buffer.Seek(beginPos, 6)) - return; - - if ((ObjectType)buffer.ReadByte() != packageItem.objectType) - return; - - string str; - - str = buffer.ReadS(); - if (str != null) - this.title = str; - str = buffer.ReadS(); - if (str != null) - this.selectedTitle = str; - str = buffer.ReadS(); - if (str != null) - this.icon = str; - str = buffer.ReadS(); - if (str != null) - this.selectedIcon = str; - if (buffer.ReadBool()) - this.titleColor = buffer.ReadColor(); - int iv = buffer.ReadInt(); - if (iv != 0) - this.titleFontSize = iv; - iv = buffer.ReadShort(); - if (iv >= 0) - _relatedController = parent.GetControllerAt(iv); - _relatedPageId = buffer.ReadS(); - - str = buffer.ReadS(); - if (str != null) - sound = UIPackage.GetItemAssetByURL(str) as NAudioClip; - if (buffer.ReadBool()) - soundVolumeScale = buffer.ReadFloat(); - - this.selected = buffer.ReadBool(); - } - - private void __rollover() - { - if (_buttonController == null || !_buttonController.HasPage(OVER)) - return; - - _over = true; - if (_down) - return; - - if (this.grayed && _buttonController.HasPage(DISABLED)) - return; - - SetState(_selected ? SELECTED_OVER : OVER); - } - - private void __rollout() - { - if (_buttonController == null || !_buttonController.HasPage(OVER)) - return; - - _over = false; - if (_down) - return; - - if (this.grayed && _buttonController.HasPage(DISABLED)) - return; - - SetState(_selected ? DOWN : UP); - } - - private void __touchBegin(EventContext context) - { - if (context.inputEvent.button != 0) - return; - - _down = true; - context.CaptureTouch(); - - if (_mode == ButtonMode.Common) - { - if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED)) - SetState(SELECTED_DISABLED); - else - SetState(DOWN); - } - - if (linkedPopup != null) - { - if (linkedPopup is Window) - ((Window)linkedPopup).ToggleStatus(); - else - this.root.TogglePopup(linkedPopup, this); - } - } - - private void __touchEnd() - { - if (_down) - { - _down = false; - if (_mode == ButtonMode.Common) - { - if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED)) - SetState(DISABLED); - else if (_over) - SetState(OVER); - else - SetState(UP); - } - else - { - if (!_over - && _buttonController != null - && (_buttonController.selectedPage == OVER || _buttonController.selectedPage == SELECTED_OVER)) - { - SetCurrentState(); - } - } - } - } - - private void __removedFromStage() - { - if (_over) - __rollout(); - } - - private void __click() - { - if (sound != null && sound.nativeClip != null) - Stage.inst.PlayOneShotSound(sound.nativeClip, soundVolumeScale); - - if (_mode == ButtonMode.Check) - { - if (changeStateOnClick) - { - this.selected = !_selected; - DispatchEvent("onChanged", null); - } - } - else if (_mode == ButtonMode.Radio) - { - if (changeStateOnClick && !_selected) - { - this.selected = true; - DispatchEvent("onChanged", null); - } - } - else - { - if (_relatedController != null) - _relatedController.selectedPageId = _relatedPageId; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs.meta deleted file mode 100644 index dff56e5..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 4e5e996dd06bc77458af09a2465efb6d -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs deleted file mode 100644 index 40b9fdd..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs +++ /dev/null @@ -1,629 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GComboBox class. - /// - public class GComboBox : GComponent - { - /// - /// Visible item count of the drop down list. - /// - public int visibleItemCount; - - /// - /// - /// - public GComponent dropdown; - - /// - /// Play sound when button is clicked. - /// - public NAudioClip sound; - - /// - /// Volume of the click sound. (0-1) - /// - public float soundVolumeScale; - - protected GObject _titleObject; - protected GObject _iconObject; - protected GList _list; - - protected List _items; - protected List _icons; - protected List _values; - protected PopupDirection _popupDirection; - protected Controller _selectionController; - - bool _itemsUpdated; - int _selectedIndex; - Controller _buttonController; - - bool _down; - bool _over; - - EventListener _onChanged; - - public GComboBox() - { - visibleItemCount = UIConfig.defaultComboBoxVisibleItemCount; - _itemsUpdated = true; - _selectedIndex = -1; - _items = new List(); - _values = new List(); - _popupDirection = PopupDirection.Auto; - soundVolumeScale = 1; - } - - /// - /// Dispatched when selection was changed. - /// - public EventListener onChanged - { - get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } - } - - /// - /// Icon of the combobox. - /// - override public string icon - { - get - { - if (_iconObject != null) - return _iconObject.icon; - else - return null; - } - - set - { - if (_iconObject != null) - _iconObject.icon = value; - UpdateGear(7); - } - } - - /// - /// Title of the combobox. - /// - public string title - { - get - { - if (_titleObject != null) - return _titleObject.text; - else - return null; - } - set - { - if (_titleObject != null) - _titleObject.text = value; - UpdateGear(6); - } - } - - /// - /// Same of the title. - /// - override public string text - { - get { return this.title; } - set { this.title = value; } - } - - /// - /// Text color - /// - public Color titleColor - { - get - { - GTextField tf = GetTextField(); - if (tf != null) - return tf.color; - else - return Color.black; - } - set - { - GTextField tf = GetTextField(); - if (tf != null) - tf.color = value; - } - } - - /// - /// - /// - public int titleFontSize - { - get - { - GTextField tf = GetTextField(); - if (tf != null) - return tf.textFormat.size; - else - return 0; - } - set - { - GTextField tf = GetTextField(); - if (tf != null) - { - TextFormat format = tf.textFormat; - format.size = value; - tf.textFormat = format; - } - } - } - - /// - /// Items to build up drop down list. - /// - public string[] items - { - get - { - return _items.ToArray(); - } - set - { - _items.Clear(); - if (value != null) - _items.AddRange(value); - ApplyListChange(); - } - } - - /// - /// - /// - public string[] icons - { - get { return _icons != null ? _icons.ToArray() : null; } - set - { - this.iconList.Clear(); - if (value != null) - _icons.AddRange(value); - ApplyListChange(); - } - } - - /// - /// Values, should be same size of the items. - /// - public string[] values - { - get { return _values.ToArray(); } - set - { - _values.Clear(); - if (value != null) - _values.AddRange(value); - } - } - - /// - /// - /// - public List itemList - { - get { return _items; } - } - - /// - /// - /// - public List valueList - { - get { return _values; } - } - - /// - /// - /// - public List iconList - { - get { return _icons ?? (_icons = new List()); } - } - - /// - /// Call this method after you made changes on itemList or iconList - /// - public void ApplyListChange() - { - if (_items.Count > 0) - { - if (_selectedIndex >= _items.Count) - _selectedIndex = _items.Count - 1; - else if (_selectedIndex == -1) - _selectedIndex = 0; - - this.text = _items[_selectedIndex]; - if (_icons != null && _selectedIndex < _icons.Count) - this.icon = _icons[_selectedIndex]; - } - else - { - this.text = string.Empty; - if (_icons != null) - this.icon = null; - _selectedIndex = -1; - } - - _itemsUpdated = true; - } - - /// - /// Selected index. - /// - public int selectedIndex - { - get - { - return _selectedIndex; - } - set - { - if (_selectedIndex == value) - return; - - _selectedIndex = value; - if (_selectedIndex >= 0 && _selectedIndex < _items.Count) - { - this.text = (string)_items[_selectedIndex]; - if (_icons != null && _selectedIndex < _icons.Count) - this.icon = _icons[_selectedIndex]; - } - else - { - this.text = string.Empty; - if (_icons != null) - this.icon = null; - } - - UpdateSelectionController(); - } - } - - /// - /// - /// - public Controller selectionController - { - get { return _selectionController; } - set { _selectionController = value; } - } - - /// - /// Selected value. - /// - public string value - { - get - { - if (_selectedIndex >= 0 && _selectedIndex < _values.Count) - return _values[_selectedIndex]; - else - return null; - } - set - { - int index = _values.IndexOf(value); - if (index == -1 && value == null) - index = _values.IndexOf(string.Empty); - if (index == -1) - index = 0; - this.selectedIndex = index; - } - } - - /// - /// - /// - public PopupDirection popupDirection - { - get { return _popupDirection; } - set { _popupDirection = value; } - } - - /// - /// - /// - /// - public GTextField GetTextField() - { - if (_titleObject is GTextField) - return (GTextField)_titleObject; - else if (_titleObject is GLabel) - return ((GLabel)_titleObject).GetTextField(); - else if (_titleObject is GButton) - return ((GButton)_titleObject).GetTextField(); - else - return null; - } - - protected void SetState(string value) - { - if (_buttonController != null) - _buttonController.selectedPage = value; - } - - protected void SetCurrentState() - { - if (this.grayed && _buttonController != null && _buttonController.HasPage(GButton.DISABLED)) - SetState(GButton.DISABLED); - else if (dropdown != null && dropdown.parent != null) - SetState(GButton.DOWN); - else - SetState(_over ? GButton.OVER : GButton.UP); - } - - override protected void HandleGrayedChanged() - { - if (_buttonController != null && _buttonController.HasPage(GButton.DISABLED)) - { - if (this.grayed) - SetState(GButton.DISABLED); - else - SetState(GButton.UP); - } - else - base.HandleGrayedChanged(); - } - - override public void HandleControllerChanged(Controller c) - { - base.HandleControllerChanged(c); - - if (_selectionController == c) - this.selectedIndex = c.selectedIndex; - } - - void UpdateSelectionController() - { - if (_selectionController != null && !_selectionController.changing - && _selectedIndex < _selectionController.pageCount) - { - Controller c = _selectionController; - _selectionController = null; - c.selectedIndex = _selectedIndex; - _selectionController = c; - } - } - - public override void Dispose() - { - if (dropdown != null) - { - dropdown.Dispose(); - dropdown = null; - } - _selectionController = null; - - base.Dispose(); - } - - override protected void ConstructExtension(ByteBuffer buffer) - { - buffer.Seek(0, 6); - - _buttonController = GetController("button"); - _titleObject = GetChild("title"); - _iconObject = GetChild("icon"); - - string str = buffer.ReadS(); - if (str != null) - { - dropdown = UIPackage.CreateObjectFromURL(str) as GComponent; - if (dropdown == null) - { - Debug.LogWarning("FairyGUI: " + this.resourceURL + " should be a component."); - return; - } - - _list = dropdown.GetChild("list") as GList; - if (_list == null) - { - Debug.LogWarning("FairyGUI: " + this.resourceURL + ": should container a list component named list."); - return; - } - _list.onClickItem.Add(__clickItem); - - _list.AddRelation(dropdown, RelationType.Width); - _list.RemoveRelation(dropdown, RelationType.Height); - - dropdown.AddRelation(_list, RelationType.Height); - dropdown.RemoveRelation(_list, RelationType.Width); - - dropdown.SetHome(this); - } - - displayObject.onRollOver.Add(__rollover); - displayObject.onRollOut.Add(__rollout); - displayObject.onTouchBegin.Add(__touchBegin); - displayObject.onTouchEnd.Add(__touchEnd); - displayObject.onClick.Add(__click); - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - if (!buffer.Seek(beginPos, 6)) - return; - - if ((ObjectType)buffer.ReadByte() != packageItem.objectType) - return; - - string str; - int itemCount = buffer.ReadShort(); - for (int i = 0; i < itemCount; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - _items.Add(buffer.ReadS()); - _values.Add(buffer.ReadS()); - str = buffer.ReadS(); - if (str != null) - { - if (_icons == null) - _icons = new List(); - _icons.Add(str); - } - - buffer.position = nextPos; - } - - str = buffer.ReadS(); - if (str != null) - { - this.text = str; - _selectedIndex = _items.IndexOf(str); - } - else if (_items.Count > 0) - { - _selectedIndex = 0; - this.text = _items[0]; - } - else - _selectedIndex = -1; - - str = buffer.ReadS(); - if (str != null) - this.icon = str; - - if (buffer.ReadBool()) - this.titleColor = buffer.ReadColor(); - int iv = buffer.ReadInt(); - if (iv > 0) - visibleItemCount = iv; - _popupDirection = (PopupDirection)buffer.ReadByte(); - - iv = buffer.ReadShort(); - if (iv >= 0) - _selectionController = parent.GetControllerAt(iv); - - if (buffer.version >= 5) - { - str = buffer.ReadS(); - if (str != null) - sound = UIPackage.GetItemAssetByURL(str) as NAudioClip; - soundVolumeScale = buffer.ReadFloat(); - } - } - - public void UpdateDropdownList() - { - if (_itemsUpdated) - { - _itemsUpdated = false; - RenderDropdownList(); - _list.ResizeToFit(visibleItemCount); - } - } - - protected void ShowDropdown() - { - UpdateDropdownList(); - if (_list.selectionMode == ListSelectionMode.Single) - _list.selectedIndex = -1; - dropdown.width = this.width; - _list.EnsureBoundsCorrect(); //avoid flicker - - this.root.TogglePopup(dropdown, this, _popupDirection); - if (dropdown.parent != null) - { - dropdown.displayObject.onRemovedFromStage.Add(__popupWinClosed); - SetState(GButton.DOWN); - } - } - - virtual protected void RenderDropdownList() - { - _list.RemoveChildrenToPool(); - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - { - GObject item = _list.AddItemFromPool(); - item.text = _items[i]; - item.icon = (_icons != null && i < _icons.Count) ? _icons[i] : null; - item.name = i < _values.Count ? _values[i] : string.Empty; - } - } - - private void __popupWinClosed(object obj) - { - dropdown.displayObject.onRemovedFromStage.Remove(__popupWinClosed); - SetCurrentState(); - - RequestFocus(); - } - - private void __clickItem(EventContext context) - { - if (dropdown.parent is GRoot) - ((GRoot)dropdown.parent).HidePopup(dropdown); - _selectedIndex = int.MinValue; - this.selectedIndex = _list.GetChildIndex((GObject)context.data); - - DispatchEvent("onChanged", null); - } - - private void __rollover() - { - _over = true; - if (_down || dropdown != null && dropdown.parent != null) - return; - - SetCurrentState(); - } - - private void __rollout() - { - _over = false; - if (_down || dropdown != null && dropdown.parent != null) - return; - - SetCurrentState(); - } - - private void __touchBegin(EventContext context) - { - if (context.initiator is InputTextField) - return; - - _down = true; - - if (dropdown != null) - ShowDropdown(); - - context.CaptureTouch(); - } - - private void __touchEnd(EventContext context) - { - if (_down) - { - _down = false; - if (dropdown != null && dropdown.parent != null) - SetCurrentState(); - } - } - - private void __click() - { - if (sound != null && sound.nativeClip != null) - Stage.inst.PlayOneShotSound(sound.nativeClip, soundVolumeScale); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs.meta deleted file mode 100644 index c753948..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 65b819211c4a7ec4eb1cf17cda579377 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs deleted file mode 100644 index 8e2158e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs +++ /dev/null @@ -1,1726 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; -#if FAIRYGUI_TOLUA -using LuaInterface; -#endif - -namespace FairyGUI -{ - /// - /// Component - /// - public class GComponent : GObject - { - /// - /// Root container. - /// - public Container rootContainer { get; private set; } - /// - /// Content container. If the component is not clipped, then container==rootContainer. - /// - public Container container { get; protected set; } - /// - /// ScrollPane of the component. If the component is not scrollable, the value is null. - /// - public ScrollPane scrollPane { get; private set; } - - internal List _children; - internal List _controllers; - internal List _transitions; - internal bool _buildingDisplayList; - - protected Margin _margin; - protected bool _trackBounds; - protected bool _boundsChanged; - protected ChildrenRenderOrder _childrenRenderOrder; - protected int _apexIndex; - internal Vector2 _alignOffset; - - Vector2 _clipSoftness; - int _sortingChildCount; - Action _buildDelegate; - Controller _applyingController; - - EventListener _onDrop; - - public GComponent() - { - _children = new List(); - _controllers = new List(); - _transitions = new List(); - _margin = new Margin(); - _buildDelegate = BuildNativeDisplayList; - } - - override protected void CreateDisplayObject() - { - rootContainer = new Container("GComponent"); - rootContainer.gOwner = this; - rootContainer.onUpdate += OnUpdate; - container = rootContainer; - - displayObject = rootContainer; - } - - override public void Dispose() - { - int cnt = _transitions.Count; - for (int i = 0; i < cnt; ++i) - { - Transition trans = _transitions[i]; - trans.Dispose(); - } - - cnt = _controllers.Count; - for (int i = 0; i < cnt; ++i) - { - Controller c = _controllers[i]; - c.Dispose(); - } - - if (scrollPane != null) - scrollPane.Dispose(); - - base.Dispose(); //Dispose native tree first, avoid DisplayObject.RemoveFromParent call - - cnt = _children.Count; - for (int i = cnt - 1; i >= 0; --i) - { - GObject obj = _children[i]; - obj.InternalSetParent(null); //Avoid GObject.RemoveParent call - obj.Dispose(); - } - -#if FAIRYGUI_TOLUA - if (_peerTable != null) - { - _peerTable.Dispose(); - _peerTable = null; - } -#endif - -#if FAIRYGUI_PUERTS - if (__onDispose != null) - __onDispose(); - __onConstruct = null; - __onDispose = null; -#endif - } - - /// - /// Dispatched when an object was dragged and dropped to this component. - /// - public EventListener onDrop - { - get { return _onDrop ?? (_onDrop = new EventListener(this, "onDrop")); } - } - - /// - /// Draw call optimization switch. - /// - public bool fairyBatching - { - get { return rootContainer.fairyBatching; } - set { rootContainer.fairyBatching = value; } - } - - /// - /// - /// - /// - public void InvalidateBatchingState(bool childChanged) - { - if (childChanged) - container.InvalidateBatchingState(childChanged); - else - rootContainer.InvalidateBatchingState(); - } - - /// - /// If true, mouse/touch events cannot pass through the empty area of the component. Default is true. - /// - public bool opaque - { - get { return rootContainer.opaque; } - set { rootContainer.opaque = value; } - } - - /// - /// - /// - /// - public Margin margin - { - get { return _margin; } - set - { - _margin = value; - if (rootContainer.clipRect != null && scrollPane == null) //如果scrollPane不为空,则HandleSizeChanged里面的处理会促使ScrollPane处理 - container.SetXY(_margin.left + _alignOffset.x, _margin.top + _alignOffset.y); - HandleSizeChanged(); - } - } - - /// - /// - /// - public ChildrenRenderOrder childrenRenderOrder - { - get { return _childrenRenderOrder; } - set - { - if (_childrenRenderOrder != value) - { - _childrenRenderOrder = value; - BuildNativeDisplayList(); - } - } - } - - /// - /// - /// - public int apexIndex - { - get { return _apexIndex; } - set - { - if (_apexIndex != value) - { - _apexIndex = value; - - if (_childrenRenderOrder == ChildrenRenderOrder.Arch) - BuildNativeDisplayList(); - } - } - } - - /// - /// If true, children can be navigated by TAB from first to last, and repeat - /// - public bool tabStopChildren - { - get { return rootContainer.tabStopChildren; } - set { rootContainer.tabStopChildren = value; } - } - - /// - /// Add a child to the component. It will be at the frontmost position. - /// - /// A child object - /// GObject - public GObject AddChild(GObject child) - { - AddChildAt(child, _children.Count); - return child; - } - - /// - /// Adds a child to the component at a certain index. - /// - /// A child object - /// Index - /// GObject - virtual public GObject AddChildAt(GObject child, int index) - { - if (index >= 0 && index <= _children.Count) - { - if (child.parent == this) - { - SetChildIndex(child, index); - } - else - { - child.RemoveFromParent(); - child.InternalSetParent(this); - - int cnt = _children.Count; - if (child.sortingOrder != 0) - { - _sortingChildCount++; - index = GetInsertPosForSortingChild(child); - } - else if (_sortingChildCount > 0) - { - if (index > (cnt - _sortingChildCount)) - index = cnt - _sortingChildCount; - } - - if (index == cnt) - _children.Add(child); - else - _children.Insert(index, child); - - ChildStateChanged(child); - SetBoundsChangedFlag(); - } - return child; - } - else - { - throw new Exception("Invalid child index: " + index + ">" + _children.Count); - } - } - - int GetInsertPosForSortingChild(GObject target) - { - int cnt = _children.Count; - int i; - for (i = 0; i < cnt; i++) - { - GObject child = _children[i]; - if (child == target) - continue; - - if (target.sortingOrder < child.sortingOrder) - break; - } - return i; - } - - /// - /// Removes a child from the component. If the object is not a child, nothing happens. - /// - /// A child object - /// GObject - public GObject RemoveChild(GObject child) - { - return RemoveChild(child, false); - } - - /// - /// Removes a child from the component. If the object is not a child, nothing happens. - /// - /// A child object - /// If true, the child will be disposed right away. - /// GObject - public GObject RemoveChild(GObject child, bool dispose) - { - int childIndex = _children.IndexOf(child); - if (childIndex != -1) - { - RemoveChildAt(childIndex, dispose); - } - return child; - } - - /// - /// Removes a child at a certain index. Children above the child will move down. - /// - /// Index - /// GObject - public GObject RemoveChildAt(int index) - { - return RemoveChildAt(index, false); - } - - /// - /// Removes a child at a certain index. Children above the child will move down. - /// - /// Index - /// If true, the child will be disposed right away. - /// GObject - virtual public GObject RemoveChildAt(int index, bool dispose) - { - if (index >= 0 && index < numChildren) - { - GObject child = _children[index]; - - child.InternalSetParent(null); - - if (child.sortingOrder != 0) - _sortingChildCount--; - - _children.RemoveAt(index); - child.group = null; - if (child.inContainer) - { - container.RemoveChild(child.displayObject); - if (_childrenRenderOrder == ChildrenRenderOrder.Arch) - { - UpdateContext.OnBegin -= _buildDelegate; - UpdateContext.OnBegin += _buildDelegate; - } - } - - if (dispose) - child.Dispose(); - - SetBoundsChangedFlag(); - return child; - } - else - throw new Exception("Invalid child index: " + index + ">" + numChildren); - } - - /// - /// Remove all children. - /// - public void RemoveChildren() - { - RemoveChildren(0, -1, false); - } - - /// - /// Removes a range of children from the container (endIndex included). - /// - /// Begin index. - /// End index.(Included). - /// If true, the child will be disposed right away. - public void RemoveChildren(int beginIndex, int endIndex, bool dispose) - { - if (endIndex < 0 || endIndex >= numChildren) - endIndex = numChildren - 1; - - for (int i = beginIndex; i <= endIndex; ++i) - RemoveChildAt(beginIndex, dispose); - } - - /// - /// Returns a child object at a certain index. If index out of bounds, exception raised. - /// - /// Index - /// A child object. - public GObject GetChildAt(int index) - { - if (index >= 0 && index < numChildren) - return _children[index]; - else - throw new Exception("Invalid child index: " + index + ">" + numChildren); - } - - /// - /// Returns a child object with a certain name. - /// - /// Name - /// A child object. Null if not found. - public GObject GetChild(string name) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - if (_children[i].name == name) - return _children[i]; - } - - return null; - } - - public GObject GetChildByPath(string path) - { - string[] arr = path.Split('.'); - int cnt = arr.Length; - GComponent gcom = this; - GObject obj = null; - for (int i = 0; i < cnt; ++i) - { - obj = gcom.GetChild(arr[i]); - if (obj == null) - break; - - if (i != cnt - 1) - { - if (!(obj is GComponent)) - { - obj = null; - break; - } - else - gcom = (GComponent)obj; - } - } - - return obj; - } - - /// - /// Returns a visible child object with a certain name. - /// - /// Name - /// A child object. Null if not found. - public GObject GetVisibleChild(string name) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - GObject child = _children[i]; - if (child.internalVisible && child.internalVisible2 && child.name == name) - return child; - } - - return null; - } - - /// - /// Returns a child object belong to a group with a certain name. - /// - /// A group object - /// Name - /// A child object. Null if not found. - public GObject GetChildInGroup(GGroup group, string name) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - GObject child = _children[i]; - if (child.group == group && child.name == name) - return child; - } - - return null; - } - - internal GObject GetChildById(string id) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - if (_children[i].id == id) - return _children[i]; - } - - return null; - } - - /// - /// Returns a copy of all children with an array. - /// - /// An array contains all children - public GObject[] GetChildren() - { - return _children.ToArray(); - } - - /// - /// Returns the index of a child within the container, or "-1" if it is not found. - /// - /// A child object - /// Index of the child. -1 If not found. - public int GetChildIndex(GObject child) - { - return _children.IndexOf(child); - } - - /// - /// Moves a child to a certain index. Children at and after the replaced position move up. - /// - /// A Child - /// Index - public void SetChildIndex(GObject child, int index) - { - int oldIndex = _children.IndexOf(child); - if (oldIndex == -1) - throw new ArgumentException("Not a child of this container"); - - if (child.sortingOrder != 0) //no effect - return; - - if (_sortingChildCount > 0) - { - int cnt = _children.Count; - if (index > (cnt - _sortingChildCount - 1)) - index = cnt - _sortingChildCount - 1; - } - - _SetChildIndex(child, oldIndex, index); - } - - /// - /// Moves a child to a certain position which is in front of the child previously at given index. - /// 与SetChildIndex不同的是,如果child原来在index的前面,那么child插入的位置是index-1,即保证排在原来占据index的对象的前面。 - /// - /// - /// - public int SetChildIndexBefore(GObject child, int index) - { - int oldIndex = _children.IndexOf(child); - if (oldIndex == -1) - throw new ArgumentException("Not a child of this container"); - - if (child.sortingOrder != 0) //no effect - return oldIndex; - - int cnt = _children.Count; - if (_sortingChildCount > 0) - { - if (index > (cnt - _sortingChildCount - 1)) - index = cnt - _sortingChildCount - 1; - } - - if (oldIndex < index) - return _SetChildIndex(child, oldIndex, index - 1); - else - return _SetChildIndex(child, oldIndex, index); - } - - int _SetChildIndex(GObject child, int oldIndex, int index) - { - int cnt = _children.Count; - if (index > cnt) - index = cnt; - - if (oldIndex == index) - return oldIndex; - - _children.RemoveAt(oldIndex); - if (index >= cnt) - _children.Add(child); - else - _children.Insert(index, child); - - if (child.inContainer) - { - int displayIndex = 0; - if (_childrenRenderOrder == ChildrenRenderOrder.Ascent) - { - for (int i = 0; i < index; i++) - { - GObject g = _children[i]; - if (g.inContainer) - displayIndex++; - } - container.SetChildIndex(child.displayObject, displayIndex); - } - else if (_childrenRenderOrder == ChildrenRenderOrder.Descent) - { - for (int i = cnt - 1; i > index; i--) - { - GObject g = _children[i]; - if (g.inContainer) - displayIndex++; - } - container.SetChildIndex(child.displayObject, displayIndex); - } - else - { - UpdateContext.OnBegin -= _buildDelegate; - UpdateContext.OnBegin += _buildDelegate; - } - - SetBoundsChangedFlag(); - } - - return index; - } - - /// - /// Swaps the indexes of two children. - /// - /// A child object - /// A child object - public void SwapChildren(GObject child1, GObject child2) - { - int index1 = _children.IndexOf(child1); - int index2 = _children.IndexOf(child2); - if (index1 == -1 || index2 == -1) - throw new Exception("Not a child of this container"); - SwapChildrenAt(index1, index2); - } - - /// - /// Swaps the indexes of two children. - /// - /// index of first child - /// index of second child - public void SwapChildrenAt(int index1, int index2) - { - GObject child1 = _children[index1]; - GObject child2 = _children[index2]; - - SetChildIndex(child1, index2); - SetChildIndex(child2, index1); - } - - /// - /// The number of children of this component. - /// - public int numChildren - { - get { return _children.Count; } - } - - /// - /// - /// - /// - /// - public bool IsAncestorOf(GObject obj) - { - if (obj == null) - return false; - - GComponent p = obj.parent; - while (p != null) - { - if (p == this) - return true; - - p = p.parent; - } - return false; - } - - - /// - /// - /// - /// - public void ChangeChildrenOrder(IList objs) - { - int cnt = objs.Count; - for (int i = 0; i < cnt; i++) - { - GObject obj = objs[i]; - if (obj.parent != this) - throw new Exception("Not a child of this container"); - - _children[i] = obj; - } - BuildNativeDisplayList(); - SetBoundsChangedFlag(); - } - - /// - /// Adds a controller to the container. - /// - /// Controller object - public void AddController(Controller controller) - { - _controllers.Add(controller); - controller.parent = this; - ApplyController(controller); - } - - /// - /// Returns a controller object at a certain index. - /// - /// Index - /// Controller object. - public Controller GetControllerAt(int index) - { - return _controllers[index]; - } - - /// - /// Returns a controller object with a certain name. - /// - /// Name - /// Controller object. Null if not found. - public Controller GetController(string name) - { - int cnt = _controllers.Count; - for (int i = 0; i < cnt; ++i) - { - Controller c = _controllers[i]; - if (c.name == name) - return c; - } - - return null; - } - - /// - /// Removes a controller from the container. - /// - /// Controller object. - public void RemoveController(Controller c) - { - int index = _controllers.IndexOf(c); - if (index == -1) - throw new Exception("controller not exists: " + c.name); - - c.parent = null; - _controllers.RemoveAt(index); - - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - GObject child = _children[i]; - child.HandleControllerChanged(c); - } - } - - /// - /// Returns controller list. - /// - /// Controller list - public List Controllers - { - get { return _controllers; } - } - - /// - /// Returns a transition object at a certain index. - /// - /// Index - /// transition object. - public Transition GetTransitionAt(int index) - { - return _transitions[index]; - } - - /// - /// Returns a transition object at a certain name. - /// - /// Name - /// Transition Object - public Transition GetTransition(string name) - { - int cnt = _transitions.Count; - for (int i = 0; i < cnt; ++i) - { - Transition trans = _transitions[i]; - if (trans.name == name) - return trans; - } - - return null; - } - - /// - /// Returns transition list. - /// - /// Transition list - public List Transitions - { - get { return _transitions; } - } - - internal void ChildStateChanged(GObject child) - { - if (_buildingDisplayList) - return; - - int cnt = _children.Count; - - if (child is GGroup) - { - for (int i = 0; i < cnt; ++i) - { - GObject g = _children[i]; - if (g.group == child) - ChildStateChanged(g); - } - return; - } - - if (child.displayObject == null) - return; - - if (child.internalVisible) - { - if (child.displayObject.parent == null) - { - if (_childrenRenderOrder == ChildrenRenderOrder.Ascent) - { - int index = 0; - for (int i = 0; i < cnt; i++) - { - GObject g = _children[i]; - if (g == child) - break; - - if (g.displayObject != null && g.displayObject.parent != null) - index++; - } - container.AddChildAt(child.displayObject, index); - } - else if (_childrenRenderOrder == ChildrenRenderOrder.Descent) - { - int index = 0; - for (int i = cnt - 1; i >= 0; i--) - { - GObject g = _children[i]; - if (g == child) - break; - - if (g.displayObject != null && g.displayObject.parent != null) - index++; - } - container.AddChildAt(child.displayObject, index); - } - else - { - container.AddChild(child.displayObject); - - UpdateContext.OnBegin -= _buildDelegate; - UpdateContext.OnBegin += _buildDelegate; - } - } - } - else - { - if (child.displayObject.parent != null) - { - container.RemoveChild(child.displayObject); - if (_childrenRenderOrder == ChildrenRenderOrder.Arch) - { - UpdateContext.OnBegin -= _buildDelegate; - UpdateContext.OnBegin += _buildDelegate; - } - } - } - } - - void BuildNativeDisplayList() - { - if (displayObject == null || displayObject.isDisposed) - return; - - int cnt = _children.Count; - if (cnt == 0) - return; - - switch (_childrenRenderOrder) - { - case ChildrenRenderOrder.Ascent: - { - for (int i = 0; i < cnt; i++) - { - GObject child = _children[i]; - if (child.displayObject != null && child.internalVisible) - container.AddChild(child.displayObject); - } - } - break; - case ChildrenRenderOrder.Descent: - { - for (int i = cnt - 1; i >= 0; i--) - { - GObject child = _children[i]; - if (child.displayObject != null && child.internalVisible) - container.AddChild(child.displayObject); - } - } - break; - - case ChildrenRenderOrder.Arch: - { - int apex = Mathf.Clamp(_apexIndex, 0, cnt); - for (int i = 0; i < apex; i++) - { - GObject child = _children[i]; - if (child.displayObject != null && child.internalVisible) - container.AddChild(child.displayObject); - } - for (int i = cnt - 1; i >= apex; i--) - { - GObject child = _children[i]; - if (child.displayObject != null && child.internalVisible) - container.AddChild(child.displayObject); - } - } - break; - } - } - - internal void ApplyController(Controller c) - { - _applyingController = c; - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - GObject child = _children[i]; - child.HandleControllerChanged(c); - } - _applyingController = null; - - c.RunActions(); - } - - void ApplyAllControllers() - { - int cnt = _controllers.Count; - for (int i = 0; i < cnt; ++i) - { - Controller controller = _controllers[i]; - ApplyController(controller); - } - } - - internal void AdjustRadioGroupDepth(GObject obj, Controller c) - { - int cnt = _children.Count; - int i; - GObject child; - int myIndex = -1, maxIndex = -1; - for (i = 0; i < cnt; i++) - { - child = _children[i]; - if (child == obj) - { - myIndex = i; - } - else if ((child is GButton) - && ((GButton)child).relatedController == c) - { - if (i > maxIndex) - maxIndex = i; - } - } - if (myIndex < maxIndex) - { - if (_applyingController != null) - _children[maxIndex].HandleControllerChanged(_applyingController); - this.SwapChildrenAt(myIndex, maxIndex); - } - } - - /// - /// If clipping softness is set, clipped containers will have soft border effect. - /// - public Vector2 clipSoftness - { - get { return _clipSoftness; } - set - { - _clipSoftness = value; - if (scrollPane != null) - scrollPane.UpdateClipSoft(); - else if (_clipSoftness.x > 0 || _clipSoftness.y > 0) - rootContainer.clipSoftness = new Vector4(value.x, value.y, value.x, value.y); - else - rootContainer.clipSoftness = null; - } - } - - /// - /// The mask of the component. - /// - public DisplayObject mask - { - get { return container.mask; } - set - { - container.mask = value; - if (value != null && value.parent != container) - container.AddChild(value); - } - } - - /// - /// - /// - public bool reversedMask - { - get { return container.reversedMask; } - set { container.reversedMask = value; } - } - - /// - /// - /// - public string baseUserData - { - get - { - ByteBuffer buffer = packageItem.rawData; - buffer.Seek(0, 4); - return buffer.ReadS(); - } - } - - /// - /// Test if a child is in view. - /// - /// A child object - /// True if in view - public bool IsChildInView(GObject child) - { - if (scrollPane != null) - { - return scrollPane.IsChildInView(child); - } - else if (rootContainer.clipRect != null) - { - return child.x + child.width >= 0 && child.x <= this.width - && child.y + child.height >= 0 && child.y <= this.height; - } - else - return true; - } - - virtual public int GetFirstChildInView() - { - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - GObject child = _children[i]; - if (IsChildInView(child)) - return i; - } - return -1; - } - - protected void SetupScroll(ByteBuffer buffer) - { - if (rootContainer == container) - { - container = new Container(); - rootContainer.AddChild(container); - } - - scrollPane = new ScrollPane(this); - scrollPane.Setup(buffer); - } - - protected void SetupOverflow(OverflowType overflow) - { - if (overflow == OverflowType.Hidden) - { - if (rootContainer == container) - { - container = new Container(); - rootContainer.AddChild(container); - } - - UpdateClipRect(); - container.SetXY(_margin.left, _margin.top); - } - else if (_margin.left != 0 || _margin.top != 0) - { - if (rootContainer == container) - { - container = new Container(); - rootContainer.AddChild(container); - } - - container.SetXY(_margin.left, _margin.top); - } - } - - void UpdateClipRect() - { - if (scrollPane == null) - { - float w = this.width - (_margin.left + _margin.right); - float h = this.height - (_margin.top + _margin.bottom); - rootContainer.clipRect = new Rect(_margin.left, _margin.top, w, h); - } - else - rootContainer.clipRect = new Rect(0, 0, this.width, this.height); - } - - override protected void HandleSizeChanged() - { - base.HandleSizeChanged(); - - if (scrollPane != null) - scrollPane.OnOwnerSizeChanged(); - if (rootContainer.clipRect != null) - UpdateClipRect(); - } - - override protected void HandleGrayedChanged() - { - Controller cc = GetController("grayed"); - if (cc != null) - cc.selectedIndex = this.grayed ? 1 : 0; - else - base.HandleGrayedChanged(); - } - - override public void HandleControllerChanged(Controller c) - { - base.HandleControllerChanged(c); - - if (scrollPane != null) - scrollPane.HandleControllerChanged(c); - } - - /// - /// Notify the component the bounds should recaculate. - /// - public void SetBoundsChangedFlag() - { - if (scrollPane == null && !_trackBounds) - return; - - _boundsChanged = true; - } - - /// - /// Make sure the bounds of the component is correct. - /// Bounds of the component is not updated on every changed. For example, you add a new child to the list, children in the list will be rearranged in next frame. - /// If you want to access the correct child position immediatelly, call this function first. - /// - public void EnsureBoundsCorrect() - { - if (_boundsChanged) - UpdateBounds(); - } - - virtual protected void UpdateBounds() - { - float ax, ay, aw, ah; - if (_children.Count > 0) - { - ax = int.MaxValue; - ay = int.MaxValue; - float ar = int.MinValue, ab = int.MinValue; - float tmp; - - int cnt = _children.Count; - for (int i = 0; i < cnt; ++i) - { - GObject child = _children[i]; - tmp = child.x; - if (tmp < ax) - ax = tmp; - tmp = child.y; - if (tmp < ay) - ay = tmp; - tmp = child.x + (child.pivotAsAnchor ? child.actualWidth * (1 - child.pivot.x) : child.actualWidth);//Add anchor offset - if (tmp > ar) - ar = tmp; - tmp = child.y + (child.pivotAsAnchor ? child.actualHeight * (1 - child.pivot.y) : child.actualHeight);//Add anchor offset - if (tmp > ab) - ab = tmp; - } - aw = ar - ax; - ah = ab - ay; - } - else - { - ax = 0; - ay = 0; - aw = 0; - ah = 0; - } - - SetBounds(ax, ay, aw, ah); - } - - protected void SetBounds(float ax, float ay, float aw, float ah) - { - _boundsChanged = false; - if (scrollPane != null) - scrollPane.SetContentSize(Mathf.RoundToInt(ax + aw), Mathf.RoundToInt(ay + ah)); - } - - /// - /// Viwe port width of the container. - /// - public float viewWidth - { - get - { - if (scrollPane != null) - return scrollPane.viewWidth; - else - return this.width - _margin.left - _margin.right; - } - - set - { - if (scrollPane != null) - scrollPane.viewWidth = value; - else - this.width = value + _margin.left + _margin.right; - } - } - - /// - /// View port height of the container. - /// - public float viewHeight - { - get - { - if (scrollPane != null) - return scrollPane.viewHeight; - else - return this.height - _margin.top - _margin.bottom; - } - - set - { - if (scrollPane != null) - scrollPane.viewHeight = value; - else - this.height = value + _margin.top + _margin.bottom; - } - } - - public void GetSnappingPosition(ref float xValue, ref float yValue) - { - GetSnappingPositionWithDir(ref xValue, ref yValue, 0, 0); - } - - protected bool ShouldSnapToNext(float dir, float delta, float size) - { - return dir < 0 && delta > UIConfig.defaultScrollSnappingThreshold * size - || dir > 0 && delta > (1 - UIConfig.defaultScrollSnappingThreshold) * size - || dir == 0 && delta > size / 2; - } - - /** - * dir正数表示右移或者下移,负数表示左移或者上移 - */ - virtual public void GetSnappingPositionWithDir(ref float xValue, ref float yValue, float xDir, float yDir) - { - int cnt = _children.Count; - if (cnt == 0) - return; - - EnsureBoundsCorrect(); - - GObject obj = null; - - int i = 0; - if (yValue != 0) - { - for (; i < cnt; i++) - { - obj = _children[i]; - if (yValue < obj.y) - { - if (i == 0) - { - yValue = 0; - break; - } - else - { - GObject prev = _children[i - 1]; - if (ShouldSnapToNext(yDir, yValue - prev.y, prev.height)) - yValue = obj.y; - else - yValue = prev.y; - break; - } - } - } - - if (i == cnt) - yValue = obj.y; - } - - if (xValue != 0) - { - if (i > 0) - i--; - for (; i < cnt; i++) - { - obj = _children[i]; - if (xValue < obj.x) - { - if (i == 0) - { - xValue = 0; - break; - } - else - { - GObject prev = _children[i - 1]; - if (ShouldSnapToNext(xDir, xValue - prev.x, prev.width)) - xValue = obj.x; - else - xValue = prev.x; - break; - } - } - } - if (i == cnt) - xValue = obj.x; - } - } - - internal void ChildSortingOrderChanged(GObject child, int oldValue, int newValue) - { - if (newValue == 0) - { - _sortingChildCount--; - SetChildIndex(child, _children.Count); - } - else - { - if (oldValue == 0) - _sortingChildCount++; - - int oldIndex = _children.IndexOf(child); - int index = GetInsertPosForSortingChild(child); - if (oldIndex < index) - _SetChildIndex(child, oldIndex, index - 1); - else - _SetChildIndex(child, oldIndex, index); - } - } - - /// - /// 每帧调用的一个回调。如果你要override,请记住以下两点: - /// 1、记得调用base.onUpdate; - /// 2、不要在方法里进行任何会更改显示列表的操作,例如AddChild、RemoveChild、visible等。 - /// - virtual protected void OnUpdate() - { - if (_boundsChanged) - UpdateBounds(); - } - - override public void ConstructFromResource() - { - ConstructFromResource(null, 0); - } - - internal void ConstructFromResource(List objectPool, int poolIndex) - { - this.gameObjectName = packageItem.name; - - PackageItem contentItem = packageItem.getBranch(); - - if (!contentItem.translated) - { - contentItem.translated = true; - TranslationHelper.TranslateComponent(contentItem); - } - - ByteBuffer buffer = contentItem.rawData; - buffer.Seek(0, 0); - - underConstruct = true; - - sourceWidth = buffer.ReadInt(); - sourceHeight = buffer.ReadInt(); - initWidth = sourceWidth; - initHeight = sourceHeight; - - SetSize(sourceWidth, sourceHeight); - - if (buffer.ReadBool()) - { - minWidth = buffer.ReadInt(); - maxWidth = buffer.ReadInt(); - minHeight = buffer.ReadInt(); - maxHeight = buffer.ReadInt(); - } - - if (buffer.ReadBool()) - { - float f1 = buffer.ReadFloat(); - float f2 = buffer.ReadFloat(); - SetPivot(f1, f2, buffer.ReadBool()); - } - - if (buffer.ReadBool()) - { - _margin.top = buffer.ReadInt(); - _margin.bottom = buffer.ReadInt(); - _margin.left = buffer.ReadInt(); - _margin.right = buffer.ReadInt(); - } - - OverflowType overflow = (OverflowType)buffer.ReadByte(); - if (overflow == OverflowType.Scroll) - { - int savedPos = buffer.position; - buffer.Seek(0, 7); - SetupScroll(buffer); - buffer.position = savedPos; - } - else - SetupOverflow(overflow); - - if (buffer.ReadBool()) - { - int i1 = buffer.ReadInt(); - int i2 = buffer.ReadInt(); - this.clipSoftness = new Vector2(i1, i2); - } - - _buildingDisplayList = true; - - buffer.Seek(0, 1); - - int controllerCount = buffer.ReadShort(); - for (int i = 0; i < controllerCount; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - Controller controller = new Controller(); - _controllers.Add(controller); - controller.parent = this; - controller.Setup(buffer); - - buffer.position = nextPos; - } - - buffer.Seek(0, 2); - - GObject child; - int childCount = buffer.ReadShort(); - for (int i = 0; i < childCount; i++) - { - int dataLen = buffer.ReadShort(); - int curPos = buffer.position; - - if (objectPool != null) - child = objectPool[poolIndex + i]; - else - { - buffer.Seek(curPos, 0); - - ObjectType type = (ObjectType)buffer.ReadByte(); - string src = buffer.ReadS(); - string pkgId = buffer.ReadS(); - - PackageItem pi = null; - if (src != null) - { - UIPackage pkg; - if (pkgId != null) - pkg = UIPackage.GetById(pkgId); - else - pkg = contentItem.owner; - - pi = pkg != null ? pkg.GetItem(src) : null; - } - - if (pi != null) - { - child = UIObjectFactory.NewObject(pi); - child.ConstructFromResource(); - } - else - child = UIObjectFactory.NewObject(type); - } - - child.underConstruct = true; - child.Setup_BeforeAdd(buffer, curPos); - child.InternalSetParent(this); - _children.Add(child); - - buffer.position = curPos + dataLen; - } - - buffer.Seek(0, 3); - this.relations.Setup(buffer, true); - - buffer.Seek(0, 2); - buffer.Skip(2); - - for (int i = 0; i < childCount; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - buffer.Seek(buffer.position, 3); - _children[i].relations.Setup(buffer, false); - - buffer.position = nextPos; - } - - buffer.Seek(0, 2); - buffer.Skip(2); - - for (int i = 0; i < childCount; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - child = _children[i]; - child.Setup_AfterAdd(buffer, buffer.position); - child.underConstruct = false; - if (child.displayObject != null) - child.displayObject.cachedTransform.SetParent(this.displayObject.cachedTransform, false); - - buffer.position = nextPos; - } - - buffer.Seek(0, 4); - - buffer.Skip(2); //customData - this.opaque = buffer.ReadBool(); - int maskId = buffer.ReadShort(); - if (maskId != -1) - { - container.mask = GetChildAt(maskId).displayObject; - if (buffer.ReadBool()) - container.reversedMask = true; - } - - { - string hitTestId = buffer.ReadS(); - int i1 = buffer.ReadInt(); - int i2 = buffer.ReadInt(); - if (hitTestId != null) - { - PackageItem pi = contentItem.owner.GetItem(hitTestId); - if (pi != null && pi.pixelHitTestData != null) - rootContainer.hitArea = new PixelHitTest(pi.pixelHitTestData, i1, i2, sourceWidth, sourceHeight); - } - else if (i1 != 0 && i2 != -1) - { - rootContainer.hitArea = new ShapeHitTest(this.GetChildAt(i2).displayObject); - } - } - - if (buffer.version >= 5) - { - string str = buffer.ReadS(); - if (!string.IsNullOrEmpty(str)) - this.onAddedToStage.Add(() => __playSound(str, 1)); - - string str2 = buffer.ReadS(); - if (!string.IsNullOrEmpty(str2)) - this.onRemovedFromStage.Add(() => __playSound(str2, 1)); - } - - buffer.Seek(0, 5); - - int transitionCount = buffer.ReadShort(); - for (int i = 0; i < transitionCount; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - Transition trans = new Transition(this); - trans.Setup(buffer); - _transitions.Add(trans); - - buffer.position = nextPos; - } - - if (_transitions.Count > 0) - { - this.onAddedToStage.Add(__addedToStage); - this.onRemovedFromStage.Add(__removedFromStage); - } - - ApplyAllControllers(); - - _buildingDisplayList = false; - underConstruct = false; - - BuildNativeDisplayList(); - SetBoundsChangedFlag(); - - if (contentItem.objectType != ObjectType.Component) - ConstructExtension(buffer); - - ConstructFromXML(null); - -#if FAIRYGUI_TOLUA - CallLua("ctor"); -#endif -#if FAIRYGUI_PUERTS - if (__onConstruct != null) - __onConstruct(); -#endif - } - - virtual protected void ConstructExtension(ByteBuffer buffer) - { - } - - /// - /// Method for extensions to override - /// - /// - virtual public void ConstructFromXML(XML xml) - { - } - - public override void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - buffer.Seek(beginPos, 4); - - int pageController = buffer.ReadShort(); - if (pageController != -1 && scrollPane != null && scrollPane.pageMode) - scrollPane.pageController = parent.GetControllerAt(pageController); - - int cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - Controller cc = GetController(buffer.ReadS()); - string pageId = buffer.ReadS(); - if (cc != null) - cc.selectedPageId = pageId; - } - - if (buffer.version >= 2) - { - cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - string target = buffer.ReadS(); - int propertyId = buffer.ReadShort(); - string value = buffer.ReadS(); - GObject obj = this.GetChildByPath(target); - if (obj != null) - { - if (propertyId == 0) - obj.text = value; - else if (propertyId == 1) - obj.icon = value; - } - } - } - } - - void __playSound(string soundRes, float volumeScale) - { - NAudioClip sound = UIPackage.GetItemAssetByURL(soundRes) as NAudioClip; - if (sound != null && sound.nativeClip != null) - Stage.inst.PlayOneShotSound(sound.nativeClip, volumeScale); - } - - void __addedToStage() - { - int cnt = _transitions.Count; - for (int i = 0; i < cnt; ++i) - _transitions[i].OnOwnerAddedToStage(); - } - - void __removedFromStage() - { - int cnt = _transitions.Count; - for (int i = 0; i < cnt; ++i) - _transitions[i].OnOwnerRemovedFromStage(); - } - -#if FAIRYGUI_TOLUA - internal LuaTable _peerTable; - - public void SetLuaPeer(LuaTable peerTable) - { - _peerTable = peerTable; - } - - [NoToLua] - public bool CallLua(string funcName) - { - if (_peerTable != null) - { - LuaFunction ctor = _peerTable.GetLuaFunction(funcName); - if (ctor != null) - { - try - { - ctor.Call(this); - } - catch (Exception err) - { - Debug.LogError(err); - } - - ctor.Dispose(); - return true; - } - } - - return false; - } -#endif - -#if FAIRYGUI_PUERTS - public Action __onConstruct; - public Action __onDispose; -#endif - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs.meta deleted file mode 100644 index c31a2e4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a21ec486dca945f459590f80e1e6f699 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs deleted file mode 100644 index e1df4fe..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs +++ /dev/null @@ -1,274 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GGraph class. - /// 对应编辑器里的图形对象。图形有两个用途,一是用来显示简单的图形,例如矩形等;二是作为一个占位的用途, - /// 可以将本对象替换为其他对象,或者在它的前后添加其他对象,相当于一个位置和深度的占位;还可以直接将内容设置 - /// 为原生对象。 - /// - public class GGraph : GObject, IColorGear - { - Shape _shape; - - public GGraph() - { - } - - override protected void CreateDisplayObject() - { - _shape = new Shape(); - _shape.gOwner = this; - displayObject = _shape; - } - - /// - /// Replace this object to another object in the display list. - /// 在显示列表中,将指定对象取代这个图形对象。这个图形对象相当于一个占位的用途。 - /// - /// Target object. - public void ReplaceMe(GObject target) - { - if (parent == null) - throw new Exception("parent not set"); - - target.name = this.name; - target.alpha = this.alpha; - target.rotation = this.rotation; - target.visible = this.visible; - target.touchable = this.touchable; - target.grayed = this.grayed; - target.SetXY(this.x, this.y); - target.SetSize(this.width, this.height); - - int index = parent.GetChildIndex(this); - parent.AddChildAt(target, index); - target.relations.CopyFrom(this.relations); - - parent.RemoveChild(this, true); - } - - /// - /// Add another object before this object. - /// 在显示列表中,将另一个对象插入到这个对象的前面。 - /// - /// Target object. - public void AddBeforeMe(GObject target) - { - if (parent == null) - throw new Exception("parent not set"); - - int index = parent.GetChildIndex(this); - parent.AddChildAt(target, index); - } - - /// - /// Add another object after this object. - /// 在显示列表中,将另一个对象插入到这个对象的后面。 - /// - /// Target object. - public void AddAfterMe(GObject target) - { - if (parent == null) - throw new Exception("parent not set"); - - int index = parent.GetChildIndex(this); - index++; - parent.AddChildAt(target, index); - } - - /// - /// 设置内容为一个原生对象。这个图形对象相当于一个占位的用途。 - /// - /// 原生对象 - public void SetNativeObject(DisplayObject obj) - { - if (displayObject == obj) - return; - - if (_shape != null) - { - if (_shape.parent != null) - _shape.parent.RemoveChild(displayObject, true); - else - _shape.Dispose(); - _shape.gOwner = null; - _shape = null; - } - - displayObject = obj; - - if (displayObject != null) - { - displayObject.alpha = this.alpha; - displayObject.rotation = this.rotation; - displayObject.visible = this.visible; - displayObject.touchable = this.touchable; - displayObject.gOwner = this; - } - - if (parent != null) - parent.ChildStateChanged(this); - HandlePositionChanged(); - } - - /// - /// - /// - public Color color - { - get - { - if (_shape != null) - return _shape.color; - else - return Color.clear; - } - set - { - if (_shape != null && _shape.color != value) - { - _shape.color = value; - UpdateGear(4); - } - } - } - - /// - /// Get the shape object. It can be used for drawing. - /// 获取图形的原生对象,可用于绘制图形。 - /// - public Shape shape - { - get { return _shape; } - } - - /// - /// Draw a rectangle. - /// 画矩形。 - /// - /// Width - /// Height - /// Line size - /// Line color - /// Fill color - public void DrawRect(float aWidth, float aHeight, int lineSize, Color lineColor, Color fillColor) - { - this.SetSize(aWidth, aHeight); - _shape.DrawRect(lineSize, lineColor, fillColor); - } - - /// - /// - /// - /// - /// - /// - /// - public void DrawRoundRect(float aWidth, float aHeight, Color fillColor, float[] corner) - { - this.SetSize(aWidth, aHeight); - this.shape.DrawRoundRect(0, Color.white, fillColor, corner[0], corner[1], corner[2], corner[3]); - } - - /// - /// - /// - /// - /// - /// - public void DrawEllipse(float aWidth, float aHeight, Color fillColor) - { - this.SetSize(aWidth, aHeight); - _shape.DrawEllipse(fillColor); - } - - /// - /// - /// - /// - /// - /// - /// - public void DrawPolygon(float aWidth, float aHeight, IList points, Color fillColor) - { - this.SetSize(aWidth, aHeight); - _shape.DrawPolygon(points, fillColor); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void DrawPolygon(float aWidth, float aHeight, IList points, Color fillColor, float lineSize, Color lineColor) - { - this.SetSize(aWidth, aHeight); - _shape.DrawPolygon(points, fillColor, lineSize, lineColor); - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - int type = buffer.ReadByte(); - if (type != 0) - { - int lineSize = buffer.ReadInt(); - Color lineColor = buffer.ReadColor(); - Color fillColor = buffer.ReadColor(); - bool roundedRect = buffer.ReadBool(); - Vector4 cornerRadius = new Vector4(); - if (roundedRect) - { - for (int i = 0; i < 4; i++) - cornerRadius[i] = buffer.ReadFloat(); - } - - if (type == 1) - { - if (roundedRect) - _shape.DrawRoundRect(lineSize, lineColor, fillColor, cornerRadius.x, cornerRadius.y, cornerRadius.z, cornerRadius.w); - else - _shape.DrawRect(lineSize, lineColor, fillColor); - } - else if (type == 2) - _shape.DrawEllipse(lineSize, fillColor, lineColor, fillColor, 0, 360); - else if (type == 3) - { - int cnt = buffer.ReadShort() / 2; - Vector2[] points = new Vector2[cnt]; - for (int i = 0; i < cnt; i++) - points[i].Set(buffer.ReadFloat(), buffer.ReadFloat()); - - _shape.DrawPolygon(points, fillColor, lineSize, lineColor); - } - else if (type == 4) - { - int sides = buffer.ReadShort(); - float startAngle = buffer.ReadFloat(); - int cnt = buffer.ReadShort(); - float[] distances = null; - if (cnt > 0) - { - distances = new float[cnt]; - for (int i = 0; i < cnt; i++) - distances[i] = buffer.ReadFloat(); - } - - _shape.DrawRegularPolygon(sides, lineSize, null, lineColor, fillColor, startAngle, distances); - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs.meta deleted file mode 100644 index 55808f8..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 913b7964e87194d4182c1ad388d94f19 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs deleted file mode 100644 index 8958c01..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs +++ /dev/null @@ -1,538 +0,0 @@ -using System; -using FairyGUI.Utils; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// GGroup class. - /// 组对象,对应编辑器里的高级组。 - /// - public class GGroup : GObject - { - GroupLayoutType _layout; - int _lineGap; - int _columnGap; - - bool _excludeInvisibles; - bool _autoSizeDisabled; - int _mainGridIndex; - int _mainGridMinSize; - - bool _percentReady; - bool _boundsChanged; - int _mainChildIndex; - float _totalSize; - int _numChildren; - internal int _updating; - - Action _refreshDelegate; - - public GGroup() - { - _mainGridIndex = -1; - _mainChildIndex = -1; - _mainGridMinSize = 50; - _refreshDelegate = EnsureBoundsCorrect; - } - - /// - /// Group layout type. - /// - public GroupLayoutType layout - { - get { return _layout; } - set - { - if (_layout != value) - { - _layout = value; - SetBoundsChangedFlag(); - } - } - } - - /// - /// - /// - public int lineGap - { - get { return _lineGap; } - set - { - if (_lineGap != value) - { - _lineGap = value; - SetBoundsChangedFlag(true); - } - } - } - - /// - /// - /// - public int columnGap - { - get { return _columnGap; } - set - { - if (_columnGap != value) - { - _columnGap = value; - SetBoundsChangedFlag(true); - } - } - } - - /// - /// - /// - public bool excludeInvisibles - { - get { return _excludeInvisibles; } - set - { - if (_excludeInvisibles != value) - { - _excludeInvisibles = value; - SetBoundsChangedFlag(); - } - } - } - - /// - /// - /// - public bool autoSizeDisabled - { - get { return _autoSizeDisabled; } - set - { - if (_autoSizeDisabled != value) - { - _autoSizeDisabled = value; - SetBoundsChangedFlag(); - } - } - } - - /// - /// - /// - public int mainGridMinSize - { - get { return _mainGridMinSize; } - set - { - if (_mainGridMinSize != value) - { - _mainGridMinSize = value; - SetBoundsChangedFlag(); - } - } - } - - /// - /// - /// - public int mainGridIndex - { - get { return _mainGridIndex; } - set - { - if (_mainGridIndex != value) - { - _mainGridIndex = value; - SetBoundsChangedFlag(); - } - } - } - - /// - /// Update group bounds. - /// 更新组的包围. - /// - public void SetBoundsChangedFlag(bool positionChangedOnly = false) - { - if (_updating == 0 && parent != null) - { - if (!positionChangedOnly) - _percentReady = false; - - if (!_boundsChanged) - { - _boundsChanged = true; - - if (_layout != GroupLayoutType.None) - { - UpdateContext.OnBegin -= _refreshDelegate; - UpdateContext.OnBegin += _refreshDelegate; - } - } - } - } - - public void EnsureBoundsCorrect() - { - if (parent == null || !_boundsChanged) - return; - - UpdateContext.OnBegin -= _refreshDelegate; - _boundsChanged = false; - - if (_autoSizeDisabled) - ResizeChildren(0, 0); - else - { - HandleLayout(); - UpdateBounds(); - } - } - - void UpdateBounds() - { - int cnt = parent.numChildren; - int i; - GObject child; - float ax = int.MaxValue, ay = int.MaxValue; - float ar = int.MinValue, ab = int.MinValue; - float tmp; - bool empty = true; - bool skipInvisibles = _layout != GroupLayoutType.None && _excludeInvisibles; - - for (i = 0; i < cnt; i++) - { - child = parent.GetChildAt(i); - if (child.group != this) - continue; - - if (skipInvisibles && !child.internalVisible3) - continue; - - tmp = child.xMin; - if (tmp < ax) - ax = tmp; - tmp = child.yMin; - if (tmp < ay) - ay = tmp; - tmp = child.xMin + child.width; - if (tmp > ar) - ar = tmp; - tmp = child.yMin + child.height; - if (tmp > ab) - ab = tmp; - - empty = false; - } - - float w; - float h; - if (!empty) - { - _updating |= 1; - SetXY(ax, ay); - _updating &= 2; - - w = ar - ax; - h = ab - ay; - } - else - w = h = 0; - - if ((_updating & 2) == 0) - { - _updating |= 2; - SetSize(w, h); - _updating &= 1; - } - else - { - _updating &= 1; - ResizeChildren(_width - w, _height - h); - } - } - - void HandleLayout() - { - _updating |= 1; - - if (_layout == GroupLayoutType.Horizontal) - { - float curX = this.x; - int cnt = parent.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group != this) - continue; - if (_excludeInvisibles && !child.internalVisible3) - continue; - - child.xMin = curX; - if (child.width != 0) - curX += child.width + _columnGap; - } - } - else if (_layout == GroupLayoutType.Vertical) - { - float curY = this.y; - int cnt = parent.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group != this) - continue; - if (_excludeInvisibles && !child.internalVisible3) - continue; - - child.yMin = curY; - if (child.height != 0) - curY += child.height + _lineGap; - } - } - - _updating &= 2; - } - - internal void MoveChildren(float dx, float dy) - { - if ((_updating & 1) != 0 || parent == null) - return; - - _updating |= 1; - - int cnt = parent.numChildren; - int i; - GObject child; - for (i = 0; i < cnt; i++) - { - child = parent.GetChildAt(i); - if (child.group == this) - { - child.SetXY(child.x + dx, child.y + dy); - } - } - - _updating &= 2; - } - - internal void ResizeChildren(float dw, float dh) - { - if (_layout == GroupLayoutType.None || (_updating & 2) != 0 || parent == null) - return; - - _updating |= 2; - - if (_boundsChanged) - { - _boundsChanged = false; - if (!_autoSizeDisabled) - { - UpdateBounds(); - return; - } - } - - int cnt = parent.numChildren; - - if (!_percentReady) - { - _percentReady = true; - _numChildren = 0; - _totalSize = 0; - _mainChildIndex = -1; - - int j = 0; - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group != this) - continue; - - if (!_excludeInvisibles || child.internalVisible3) - { - if (j == _mainGridIndex) - _mainChildIndex = i; - - _numChildren++; - - if (_layout == GroupLayoutType.Horizontal) - _totalSize += child.width; - else - _totalSize += child.height; - } - - j++; - } - - if (_mainChildIndex != -1) - { - if (_layout == GroupLayoutType.Horizontal) - { - GObject child = parent.GetChildAt(_mainChildIndex); - _totalSize += _mainGridMinSize - child.width; - child._sizePercentInGroup = _mainGridMinSize / _totalSize; - } - else - { - GObject child = parent.GetChildAt(_mainChildIndex); - _totalSize += _mainGridMinSize - child.height; - child._sizePercentInGroup = _mainGridMinSize / _totalSize; - } - } - - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group != this) - continue; - - if (i == _mainChildIndex) - continue; - - if (_totalSize > 0) - child._sizePercentInGroup = (_layout == GroupLayoutType.Horizontal ? child.width : child.height) / _totalSize; - else - child._sizePercentInGroup = 0; - } - } - - float remainSize = 0; - float remainPercent = 1; - bool priorHandled = false; - - if (_layout == GroupLayoutType.Horizontal) - { - remainSize = this.width - (_numChildren - 1) * _columnGap; - if (_mainChildIndex != -1 && remainSize >= _totalSize) - { - GObject child = parent.GetChildAt(_mainChildIndex); - child.SetSize(remainSize - (_totalSize - _mainGridMinSize), child._rawHeight + dh, true); - remainSize -= child.width; - remainPercent -= child._sizePercentInGroup; - priorHandled = true; - } - - float curX = this.x; - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group != this) - continue; - - if (_excludeInvisibles && !child.internalVisible3) - { - child.SetSize(child._rawWidth, child._rawHeight + dh, true); - continue; - } - - if (!priorHandled || i != _mainChildIndex) - { - child.SetSize(Mathf.Round(child._sizePercentInGroup / remainPercent * remainSize), child._rawHeight + dh, true); - remainPercent -= child._sizePercentInGroup; - remainSize -= child.width; - } - - child.xMin = curX; - if (child.width != 0) - curX += child.width + _columnGap; - } - } - else - { - remainSize = this.height - (_numChildren - 1) * _lineGap; - if (_mainChildIndex != -1 && remainSize >= _totalSize) - { - GObject child = parent.GetChildAt(_mainChildIndex); - child.SetSize(child._rawWidth + dw, remainSize - (_totalSize - _mainGridMinSize), true); - remainSize -= child.height; - remainPercent -= child._sizePercentInGroup; - priorHandled = true; - } - - float curY = this.y; - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group != this) - continue; - - if (_excludeInvisibles && !child.internalVisible3) - { - child.SetSize(child._rawWidth + dw, child._rawHeight, true); - continue; - } - - if (!priorHandled || i != _mainChildIndex) - { - child.SetSize(child._rawWidth + dw, Mathf.Round(child._sizePercentInGroup / remainPercent * remainSize), true); - remainPercent -= child._sizePercentInGroup; - remainSize -= child.height; - } - - child.yMin = curY; - if (child.height != 0) - curY += child.height + _lineGap; - } - } - - _updating &= 1; - } - - override protected void HandleAlphaChanged() - { - base.HandleAlphaChanged(); - - if (this.underConstruct || parent == null) - return; - - int cnt = parent.numChildren; - float a = this.alpha; - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group == this) - child.alpha = a; - } - } - - override internal protected void HandleVisibleChanged() - { - if (parent == null) - return; - - int cnt = parent.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject child = parent.GetChildAt(i); - if (child.group == this) - child.HandleVisibleChanged(); - } - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - _layout = (GroupLayoutType)buffer.ReadByte(); - _lineGap = buffer.ReadInt(); - _columnGap = buffer.ReadInt(); - if (buffer.version >= 2) - { - _excludeInvisibles = buffer.ReadBool(); - _autoSizeDisabled = buffer.ReadBool(); - _mainGridIndex = buffer.ReadShort(); - } - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - if (!this.visible) - HandleVisibleChanged(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs.meta deleted file mode 100644 index f70f577..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b8aac7740f89ffc409bfb6cd30d58fec -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs deleted file mode 100644 index 457d71d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs +++ /dev/null @@ -1,170 +0,0 @@ -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GImage class. - /// - public class GImage : GObject, IColorGear - { - Image _content; - - public GImage() - { - } - - override protected void CreateDisplayObject() - { - _content = new Image(); - _content.gOwner = this; - displayObject = _content; - } - - /// - /// Color of the image. - /// - public Color color - { - get { return _content.color; } - set - { - _content.color = value; - UpdateGear(4); - } - } - - /// - /// Flip type. - /// - /// - public FlipType flip - { - get { return _content.graphics.flip; } - set { _content.graphics.flip = value; } - } - - /// - /// Fill method. - /// - /// - public FillMethod fillMethod - { - get { return _content.fillMethod; } - set { _content.fillMethod = value; } - } - - /// - /// Fill origin. - /// - /// - /// - /// - /// - /// - public int fillOrigin - { - get { return _content.fillOrigin; } - set { _content.fillOrigin = value; } - } - - /// - /// Fill clockwise if true. - /// - public bool fillClockwise - { - get { return _content.fillClockwise; } - set { _content.fillClockwise = value; } - } - - /// - /// Fill amount. (0~1) - /// - public float fillAmount - { - get { return _content.fillAmount; } - set { _content.fillAmount = value; } - } - - /// - /// Set texture directly. The image wont own the texture. - /// - public NTexture texture - { - get { return _content.texture; } - set - { - if (value != null) - { - sourceWidth = value.width; - sourceHeight = value.height; - } - else - { - sourceWidth = 0; - sourceHeight = 0; - } - initWidth = sourceWidth; - initHeight = sourceHeight; - _content.texture = value; - } - } - - /// - /// Set material. - /// - public Material material - { - get { return _content.material; } - set { _content.material = value; } - } - - /// - /// Set shader. - /// - public string shader - { - get { return _content.shader; } - set { _content.shader = value; } - } - - override public void ConstructFromResource() - { - this.gameObjectName = packageItem.name; - - PackageItem contentItem = packageItem.getBranch(); - sourceWidth = contentItem.width; - sourceHeight = contentItem.height; - initWidth = sourceWidth; - initHeight = sourceHeight; - - contentItem = contentItem.getHighResolution(); - contentItem.Load(); - _content.scale9Grid = contentItem.scale9Grid; - _content.scaleByTile = contentItem.scaleByTile; - _content.tileGridIndice = contentItem.tileGridIndice; - _content.texture = contentItem.texture; - _content.textureScale = new Vector2(contentItem.width / (float)sourceWidth, contentItem.height / (float)sourceHeight); - - SetSize(sourceWidth, sourceHeight); - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - if (buffer.ReadBool()) - _content.color = buffer.ReadColor(); - _content.graphics.flip = (FlipType)buffer.ReadByte(); - _content.fillMethod = (FillMethod)buffer.ReadByte(); - if (_content.fillMethod != FillMethod.None) - { - _content.fillOrigin = buffer.ReadByte(); - _content.fillClockwise = buffer.ReadBool(); - _content.fillAmount = buffer.ReadFloat(); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs.meta deleted file mode 100644 index 3e67777..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 106156ac7c8773640af01f14fd396393 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs deleted file mode 100644 index bc0a5b2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs +++ /dev/null @@ -1,235 +0,0 @@ -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GLabel class. - /// - public class GLabel : GComponent, IColorGear - { - protected GObject _titleObject; - protected GObject _iconObject; - - public GLabel() - { - } - - /// - /// Icon of the label. - /// - override public string icon - { - get - { - if (_iconObject != null) - return _iconObject.icon; - else - return null; - } - - set - { - if (_iconObject != null) - _iconObject.icon = value; - UpdateGear(7); - } - } - - /// - /// Title of the label. - /// - public string title - { - get - { - if (_titleObject != null) - return _titleObject.text; - else - return null; - } - set - { - if (_titleObject != null) - _titleObject.text = value; - UpdateGear(6); - } - } - - /// - /// Same of the title. - /// - override public string text - { - get { return this.title; } - set { this.title = value; } - } - - /// - /// If title is input text. - /// - public bool editable - { - get - { - if (_titleObject is GTextInput) - return _titleObject.asTextInput.editable; - else - return false; - } - - set - { - if (_titleObject is GTextInput) - _titleObject.asTextInput.editable = value; - } - } - - /// - /// Title color of the label - /// - public Color titleColor - { - get - { - GTextField tf = GetTextField(); - if (tf != null) - return tf.color; - else - return Color.black; - } - set - { - GTextField tf = GetTextField(); - if (tf != null) - { - tf.color = value; - UpdateGear(4); - } - } - } - - /// - /// - /// - public int titleFontSize - { - get - { - GTextField tf = GetTextField(); - if (tf != null) - return tf.textFormat.size; - else - return 0; - } - set - { - GTextField tf = GetTextField(); - if (tf != null) - { - TextFormat format = tf.textFormat; - format.size = value; - tf.textFormat = format; - } - } - } - - /// - /// - /// - public Color color - { - get { return this.titleColor; } - set { this.titleColor = value; } - } - - /// - /// - /// - /// - public GTextField GetTextField() - { - if (_titleObject is GTextField) - return (GTextField)_titleObject; - else if (_titleObject is GLabel) - return ((GLabel)_titleObject).GetTextField(); - else if (_titleObject is GButton) - return ((GButton)_titleObject).GetTextField(); - else - return null; - } - - override protected void ConstructExtension(ByteBuffer buffer) - { - _titleObject = GetChild("title"); - _iconObject = GetChild("icon"); - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - if (!buffer.Seek(beginPos, 6)) - return; - - if ((ObjectType)buffer.ReadByte() != packageItem.objectType) - return; - - string str; - str = buffer.ReadS(); - if (str != null) - this.title = str; - str = buffer.ReadS(); - if (str != null) - this.icon = str; - if (buffer.ReadBool()) - this.titleColor = buffer.ReadColor(); - int iv = buffer.ReadInt(); - if (iv != 0) - this.titleFontSize = iv; - - if (buffer.ReadBool()) - { - GTextInput input = GetTextField() as GTextInput; - if (input != null) - { - str = buffer.ReadS(); - if (str != null) - input.promptText = str; - - str = buffer.ReadS(); - if (str != null) - input.restrict = str; - - iv = buffer.ReadInt(); - if (iv != 0) - input.maxLength = iv; - iv = buffer.ReadInt(); - if (iv != 0) - input.keyboardType = iv; - if (buffer.ReadBool()) - input.displayAsPassword = true; - } - else - buffer.Skip(13); - } - - if (buffer.version >= 5) - { - string sound = buffer.ReadS(); - if (!string.IsNullOrEmpty(sound)) - { - float volumeScale = buffer.ReadFloat(); - displayObject.onClick.Add(() => - { - NAudioClip audioClip = UIPackage.GetItemAssetByURL(sound) as NAudioClip; - if (audioClip != null && audioClip.nativeClip != null) - Stage.inst.PlayOneShotSound(audioClip.nativeClip, volumeScale); - }); - } - else - buffer.Skip(4); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs.meta deleted file mode 100644 index 0774a35..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: bd9c62cc282bb9b4fa9e794317eedd30 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs deleted file mode 100644 index 37ced04..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs +++ /dev/null @@ -1,3067 +0,0 @@ -using System; -using System.Collections.Generic; -using FairyGUI.Utils; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// Callback function when an item is needed to update its look. - /// - /// Item index. - /// Item object. - public delegate void ListItemRenderer(int index, GObject item); - - /// - /// - /// - /// - /// - public delegate string ListItemProvider(int index); - - /// - /// GList class. - /// - public class GList : GComponent - { - /// - /// 如果true,当item不可见时自动折叠,否则依然占位 - /// - public bool foldInvisibleItems = false; - - /// - /// List selection mode - /// - /// - public ListSelectionMode selectionMode; - - /// - /// Callback function when an item is needed to update its look. - /// - public ListItemRenderer itemRenderer; - - /// - /// Callback funtion to return item resource url. - /// - public ListItemProvider itemProvider; - - /// - /// - /// - public bool scrollItemToViewOnClick; - - string _defaultItem; - ListLayoutType _layout; - int _lineCount; - int _columnCount; - int _lineGap; - int _columnGap; - AlignType _align; - VertAlignType _verticalAlign; - bool _autoResizeItem; - Controller _selectionController; - - GObjectPool _pool; - int _lastSelectedIndex; - - EventListener _onClickItem; - EventListener _onRightClickItem; - - //Virtual List support - bool _virtual; - bool _loop; - int _numItems; - int _realNumItems; - int _firstIndex; //the top left index - int _curLineItemCount; //item count in one line - int _curLineItemCount2; //只用在页面模式,表示垂直方向的项目数 - Vector2 _itemSize; - int _virtualListChanged; //1-content changed, 2-size changed - uint itemInfoVer; //用来标志item是否在本次处理中已经被重用了 - - int _miscFlags; //1-event locked, 2-focus events registered - - class ItemInfo - { - public Vector2 size; - public GObject obj; - public uint updateFlag; - public bool selected; - } - List _virtualItems; - - EventCallback1 _itemClickDelegate; - - public GList() - : base() - { - _trackBounds = true; - this.opaque = true; - scrollItemToViewOnClick = true; - - container = new Container(); - rootContainer.AddChild(container); - rootContainer.gameObject.name = "GList"; - - _pool = new GObjectPool(container.cachedTransform); - - _itemClickDelegate = __clickItem; - } - - public override void Dispose() - { - _pool.Clear(); - if (_virtualListChanged != 0) - Timers.inst.Remove(this.RefreshVirtualList); - - _selectionController = null; - scrollItemToViewOnClick = false; - itemRenderer = null; - itemProvider = null; - - base.Dispose(); - } - - /// - /// Dispatched when a list item being clicked. - /// - public EventListener onClickItem - { - get { return _onClickItem ?? (_onClickItem = new EventListener(this, "onClickItem")); } - } - - /// - /// Dispatched when a list item being clicked with right button. - /// - public EventListener onRightClickItem - { - get { return _onRightClickItem ?? (_onRightClickItem = new EventListener(this, "onRightClickItem")); } - } - - /// - /// Resource url of the default item. - /// - public string defaultItem - { - get { return _defaultItem; } - set - { - _defaultItem = UIPackage.NormalizeURL(value); - } - } - - /// - /// List layout type. - /// - public ListLayoutType layout - { - get { return _layout; } - set - { - if (_layout != value) - { - _layout = value; - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - - /// - /// - /// - public int lineCount - { - get { return _lineCount; } - set - { - if (_lineCount != value) - { - _lineCount = value; - if (_layout == ListLayoutType.FlowVertical || _layout == ListLayoutType.Pagination) - { - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - } - - /// - /// - /// - public int columnCount - { - get { return _columnCount; } - set - { - if (_columnCount != value) - { - _columnCount = value; - if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) - { - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - } - - /// - /// - /// - public int lineGap - { - get { return _lineGap; } - set - { - if (_lineGap != value) - { - _lineGap = value; - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - - /// - /// - /// - public int columnGap - { - get { return _columnGap; } - set - { - if (_columnGap != value) - { - _columnGap = value; - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - - /// - /// - /// - public AlignType align - { - get { return _align; } - set - { - if (_align != value) - { - _align = value; - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - - /// - /// - /// - public VertAlignType verticalAlign - { - get { return _verticalAlign; } - set - { - if (_verticalAlign != value) - { - _verticalAlign = value; - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - /// - /// If the item will resize itself to fit the list width/height. - /// - public bool autoResizeItem - { - get { return _autoResizeItem; } - set - { - if (_autoResizeItem != value) - { - _autoResizeItem = value; - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - } - } - - /// - /// - /// - /// - public Vector2 defaultItemSize - { - get { return _itemSize; } - set - { - _itemSize = value; - if (_virtual) - { - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - this.scrollPane.scrollStep = _itemSize.y; - else - this.scrollPane.scrollStep = _itemSize.x; - SetVirtualListChangedFlag(true); - } - } - } - - /// - /// - /// - public GObjectPool itemPool - { - get { return _pool; } - } - - /// - /// - /// - /// - /// - public GObject GetFromPool(string url) - { - if (string.IsNullOrEmpty(url)) - url = _defaultItem; - - GObject ret = _pool.GetObject(url); - if (ret != null) - ret.visible = true; - return ret; - } - - void ReturnToPool(GObject obj) - { - _pool.ReturnObject(obj); - } - - /// - /// Add a item to list, same as GetFromPool+AddChild - /// - /// Item object - public GObject AddItemFromPool() - { - GObject obj = GetFromPool(null); - - return AddChild(obj); - } - - /// - /// Add a item to list, same as GetFromPool+AddChild - /// - /// Item resource url - /// Item object - public GObject AddItemFromPool(string url) - { - GObject obj = GetFromPool(url); - - return AddChild(obj); - } - - /// - /// - /// - /// - /// - /// - override public GObject AddChildAt(GObject child, int index) - { - base.AddChildAt(child, index); - if (child is GButton) - { - GButton button = (GButton)child; - button.selected = false; - button.changeStateOnClick = false; - } - - child.onClick.Add(_itemClickDelegate); - child.onRightClick.Add(_itemClickDelegate); - - return child; - } - - /// - /// - /// - /// - /// - /// - override public GObject RemoveChildAt(int index, bool dispose) - { - GObject child = base.RemoveChildAt(index, dispose); - child.onClick.Remove(_itemClickDelegate); - child.onRightClick.Remove(_itemClickDelegate); - - return child; - } - - /// - /// - /// - /// - public void RemoveChildToPoolAt(int index) - { - GObject child = base.RemoveChildAt(index); - ReturnToPool(child); - } - - /// - /// - /// - /// - public void RemoveChildToPool(GObject child) - { - base.RemoveChild(child); - ReturnToPool(child); - } - - /// - /// - /// - public void RemoveChildrenToPool() - { - RemoveChildrenToPool(0, -1); - } - - /// - /// - /// - /// - /// - public void RemoveChildrenToPool(int beginIndex, int endIndex) - { - if (endIndex < 0 || endIndex >= _children.Count) - endIndex = _children.Count - 1; - - for (int i = beginIndex; i <= endIndex; ++i) - RemoveChildToPoolAt(beginIndex); - } - - /// - /// - /// - public int selectedIndex - { - get - { - if (_virtual) - { - int cnt = _realNumItems; - for (int i = 0; i < cnt; i++) - { - ItemInfo ii = _virtualItems[i]; - if ((ii.obj is GButton) && ((GButton)ii.obj).selected - || ii.obj == null && ii.selected) - { - if (_loop) - return i % _numItems; - else - return i; - } - } - } - else - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GButton obj = _children[i].asButton; - if (obj != null && obj.selected) - return i; - } - } - return -1; - } - - set - { - if (value >= 0 && value < this.numItems) - { - if (selectionMode != ListSelectionMode.Single) - ClearSelection(); - AddSelection(value, false); - } - else - ClearSelection(); - } - } - - /// - /// - /// - public Controller selectionController - { - get { return _selectionController; } - set { _selectionController = value; } - } - - /// - /// - /// - /// - public List GetSelection() - { - return GetSelection(null); - } - - /// - /// - /// - /// - public List GetSelection(List result) - { - if (result == null) - result = new List(); - if (_virtual) - { - int cnt = _realNumItems; - for (int i = 0; i < cnt; i++) - { - ItemInfo ii = _virtualItems[i]; - if ((ii.obj is GButton) && ((GButton)ii.obj).selected - || ii.obj == null && ii.selected) - { - int j = i; - if (_loop) - { - j = i % _numItems; - if (result.Contains(j)) - continue; - } - result.Add(j); - } - } - } - else - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GButton obj = _children[i].asButton; - if (obj != null && obj.selected) - result.Add(i); - } - } - return result; - } - - /// - /// - /// - /// - /// - public void AddSelection(int index, bool scrollItToView) - { - if (selectionMode == ListSelectionMode.None) - return; - - CheckVirtualList(); - - if (selectionMode == ListSelectionMode.Single) - ClearSelection(); - - if (scrollItToView) - ScrollToView(index); - - _lastSelectedIndex = index; - GButton obj = null; - if (_virtual) - { - ItemInfo ii = _virtualItems[index]; - if (ii.obj != null) - obj = ii.obj.asButton; - ii.selected = true; - } - else - obj = GetChildAt(index).asButton; - - if (obj != null && !obj.selected) - { - obj.selected = true; - UpdateSelectionController(index); - } - } - - /// - /// - /// - /// - public void RemoveSelection(int index) - { - if (selectionMode == ListSelectionMode.None) - return; - - GButton obj = null; - if (_virtual) - { - ItemInfo ii = _virtualItems[index]; - if (ii.obj != null) - obj = ii.obj.asButton; - ii.selected = false; - } - else - obj = GetChildAt(index).asButton; - - if (obj != null) - obj.selected = false; - } - - /// - /// - /// - public void ClearSelection() - { - if (_virtual) - { - int cnt = _realNumItems; - for (int i = 0; i < cnt; i++) - { - ItemInfo ii = _virtualItems[i]; - if ((ii.obj is GButton)) - ((GButton)ii.obj).selected = false; - ii.selected = false; - } - } - else - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GButton obj = _children[i].asButton; - if (obj != null) - obj.selected = false; - } - } - } - - void ClearSelectionExcept(GObject g) - { - if (_virtual) - { - int cnt = _realNumItems; - for (int i = 0; i < cnt; i++) - { - ItemInfo ii = _virtualItems[i]; - if (ii.obj != g) - { - if ((ii.obj is GButton)) - ((GButton)ii.obj).selected = false; - ii.selected = false; - } - } - } - else - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GButton obj = _children[i].asButton; - if (obj != null && obj != g) - obj.selected = false; - } - } - } - - /// - /// - /// - public void SelectAll() - { - CheckVirtualList(); - - int last = -1; - if (_virtual) - { - int cnt = _realNumItems; - for (int i = 0; i < cnt; i++) - { - ItemInfo ii = _virtualItems[i]; - if ((ii.obj is GButton) && !((GButton)ii.obj).selected) - { - ((GButton)ii.obj).selected = true; - last = i; - } - ii.selected = true; - } - } - else - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GButton obj = _children[i].asButton; - if (obj != null && !obj.selected) - { - obj.selected = true; - last = i; - } - } - } - - if (last != -1) - UpdateSelectionController(last); - } - - /// - /// - /// - public void SelectNone() - { - ClearSelection(); - } - - /// - /// - /// - public void SelectReverse() - { - CheckVirtualList(); - - int last = -1; - if (_virtual) - { - int cnt = _realNumItems; - for (int i = 0; i < cnt; i++) - { - ItemInfo ii = _virtualItems[i]; - if ((ii.obj is GButton)) - { - ((GButton)ii.obj).selected = !((GButton)ii.obj).selected; - if (((GButton)ii.obj).selected) - last = i; - } - ii.selected = !ii.selected; - } - } - else - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GButton obj = _children[i].asButton; - if (obj != null) - { - obj.selected = !obj.selected; - if (obj.selected) - last = i; - } - } - } - - if (last != -1) - UpdateSelectionController(last); - } - - /// - /// - /// - /// - public void EnableSelectionFocusEvents(bool enabled) - { - if (((_miscFlags & 2) != 0) == enabled) - return; - - if (enabled) - { - _miscFlags |= 2; - this.tabStopChildren = true; - onFocusIn.Add(NotifySelection); - onFocusOut.Add(NotifySelection); - } - else - { - _miscFlags &= 0xFD; - onFocusIn.Remove(NotifySelection); - onFocusOut.Remove(NotifySelection); - } - } - - void NotifySelection(EventContext context) - { - string eventType = context.type == "onFocusIn" ? "onListFocusIn" : "onListFocusOut"; - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GButton obj = _children[i].asButton; - if (obj != null && obj.selected) - obj.DispatchEvent(eventType); - } - } - - /// - /// - /// - public void EnableArrowKeyNavigation(bool enabled) - { - if (enabled) - { - this.tabStopChildren = true; - onKeyDown.Add(__keydown); - } - else - { - this.tabStopChildren = false; - onKeyDown.Remove(__keydown); - } - } - - void __keydown(EventContext context) - { - int index = -1; - switch (context.inputEvent.keyCode) - { - case KeyCode.LeftArrow: - index = HandleArrowKey(7); - break; - - case KeyCode.RightArrow: - index = HandleArrowKey(3); - break; - - case KeyCode.UpArrow: - index = HandleArrowKey(1); - break; - - case KeyCode.DownArrow: - index = HandleArrowKey(5); - break; - } - - if (index != -1) - { - index = ItemIndexToChildIndex(index); - if (index != -1) - DispatchItemEvent(GetChildAt(index), context); - - context.StopPropagation(); - } - } - - /// - /// - /// - /// - public int HandleArrowKey(int dir) - { - int curIndex = this.selectedIndex; - if (curIndex == -1) - return -1; - - int index = curIndex; - switch (dir) - { - case 1://up - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowVertical) - { - index--; - } - else if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) - { - if (_virtual) - { - index -= _curLineItemCount; - } - else - { - GObject current = _children[index]; - int k = 0; - int i; - for (i = index - 1; i >= 0; i--) - { - GObject obj = _children[i]; - if (obj.y != current.y) - { - current = obj; - break; - } - k++; - } - for (; i >= 0; i--) - { - GObject obj = _children[i]; - if (obj.y != current.y) - { - index = i + k + 1; - break; - } - } - } - } - break; - - case 3://right - if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) - { - index++; - } - else if (_layout == ListLayoutType.FlowVertical) - { - if (_virtual) - { - index += _curLineItemCount; - } - else - { - GObject current = _children[index]; - int k = 0; - int cnt = _children.Count; - int i; - for (i = index + 1; i < cnt; i++) - { - GObject obj = _children[i]; - if (obj.x != current.x) - { - current = obj; - break; - } - k++; - } - for (; i < cnt; i++) - { - GObject obj = _children[i]; - if (obj.x != current.x) - { - index = i - k - 1; - break; - } - } - } - } - break; - - case 5://down - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowVertical) - { - index++; - } - else if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) - { - if (_virtual) - { - index += _curLineItemCount; - } - else - { - GObject current = _children[index]; - int k = 0; - int cnt = _children.Count; - int i; - for (i = index + 1; i < cnt; i++) - { - GObject obj = _children[i]; - if (obj.y != current.y) - { - current = obj; - break; - } - k++; - } - for (; i < cnt; i++) - { - GObject obj = _children[i]; - if (obj.y != current.y) - { - index = i - k - 1; - break; - } - } - } - } - break; - - case 7://left - if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) - { - index--; - } - else if (_layout == ListLayoutType.FlowVertical) - { - if (_virtual) - { - index -= _curLineItemCount; - } - else - { - GObject current = _children[index]; - int k = 0; - int i; - for (i = index - 1; i >= 0; i--) - { - GObject obj = _children[i]; - if (obj.x != current.x) - { - current = obj; - break; - } - k++; - } - for (; i >= 0; i--) - { - GObject obj = _children[i]; - if (obj.x != current.x) - { - index = i + k + 1; - break; - } - } - } - } - break; - } - - if (index != curIndex && index >= 0 && index < this.numItems) - { - ClearSelection(); - AddSelection(index, true); - return index; - } - else - return -1; - } - - void __clickItem(EventContext context) - { - GObject item = context.sender as GObject; - if ((item is GButton) && selectionMode != ListSelectionMode.None) - SetSelectionOnEvent(item, context.inputEvent); - - if (scrollPane != null && scrollItemToViewOnClick) - scrollPane.ScrollToView(item, true); - - DispatchItemEvent(item, context); - } - - virtual protected void DispatchItemEvent(GObject item, EventContext context) - { - if (context.type == item.onRightClick.type) - DispatchEvent("onRightClickItem", item); - else - DispatchEvent("onClickItem", item); - } - - void SetSelectionOnEvent(GObject item, InputEvent evt) - { - bool dontChangeLastIndex = false; - GButton button = (GButton)item; - int index = ChildIndexToItemIndex(GetChildIndex(item)); - - if (selectionMode == ListSelectionMode.Single) - { - if (!button.selected) - { - ClearSelectionExcept(button); - button.selected = true; - } - } - else - { - if (evt.shift) - { - if (!button.selected) - { - if (_lastSelectedIndex != -1) - { - int min = Math.Min(_lastSelectedIndex, index); - int max = Math.Max(_lastSelectedIndex, index); - max = Math.Min(max, this.numItems - 1); - if (_virtual) - { - for (int i = min; i <= max; i++) - { - ItemInfo ii = _virtualItems[i]; - if (ii.obj is GButton) - ((GButton)ii.obj).selected = true; - ii.selected = true; - } - } - else - { - for (int i = min; i <= max; i++) - { - GButton obj = GetChildAt(i).asButton; - if (obj != null && !obj.selected) - obj.selected = true; - } - } - - dontChangeLastIndex = true; - } - else - { - button.selected = true; - } - } - } - else if (evt.ctrlOrCmd || selectionMode == ListSelectionMode.Multiple_SingleClick) - { - button.selected = !button.selected; - } - else - { - if (!button.selected) - { - ClearSelectionExcept(button); - button.selected = true; - } - else if (evt.button == 0) - ClearSelectionExcept(button); - } - } - - if (!dontChangeLastIndex) - _lastSelectedIndex = index; - - if (button.selected) - UpdateSelectionController(index); - } - - /// - /// Resize to list size to fit specified item count. - /// If list layout is single column or flow horizontally, the height will change to fit. - /// If list layout is single row or flow vertically, the width will change to fit. - /// - public void ResizeToFit() - { - ResizeToFit(int.MaxValue, 0); - } - - /// - /// Resize to list size to fit specified item count. - /// If list layout is single column or flow horizontally, the height will change to fit. - /// If list layout is single row or flow vertically, the width will change to fit. - /// - /// Item count - public void ResizeToFit(int itemCount) - { - ResizeToFit(itemCount, 0); - } - - /// - /// Resize to list size to fit specified item count. - /// If list layout is single column or flow horizontally, the height will change to fit. - /// If list layout is single row or flow vertically, the width will change to fit. - /// - /// >Item count - /// If the result size if smaller than minSize, then use minSize. - public void ResizeToFit(int itemCount, int minSize) - { - EnsureBoundsCorrect(); - - int curCount = this.numItems; - if (itemCount > curCount) - itemCount = curCount; - - if (_virtual) - { - int lineCount = Mathf.CeilToInt((float)itemCount / _curLineItemCount); - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - this.viewHeight = lineCount * _itemSize.y + Math.Max(0, lineCount - 1) * _lineGap; - else - this.viewWidth = lineCount * _itemSize.x + Math.Max(0, lineCount - 1) * _columnGap; - } - else if (itemCount == 0) - { - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - this.viewHeight = minSize; - else - this.viewWidth = minSize; - } - else - { - int i = itemCount - 1; - GObject obj = null; - while (i >= 0) - { - obj = this.GetChildAt(i); - if (!foldInvisibleItems || obj.visible) - break; - i--; - } - if (i < 0) - { - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - this.viewHeight = minSize; - else - this.viewWidth = minSize; - } - else - { - float size; - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - { - size = obj.y + obj.height; - if (size < minSize) - size = minSize; - this.viewHeight = size; - } - else - { - size = obj.x + obj.width; - if (size < minSize) - size = minSize; - this.viewWidth = size; - } - } - } - } - - /// - /// - /// - override protected void HandleSizeChanged() - { - base.HandleSizeChanged(); - - SetBoundsChangedFlag(); - if (_virtual) - SetVirtualListChangedFlag(true); - } - - override public void HandleControllerChanged(Controller c) - { - base.HandleControllerChanged(c); - - if (_selectionController == c) - this.selectedIndex = c.selectedIndex; - } - - void UpdateSelectionController(int index) - { - if (_selectionController != null && !_selectionController.changing - && index < _selectionController.pageCount) - { - Controller c = _selectionController; - _selectionController = null; - c.selectedIndex = index; - _selectionController = c; - } - } - - /// - /// Scroll the list to make an item with certain index visible. - /// - /// Item index - public void ScrollToView(int index) - { - ScrollToView(index, false); - } - - /// - /// Scroll the list to make an item with certain index visible. - /// - /// Item index - /// True to scroll smoothly, othewise immdediately. - public void ScrollToView(int index, bool ani) - { - ScrollToView(index, ani, false); - } - - /// - /// Scroll the list to make an item with certain index visible. - /// - /// Item index - /// True to scroll smoothly, othewise immdediately. - /// If true, scroll to make the target on the top/left; If false, scroll to make the target any position in view. - public void ScrollToView(int index, bool ani, bool setFirst) - { - if (_virtual) - { - if (_numItems == 0) - return; - - CheckVirtualList(); - - if (index >= _virtualItems.Count) - throw new Exception("Invalid child index: " + index + ">" + _virtualItems.Count); - - if (_loop) - index = Mathf.FloorToInt((float)_firstIndex / _numItems) * _numItems + index; - - Rect rect; - ItemInfo ii = _virtualItems[index]; - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - { - float pos = 0; - for (int i = _curLineItemCount - 1; i < index; i += _curLineItemCount) - pos += _virtualItems[i].size.y + _lineGap; - rect = new Rect(0, pos, _itemSize.x, ii.size.y); - } - else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) - { - float pos = 0; - for (int i = _curLineItemCount - 1; i < index; i += _curLineItemCount) - pos += _virtualItems[i].size.x + _columnGap; - rect = new Rect(pos, 0, ii.size.x, _itemSize.y); - } - else - { - int page = index / (_curLineItemCount * _curLineItemCount2); - rect = new Rect(page * viewWidth + (index % _curLineItemCount) * (ii.size.x + _columnGap), - (index / _curLineItemCount) % _curLineItemCount2 * (ii.size.y + _lineGap), - ii.size.x, ii.size.y); - } - - if (this.scrollPane != null) - scrollPane.ScrollToView(rect, ani, setFirst); - else if (parent != null && parent.scrollPane != null) - parent.scrollPane.ScrollToView(this.TransformRect(rect, parent), ani, setFirst); - } - else - { - GObject obj = GetChildAt(index); - if (this.scrollPane != null) - scrollPane.ScrollToView(obj, ani, setFirst); - else if (parent != null && parent.scrollPane != null) - parent.scrollPane.ScrollToView(obj, ani, setFirst); - } - } - - /// - /// 获取当前点击哪个item - /// - public GObject touchItem - { - get - { - //find out which item is under finger - //逐层往上知道查到点击了那个item - GObject obj = GRoot.inst.touchTarget; - GObject p = obj.parent; - while (p != null) - { - if (p == this) - return obj; - - obj = p; - p = p.parent; - } - - return null; - } - } - - /// - /// Get first child in view. - /// - /// - public override int GetFirstChildInView() - { - return ChildIndexToItemIndex(base.GetFirstChildInView()); - } - - public int ChildIndexToItemIndex(int index) - { - if (!_virtual) - return index; - - if (_layout == ListLayoutType.Pagination) - { - for (int i = _firstIndex; i < _realNumItems; i++) - { - if (_virtualItems[i].obj != null) - { - index--; - if (index < 0) - return i; - } - } - - return index; - } - else - { - index += _firstIndex; - if (_loop && _numItems > 0) - index = index % _numItems; - - return index; - } - } - - public int ItemIndexToChildIndex(int index) - { - if (!_virtual) - return index; - - if (_layout == ListLayoutType.Pagination) - { - return GetChildIndex(_virtualItems[index].obj); - } - else - { - if (_loop && _numItems > 0) - { - int j = _firstIndex % _numItems; - if (index >= j) - index = index - j; - else - index = _numItems - j + index; - } - else - index -= _firstIndex; - - return index; - } - } - - - /// - /// Set the list to be virtual list. - /// 设置列表为虚拟列表模式。在虚拟列表模式下,列表不会为每一条列表数据创建一个实体对象,而是根据视口大小创建最小量的显示对象,然后通过itemRenderer指定的回调函数设置列表数据。 - /// 在虚拟模式下,你不能通过AddChild、RemoveChild等方式管理列表,只能通过设置numItems设置列表数据的长度。 - /// 如果要刷新列表,可以通过重新设置numItems,或者调用RefreshVirtualList完成。 - /// ‘单行’或者‘单列’的列表布局可支持不等高的列表项目。 - /// 除了‘页面’的列表布局,其他布局均支持使用不同资源构建列表项目,你可以在itemProvider里返回。如果不提供,默认使用defaultItem。 - /// - public void SetVirtual() - { - SetVirtual(false); - } - - public bool isVirtual - { - get { return _virtual; } - } - - /// - /// Set the list to be virtual list, and has loop behavior. - /// - public void SetVirtualAndLoop() - { - SetVirtual(true); - } - - void SetVirtual(bool loop) - { - if (!_virtual) - { - if (this.scrollPane == null) - Debug.LogError("FairyGUI: Virtual list must be scrollable!"); - - if (loop) - { - if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.FlowVertical) - Debug.LogError("FairyGUI: Loop list is not supported for FlowHorizontal or FlowVertical layout!"); - - this.scrollPane.bouncebackEffect = false; - } - - _virtual = true; - _loop = loop; - _virtualItems = new List(); - RemoveChildrenToPool(); - - if (_itemSize.x == 0 || _itemSize.y == 0) - { - GObject obj = GetFromPool(null); - if (obj == null) - { - Debug.LogError("FairyGUI: Virtual List must have a default list item resource."); - _itemSize = new Vector2(100, 100); - } - else - { - _itemSize = obj.size; - _itemSize.x = Mathf.CeilToInt(_itemSize.x); - _itemSize.y = Mathf.CeilToInt(_itemSize.y); - ReturnToPool(obj); - } - } - - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - { - this.scrollPane.scrollStep = _itemSize.y; - if (_loop) - this.scrollPane._loop = 2; - } - else - { - this.scrollPane.scrollStep = _itemSize.x; - if (_loop) - this.scrollPane._loop = 1; - } - - this.scrollPane.onScroll.AddCapture(__scrolled); - SetVirtualListChangedFlag(true); - } - } - - /// - /// Set the list item count. - /// If the list is not virtual, specified number of items will be created. - /// If the list is virtual, only items in view will be created. - /// - public int numItems - { - get - { - if (_virtual) - return _numItems; - else - return _children.Count; - } - set - { - if (_virtual) - { - if (itemRenderer == null) - throw new Exception("FairyGUI: Set itemRenderer first!"); - - _numItems = value; - if (_loop) - _realNumItems = _numItems * 6;//设置6倍数量,用于循环滚动 - else - _realNumItems = _numItems; - - //_virtualItems的设计是只增不减的 - int oldCount = _virtualItems.Count; - if (_realNumItems > oldCount) - { - for (int i = oldCount; i < _realNumItems; i++) - { - ItemInfo ii = new ItemInfo(); - ii.size = _itemSize; - - _virtualItems.Add(ii); - } - } - else - { - for (int i = _realNumItems; i < oldCount; i++) - _virtualItems[i].selected = false; - } - - if (_virtualListChanged != 0) - Timers.inst.Remove(this.RefreshVirtualList); - //立即刷新 - this.RefreshVirtualList(null); - } - else - { - int cnt = _children.Count; - if (value > cnt) - { - for (int i = cnt; i < value; i++) - { - if (itemProvider == null) - AddItemFromPool(); - else - AddItemFromPool(itemProvider(i)); - } - } - else - { - RemoveChildrenToPool(value, cnt); - } - - if (itemRenderer != null) - { - for (int i = 0; i < value; i++) - itemRenderer(i, GetChildAt(i)); - } - } - } - } - - public void RefreshVirtualList() - { - if (!_virtual) - throw new Exception("FairyGUI: not virtual list"); - - SetVirtualListChangedFlag(false); - } - - void CheckVirtualList() - { - if (_virtualListChanged != 0) - { - this.RefreshVirtualList(null); - Timers.inst.Remove(this.RefreshVirtualList); - } - } - - void SetVirtualListChangedFlag(bool layoutChanged) - { - if (layoutChanged) - _virtualListChanged = 2; - else if (_virtualListChanged == 0) - _virtualListChanged = 1; - - Timers.inst.CallLater(RefreshVirtualList); - } - - void RefreshVirtualList(object param) - { - bool layoutChanged = _virtualListChanged == 2; - _virtualListChanged = 0; - _miscFlags |= 1; - - if (layoutChanged) - { - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.SingleRow) - _curLineItemCount = 1; - else if (_layout == ListLayoutType.FlowHorizontal) - { - if (_columnCount > 0) - _curLineItemCount = _columnCount; - else - { - _curLineItemCount = Mathf.FloorToInt((this.scrollPane.viewWidth + _columnGap) / (_itemSize.x + _columnGap)); - if (_curLineItemCount <= 0) - _curLineItemCount = 1; - } - } - else if (_layout == ListLayoutType.FlowVertical) - { - if (_lineCount > 0) - _curLineItemCount = _lineCount; - else - { - _curLineItemCount = Mathf.FloorToInt((this.scrollPane.viewHeight + _lineGap) / (_itemSize.y + _lineGap)); - if (_curLineItemCount <= 0) - _curLineItemCount = 1; - } - } - else //pagination - { - if (_columnCount > 0) - _curLineItemCount = _columnCount; - else - { - _curLineItemCount = Mathf.FloorToInt((this.scrollPane.viewWidth + _columnGap) / (_itemSize.x + _columnGap)); - if (_curLineItemCount <= 0) - _curLineItemCount = 1; - } - - if (_lineCount > 0) - _curLineItemCount2 = _lineCount; - else - { - _curLineItemCount2 = Mathf.FloorToInt((this.scrollPane.viewHeight + _lineGap) / (_itemSize.y + _lineGap)); - if (_curLineItemCount2 <= 0) - _curLineItemCount2 = 1; - } - } - } - - float ch = 0, cw = 0; - if (_realNumItems > 0) - { - int len = Mathf.CeilToInt((float)_realNumItems / _curLineItemCount) * _curLineItemCount; - int len2 = Math.Min(_curLineItemCount, _realNumItems); - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - { - for (int i = 0; i < len; i += _curLineItemCount) - ch += _virtualItems[i].size.y + _lineGap; - if (ch > 0) - ch -= _lineGap; - - if (_autoResizeItem) - cw = scrollPane.viewWidth; - else - { - for (int i = 0; i < len2; i++) - cw += _virtualItems[i].size.x + _columnGap; - if (cw > 0) - cw -= _columnGap; - } - } - else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) - { - for (int i = 0; i < len; i += _curLineItemCount) - cw += _virtualItems[i].size.x + _columnGap; - if (cw > 0) - cw -= _columnGap; - - if (_autoResizeItem) - ch = this.scrollPane.viewHeight; - else - { - for (int i = 0; i < len2; i++) - ch += _virtualItems[i].size.y + _lineGap; - if (ch > 0) - ch -= _lineGap; - } - } - else - { - int pageCount = Mathf.CeilToInt((float)len / (_curLineItemCount * _curLineItemCount2)); - cw = pageCount * viewWidth; - ch = viewHeight; - } - } - - HandleAlign(cw, ch); - this.scrollPane.SetContentSize(cw, ch); - - _miscFlags &= 0xFE; - - HandleScroll(true); - } - - void __scrolled(EventContext context) - { - HandleScroll(false); - } - - int GetIndexOnPos1(ref float pos, bool forceUpdate) - { - if (_realNumItems < _curLineItemCount) - { - pos = 0; - return 0; - } - - if (numChildren > 0 && !forceUpdate) - { - float pos2 = this.GetChildAt(0).y; - if (pos2 + (_lineGap > 0 ? 0 : -_lineGap) > pos) - { - for (int i = _firstIndex - _curLineItemCount; i >= 0; i -= _curLineItemCount) - { - pos2 -= (_virtualItems[i].size.y + _lineGap); - if (pos2 <= pos) - { - pos = pos2; - return i; - } - } - - pos = 0; - return 0; - } - else - { - float testGap = _lineGap > 0 ? _lineGap : 0; - for (int i = _firstIndex; i < _realNumItems; i += _curLineItemCount) - { - float pos3 = pos2 + _virtualItems[i].size.y; - if (pos3 + testGap > pos) - { - pos = pos2; - return i; - } - pos2 = pos3 + _lineGap; - } - - pos = pos2; - return _realNumItems - _curLineItemCount; - } - } - else - { - float pos2 = 0; - float testGap = _lineGap > 0 ? _lineGap : 0; - for (int i = 0; i < _realNumItems; i += _curLineItemCount) - { - float pos3 = pos2 + _virtualItems[i].size.y; - if (pos3 + testGap > pos) - { - pos = pos2; - return i; - } - pos2 = pos3 + _lineGap; - } - - pos = pos2; - return _realNumItems - _curLineItemCount; - } - } - - int GetIndexOnPos2(ref float pos, bool forceUpdate) - { - if (_realNumItems < _curLineItemCount) - { - pos = 0; - return 0; - } - - if (numChildren > 0 && !forceUpdate) - { - float pos2 = this.GetChildAt(0).x; - if (pos2 + (_columnGap > 0 ? 0 : -_columnGap) > pos) - { - for (int i = _firstIndex - _curLineItemCount; i >= 0; i -= _curLineItemCount) - { - pos2 -= (_virtualItems[i].size.x + _columnGap); - if (pos2 <= pos) - { - pos = pos2; - return i; - } - } - - pos = 0; - return 0; - } - else - { - float testGap = _columnGap > 0 ? _columnGap : 0; - for (int i = _firstIndex; i < _realNumItems; i += _curLineItemCount) - { - float pos3 = pos2 + _virtualItems[i].size.x; - if (pos3 + testGap > pos) - { - pos = pos2; - return i; - } - pos2 = pos3 + _columnGap; - } - - pos = pos2; - return _realNumItems - _curLineItemCount; - } - } - else - { - float pos2 = 0; - float testGap = _columnGap > 0 ? _columnGap : 0; - for (int i = 0; i < _realNumItems; i += _curLineItemCount) - { - float pos3 = pos2 + _virtualItems[i].size.x; - if (pos3 + testGap > pos) - { - pos = pos2; - return i; - } - pos2 = pos3 + _columnGap; - } - - pos = pos2; - return _realNumItems - _curLineItemCount; - } - } - - int GetIndexOnPos3(ref float pos, bool forceUpdate) - { - if (_realNumItems < _curLineItemCount) - { - pos = 0; - return 0; - } - - float viewWidth = this.viewWidth; - int page = Mathf.FloorToInt(pos / viewWidth); - int startIndex = page * (_curLineItemCount * _curLineItemCount2); - float pos2 = page * viewWidth; - float testGap = _columnGap > 0 ? _columnGap : 0; - for (int i = 0; i < _curLineItemCount; i++) - { - float pos3 = pos2 + _virtualItems[startIndex + i].size.x; - if (pos3 + testGap > pos) - { - pos = pos2; - return startIndex + i; - } - pos2 = pos3 + _columnGap; - } - - pos = pos2; - return startIndex + _curLineItemCount - 1; - } - - void HandleScroll(bool forceUpdate) - { - if ((_miscFlags & 1) != 0) - return; - - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - { - int enterCounter = 0; - while (HandleScroll1(forceUpdate)) - { - //可能会因为ITEM资源改变导致ITEM大小发生改变,所有出现最后一页填不满的情况,这时要反复尝试填满。 - enterCounter++; - forceUpdate = false; - if (enterCounter > 20) - { - Debug.Log("FairyGUI: list will never be filled as the item renderer function always returns a different size."); - break; - } - } - - HandleArchOrder1(); - } - else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) - { - int enterCounter = 0; - while (HandleScroll2(forceUpdate)) - { - enterCounter++; - forceUpdate = false; - if (enterCounter > 20) - { - Debug.Log("FairyGUI: list will never be filled as the item renderer function always returns a different size."); - break; - } - } - - HandleArchOrder2(); - } - else - { - HandleScroll3(forceUpdate); - } - - _boundsChanged = false; - } - - bool HandleScroll1(bool forceUpdate) - { - float pos = scrollPane.scrollingPosY; - float max = pos + scrollPane.viewHeight; - bool end = max == scrollPane.contentHeight;//这个标志表示当前需要滚动到最末,无论内容变化大小 - - //寻找当前位置的第一条项目 - int newFirstIndex = GetIndexOnPos1(ref pos, forceUpdate); - if (newFirstIndex == _firstIndex && !forceUpdate) - return false; - - int oldFirstIndex = _firstIndex; - _firstIndex = newFirstIndex; - int curIndex = newFirstIndex; - bool forward = oldFirstIndex > newFirstIndex; - int childCount = this.numChildren; - int lastIndex = oldFirstIndex + childCount - 1; - int reuseIndex = forward ? lastIndex : oldFirstIndex; - float curX = 0, curY = pos; - bool needRender; - float deltaSize = 0; - float firstItemDeltaSize = 0; - string url = _defaultItem; - int partSize = (int)((scrollPane.viewWidth - _columnGap * (_curLineItemCount - 1)) / _curLineItemCount); - - itemInfoVer++; - while (curIndex < _realNumItems && (end || curY < max)) - { - ItemInfo ii = _virtualItems[curIndex]; - - if (ii.obj == null || forceUpdate) - { - if (itemProvider != null) - { - url = itemProvider(curIndex % _numItems); - if (url == null) - url = _defaultItem; - url = UIPackage.NormalizeURL(url); - } - - if (ii.obj != null && ii.obj.resourceURL != url) - { - if (ii.obj is GButton) - ii.selected = ((GButton)ii.obj).selected; - RemoveChildToPool(ii.obj); - ii.obj = null; - } - } - - if (ii.obj == null) - { - //搜索最适合的重用item,保证每次刷新需要新建或者重新render的item最少 - if (forward) - { - for (int j = reuseIndex; j >= oldFirstIndex; j--) - { - ItemInfo ii2 = _virtualItems[j]; - if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) - { - if (ii2.obj is GButton) - ii2.selected = ((GButton)ii2.obj).selected; - ii.obj = ii2.obj; - ii2.obj = null; - if (j == reuseIndex) - reuseIndex--; - break; - } - } - } - else - { - for (int j = reuseIndex; j <= lastIndex; j++) - { - ItemInfo ii2 = _virtualItems[j]; - if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) - { - if (ii2.obj is GButton) - ii2.selected = ((GButton)ii2.obj).selected; - ii.obj = ii2.obj; - ii2.obj = null; - if (j == reuseIndex) - reuseIndex++; - break; - } - } - } - - if (ii.obj != null) - { - SetChildIndex(ii.obj, forward ? curIndex - newFirstIndex : numChildren); - } - else - { - ii.obj = _pool.GetObject(url); - if (forward) - this.AddChildAt(ii.obj, curIndex - newFirstIndex); - else - this.AddChild(ii.obj); - } - if (ii.obj is GButton) - ((GButton)ii.obj).selected = ii.selected; - - needRender = true; - } - else - needRender = forceUpdate; - - if (needRender) - { - if (_autoResizeItem && (_layout == ListLayoutType.SingleColumn || _columnCount > 0)) - ii.obj.SetSize(partSize, ii.obj.height, true); - - itemRenderer(curIndex % _numItems, ii.obj); - if (curIndex % _curLineItemCount == 0) - { - deltaSize += Mathf.CeilToInt(ii.obj.size.y) - ii.size.y; - if (curIndex == newFirstIndex && oldFirstIndex > newFirstIndex) - { - //当内容向下滚动时,如果新出现的项目大小发生变化,需要做一个位置补偿,才不会导致滚动跳动 - firstItemDeltaSize = Mathf.CeilToInt(ii.obj.size.y) - ii.size.y; - } - } - ii.size.x = Mathf.CeilToInt(ii.obj.size.x); - ii.size.y = Mathf.CeilToInt(ii.obj.size.y); - } - - ii.updateFlag = itemInfoVer; - ii.obj.SetXY(curX, curY); - if (curIndex == newFirstIndex) //要显示多一条才不会穿帮 - max += ii.size.y; - - curX += ii.size.x + _columnGap; - - if (curIndex % _curLineItemCount == _curLineItemCount - 1) - { - curX = 0; - curY += ii.size.y + _lineGap; - } - curIndex++; - } - - for (int i = 0; i < childCount; i++) - { - ItemInfo ii = _virtualItems[oldFirstIndex + i]; - if (ii.updateFlag != itemInfoVer && ii.obj != null) - { - if (ii.obj is GButton) - ii.selected = ((GButton)ii.obj).selected; - RemoveChildToPool(ii.obj); - ii.obj = null; - } - } - - childCount = _children.Count; - for (int i = 0; i < childCount; i++) - { - GObject obj = _virtualItems[newFirstIndex + i].obj; - if (_children[i] != obj) - SetChildIndex(obj, i); - } - - if (deltaSize != 0 || firstItemDeltaSize != 0) - this.scrollPane.ChangeContentSizeOnScrolling(0, deltaSize, 0, firstItemDeltaSize); - - if (curIndex > 0 && this.numChildren > 0 && this.container.y <= 0 && GetChildAt(0).y > -this.container.y)//最后一页没填满! - return true; - else - return false; - } - - bool HandleScroll2(bool forceUpdate) - { - float pos = scrollPane.scrollingPosX; - float max = pos + scrollPane.viewWidth; - bool end = pos == scrollPane.contentWidth;//这个标志表示当前需要滚动到最末,无论内容变化大小 - - //寻找当前位置的第一条项目 - int newFirstIndex = GetIndexOnPos2(ref pos, forceUpdate); - if (newFirstIndex == _firstIndex && !forceUpdate) - return false; - - int oldFirstIndex = _firstIndex; - _firstIndex = newFirstIndex; - int curIndex = newFirstIndex; - bool forward = oldFirstIndex > newFirstIndex; - int childCount = this.numChildren; - int lastIndex = oldFirstIndex + childCount - 1; - int reuseIndex = forward ? lastIndex : oldFirstIndex; - float curX = pos, curY = 0; - bool needRender; - float deltaSize = 0; - float firstItemDeltaSize = 0; - string url = _defaultItem; - int partSize = (int)((scrollPane.viewHeight - _lineGap * (_curLineItemCount - 1)) / _curLineItemCount); - - itemInfoVer++; - while (curIndex < _realNumItems && (end || curX < max)) - { - ItemInfo ii = _virtualItems[curIndex]; - - if (ii.obj == null || forceUpdate) - { - if (itemProvider != null) - { - url = itemProvider(curIndex % _numItems); - if (url == null) - url = _defaultItem; - url = UIPackage.NormalizeURL(url); - } - - if (ii.obj != null && ii.obj.resourceURL != url) - { - if (ii.obj is GButton) - ii.selected = ((GButton)ii.obj).selected; - RemoveChildToPool(ii.obj); - ii.obj = null; - } - } - - if (ii.obj == null) - { - if (forward) - { - for (int j = reuseIndex; j >= oldFirstIndex; j--) - { - ItemInfo ii2 = _virtualItems[j]; - if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) - { - if (ii2.obj is GButton) - ii2.selected = ((GButton)ii2.obj).selected; - ii.obj = ii2.obj; - ii2.obj = null; - if (j == reuseIndex) - reuseIndex--; - break; - } - } - } - else - { - for (int j = reuseIndex; j <= lastIndex; j++) - { - ItemInfo ii2 = _virtualItems[j]; - if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) - { - if (ii2.obj is GButton) - ii2.selected = ((GButton)ii2.obj).selected; - ii.obj = ii2.obj; - ii2.obj = null; - if (j == reuseIndex) - reuseIndex++; - break; - } - } - } - - if (ii.obj != null) - { - SetChildIndex(ii.obj, forward ? curIndex - newFirstIndex : numChildren); - } - else - { - ii.obj = _pool.GetObject(url); - if (forward) - this.AddChildAt(ii.obj, curIndex - newFirstIndex); - else - this.AddChild(ii.obj); - } - if (ii.obj is GButton) - ((GButton)ii.obj).selected = ii.selected; - - needRender = true; - } - else - needRender = forceUpdate; - - if (needRender) - { - if (_autoResizeItem && (_layout == ListLayoutType.SingleRow || _lineCount > 0)) - ii.obj.SetSize(ii.obj.width, partSize, true); - - itemRenderer(curIndex % _numItems, ii.obj); - if (curIndex % _curLineItemCount == 0) - { - deltaSize += Mathf.CeilToInt(ii.obj.size.x) - ii.size.x; - if (curIndex == newFirstIndex && oldFirstIndex > newFirstIndex) - { - //当内容向下滚动时,如果新出现的一个项目大小发生变化,需要做一个位置补偿,才不会导致滚动跳动 - firstItemDeltaSize = Mathf.CeilToInt(ii.obj.size.x) - ii.size.x; - } - } - ii.size.x = Mathf.CeilToInt(ii.obj.size.x); - ii.size.y = Mathf.CeilToInt(ii.obj.size.y); - } - - ii.updateFlag = itemInfoVer; - ii.obj.SetXY(curX, curY); - if (curIndex == newFirstIndex) //要显示多一条才不会穿帮 - max += ii.size.x; - - curY += ii.size.y + _lineGap; - - if (curIndex % _curLineItemCount == _curLineItemCount - 1) - { - curY = 0; - curX += ii.size.x + _columnGap; - } - curIndex++; - } - - for (int i = 0; i < childCount; i++) - { - ItemInfo ii = _virtualItems[oldFirstIndex + i]; - if (ii.updateFlag != itemInfoVer && ii.obj != null) - { - if (ii.obj is GButton) - ii.selected = ((GButton)ii.obj).selected; - RemoveChildToPool(ii.obj); - ii.obj = null; - } - } - - childCount = _children.Count; - for (int i = 0; i < childCount; i++) - { - GObject obj = _virtualItems[newFirstIndex + i].obj; - if (_children[i] != obj) - SetChildIndex(obj, i); - } - - if (deltaSize != 0 || firstItemDeltaSize != 0) - this.scrollPane.ChangeContentSizeOnScrolling(deltaSize, 0, firstItemDeltaSize, 0); - - if (curIndex > 0 && this.numChildren > 0 && this.container.x <= 0 && GetChildAt(0).x > -this.container.x)//最后一页没填满! - return true; - else - return false; - } - - void HandleScroll3(bool forceUpdate) - { - float pos = scrollPane.scrollingPosX; - - //寻找当前位置的第一条项目 - int newFirstIndex = GetIndexOnPos3(ref pos, forceUpdate); - if (newFirstIndex == _firstIndex && !forceUpdate) - return; - - int oldFirstIndex = _firstIndex; - _firstIndex = newFirstIndex; - - //分页模式不支持不等高,所以渲染满一页就好了 - - int reuseIndex = oldFirstIndex; - int virtualItemCount = _virtualItems.Count; - int pageSize = _curLineItemCount * _curLineItemCount2; - int startCol = newFirstIndex % _curLineItemCount; - float viewWidth = this.viewWidth; - int page = (int)(newFirstIndex / pageSize); - int startIndex = page * pageSize; - int lastIndex = startIndex + pageSize * 2; //测试两页 - bool needRender; - string url = _defaultItem; - int partWidth = (int)((scrollPane.viewWidth - _columnGap * (_curLineItemCount - 1)) / _curLineItemCount); - int partHeight = (int)((scrollPane.viewHeight - _lineGap * (_curLineItemCount2 - 1)) / _curLineItemCount2); - itemInfoVer++; - - //先标记这次要用到的项目 - for (int i = startIndex; i < lastIndex; i++) - { - if (i >= _realNumItems) - continue; - - int col = i % _curLineItemCount; - if (i - startIndex < pageSize) - { - if (col < startCol) - continue; - } - else - { - if (col > startCol) - continue; - } - - ItemInfo ii = _virtualItems[i]; - ii.updateFlag = itemInfoVer; - } - - GObject lastObj = null; - int insertIndex = 0; - for (int i = startIndex; i < lastIndex; i++) - { - if (i >= _realNumItems) - continue; - - ItemInfo ii = _virtualItems[i]; - if (ii.updateFlag != itemInfoVer) - continue; - - if (ii.obj == null) - { - //寻找看有没有可重用的 - while (reuseIndex < virtualItemCount) - { - ItemInfo ii2 = _virtualItems[reuseIndex]; - if (ii2.obj != null && ii2.updateFlag != itemInfoVer) - { - if (ii2.obj is GButton) - ii2.selected = ((GButton)ii2.obj).selected; - ii.obj = ii2.obj; - ii2.obj = null; - break; - } - reuseIndex++; - } - - if (insertIndex == -1) - insertIndex = GetChildIndex(lastObj) + 1; - - if (ii.obj == null) - { - if (itemProvider != null) - { - url = itemProvider(i % _numItems); - if (url == null) - url = _defaultItem; - url = UIPackage.NormalizeURL(url); - } - - ii.obj = _pool.GetObject(url); - this.AddChildAt(ii.obj, insertIndex); - } - else - { - insertIndex = SetChildIndexBefore(ii.obj, insertIndex); - } - insertIndex++; - - if (ii.obj is GButton) - ((GButton)ii.obj).selected = ii.selected; - - needRender = true; - } - else - { - needRender = forceUpdate; - insertIndex = -1; - lastObj = ii.obj; - } - - if (needRender) - { - if (_autoResizeItem) - { - if (_curLineItemCount == _columnCount && _curLineItemCount2 == _lineCount) - ii.obj.SetSize(partWidth, partHeight, true); - else if (_curLineItemCount == _columnCount) - ii.obj.SetSize(partWidth, ii.obj.height, true); - else if (_curLineItemCount2 == _lineCount) - ii.obj.SetSize(ii.obj.width, partHeight, true); - } - - itemRenderer(i % _numItems, ii.obj); - ii.size.x = Mathf.CeilToInt(ii.obj.size.x); - ii.size.y = Mathf.CeilToInt(ii.obj.size.y); - } - } - - //排列item - float borderX = (startIndex / pageSize) * viewWidth; - float xx = borderX; - float yy = 0; - float lineHeight = 0; - for (int i = startIndex; i < lastIndex; i++) - { - if (i >= _realNumItems) - continue; - - ItemInfo ii = _virtualItems[i]; - if (ii.updateFlag == itemInfoVer) - ii.obj.SetXY(xx, yy); - - if (ii.size.y > lineHeight) - lineHeight = ii.size.y; - if (i % _curLineItemCount == _curLineItemCount - 1) - { - xx = borderX; - yy += lineHeight + _lineGap; - lineHeight = 0; - - if (i == startIndex + pageSize - 1) - { - borderX += viewWidth; - xx = borderX; - yy = 0; - } - } - else - xx += ii.size.x + _columnGap; - } - - //释放未使用的 - for (int i = reuseIndex; i < virtualItemCount; i++) - { - ItemInfo ii = _virtualItems[i]; - if (ii.updateFlag != itemInfoVer && ii.obj != null) - { - if (ii.obj is GButton) - ii.selected = ((GButton)ii.obj).selected; - RemoveChildToPool(ii.obj); - ii.obj = null; - } - } - } - - void HandleArchOrder1() - { - if (this.childrenRenderOrder == ChildrenRenderOrder.Arch) - { - float mid = this.scrollPane.posY + this.viewHeight / 2; - float minDist = int.MaxValue, dist; - int apexIndex = 0; - int cnt = this.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject obj = GetChildAt(i); - if (!foldInvisibleItems || obj.visible) - { - dist = Mathf.Abs(mid - obj.y - obj.height / 2); - if (dist < minDist) - { - minDist = dist; - apexIndex = i; - } - } - } - this.apexIndex = apexIndex; - } - } - - void HandleArchOrder2() - { - if (this.childrenRenderOrder == ChildrenRenderOrder.Arch) - { - float mid = this.scrollPane.posX + this.viewWidth / 2; - float minDist = int.MaxValue, dist; - int apexIndex = 0; - int cnt = this.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject obj = GetChildAt(i); - if (!foldInvisibleItems || obj.visible) - { - dist = Mathf.Abs(mid - obj.x - obj.width / 2); - if (dist < minDist) - { - minDist = dist; - apexIndex = i; - } - } - } - this.apexIndex = apexIndex; - } - } - - override public void GetSnappingPositionWithDir(ref float xValue, ref float yValue, float xDir, float yDir) - { - if (_virtual) - { - if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) - { - float saved = yValue; - int index = GetIndexOnPos1(ref yValue, false); - if (index < _virtualItems.Count && index < _realNumItems) - { - float size = _virtualItems[index].size.y; - if (ShouldSnapToNext(yDir, saved - yValue, size)) - yValue += size + _lineGap; - } - } - else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) - { - float saved = xValue; - int index = GetIndexOnPos2(ref xValue, false); - if (index < _virtualItems.Count && index < _realNumItems) - { - float size = _virtualItems[index].size.x; - if (ShouldSnapToNext(xDir, saved - xValue, size)) - xValue += size + _columnGap; - } - } - else - { - float saved = xValue; - int index = GetIndexOnPos3(ref xValue, false); - if (index < _virtualItems.Count && index < _realNumItems) - { - float size = _virtualItems[index].size.x; - if (ShouldSnapToNext(xDir, saved - xValue, size)) - xValue += size + _columnGap; - } - } - } - else - base.GetSnappingPositionWithDir(ref xValue, ref yValue, xDir, yDir); - } - - private void HandleAlign(float contentWidth, float contentHeight) - { - Vector2 newOffset = Vector2.zero; - - if (contentHeight < viewHeight) - { - if (_verticalAlign == VertAlignType.Middle) - newOffset.y = (int)((viewHeight - contentHeight) / 2); - else if (_verticalAlign == VertAlignType.Bottom) - newOffset.y = viewHeight - contentHeight; - } - - if (contentWidth < this.viewWidth) - { - if (_align == AlignType.Center) - newOffset.x = (int)((viewWidth - contentWidth) / 2); - else if (_align == AlignType.Right) - newOffset.x = viewWidth - contentWidth; - } - - if (newOffset != _alignOffset) - { - _alignOffset = newOffset; - if (scrollPane != null) - scrollPane.AdjustMaskContainer(); - else - container.SetXY(_margin.left + _alignOffset.x, _margin.top + _alignOffset.y); - } - } - - override protected void UpdateBounds() - { - if (_virtual) - return; - - int cnt = _children.Count; - int i; - int j = 0; - GObject child; - float curX = 0; - float curY = 0; - float cw, ch; - float maxWidth = 0; - float maxHeight = 0; - float viewWidth = this.viewWidth; - float viewHeight = this.viewHeight; - - if (_layout == ListLayoutType.SingleColumn) - { - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - if (curY != 0) - curY += _lineGap; - child.y = curY; - if (_autoResizeItem) - child.SetSize(viewWidth, child.height, true); - curY += Mathf.CeilToInt(child.height); - if (child.width > maxWidth) - maxWidth = child.width; - } - - ch = curY; - if (ch <= viewHeight && _autoResizeItem && scrollPane != null && scrollPane._displayInDemand && scrollPane.vtScrollBar != null) - { - viewWidth += scrollPane.vtScrollBar.width; - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - child.SetSize(viewWidth, child.height, true); - } - } - cw = Mathf.CeilToInt(maxWidth); - } - else if (_layout == ListLayoutType.SingleRow) - { - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - if (curX != 0) - curX += _columnGap; - child.x = curX; - if (_autoResizeItem) - child.SetSize(child.width, viewHeight, true); - curX += Mathf.CeilToInt(child.width); - if (child.height > maxHeight) - maxHeight = child.height; - } - - cw = curX; - if (cw <= viewWidth && _autoResizeItem && scrollPane != null && scrollPane._displayInDemand && scrollPane.hzScrollBar != null) - { - viewHeight += scrollPane.hzScrollBar.height; - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - child.SetSize(child.width, viewHeight, true); - } - } - ch = Mathf.CeilToInt(maxHeight); - } - else if (_layout == ListLayoutType.FlowHorizontal) - { - if (_autoResizeItem && _columnCount > 0) - { - float lineSize = 0; - int lineStart = 0; - float remainSize; - float remainPercent; - - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - lineSize += child.sourceWidth; - j++; - if (j == _columnCount || i == cnt - 1) - { - remainSize = viewWidth - (j - 1) * _columnGap; - remainPercent = 1; - curX = 0; - for (j = lineStart; j <= i; j++) - { - child = GetChildAt(j); - if (foldInvisibleItems && !child.visible) - continue; - - child.SetXY(curX, curY); - float perc = child.sourceWidth / lineSize; - child.SetSize(Mathf.Round(perc / remainPercent * remainSize), child.height, true); - remainSize -= child.width; - remainPercent -= perc; - curX += child.width + _columnGap; - - if (child.height > maxHeight) - maxHeight = child.height; - } - //new line - curY += Mathf.CeilToInt(maxHeight) + _lineGap; - maxHeight = 0; - j = 0; - lineStart = i + 1; - lineSize = 0; - } - } - ch = curY + Mathf.CeilToInt(maxHeight); - cw = viewWidth; - } - else - { - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - if (curX != 0) - curX += _columnGap; - - if (_columnCount != 0 && j >= _columnCount - || _columnCount == 0 && curX + child.width > viewWidth && maxHeight != 0) - { - //new line - curX = 0; - curY += Mathf.CeilToInt(maxHeight) + _lineGap; - maxHeight = 0; - j = 0; - } - child.SetXY(curX, curY); - curX += Mathf.CeilToInt(child.width); - if (curX > maxWidth) - maxWidth = curX; - if (child.height > maxHeight) - maxHeight = child.height; - j++; - } - ch = curY + Mathf.CeilToInt(maxHeight); - cw = Mathf.CeilToInt(maxWidth); - } - } - else if (_layout == ListLayoutType.FlowVertical) - { - if (_autoResizeItem && _lineCount > 0) - { - float lineSize = 0; - int lineStart = 0; - float remainSize; - float remainPercent; - - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - lineSize += child.sourceHeight; - j++; - if (j == _lineCount || i == cnt - 1) - { - remainSize = viewHeight - (j - 1) * _lineGap; - remainPercent = 1; - curY = 0; - for (j = lineStart; j <= i; j++) - { - child = GetChildAt(j); - if (foldInvisibleItems && !child.visible) - continue; - - child.SetXY(curX, curY); - float perc = child.sourceHeight / lineSize; - child.SetSize(child.width, Mathf.Round(perc / remainPercent * remainSize), true); - remainSize -= child.height; - remainPercent -= perc; - curY += child.height + _lineGap; - - if (child.width > maxWidth) - maxWidth = child.width; - } - //new line - curX += Mathf.CeilToInt(maxWidth) + _columnGap; - maxWidth = 0; - j = 0; - lineStart = i + 1; - lineSize = 0; - } - } - cw = curX + Mathf.CeilToInt(maxWidth); - ch = viewHeight; - } - else - { - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - if (curY != 0) - curY += _lineGap; - - if (_lineCount != 0 && j >= _lineCount - || _lineCount == 0 && curY + child.height > viewHeight && maxWidth != 0) - { - curY = 0; - curX += Mathf.CeilToInt(maxWidth) + _columnGap; - maxWidth = 0; - j = 0; - } - child.SetXY(curX, curY); - curY += child.height; - if (curY > maxHeight) - maxHeight = curY; - if (child.width > maxWidth) - maxWidth = child.width; - j++; - } - cw = curX + Mathf.CeilToInt(maxWidth); - ch = Mathf.CeilToInt(maxHeight); - } - } - else //pagination - { - int page = 0; - int k = 0; - float eachHeight = 0; - if (_autoResizeItem && _lineCount > 0) - eachHeight = Mathf.Floor((viewHeight - (_lineCount - 1) * _lineGap) / _lineCount); - - if (_autoResizeItem && _columnCount > 0) - { - float lineSize = 0; - int lineStart = 0; - float remainSize; - float remainPercent; - - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - if (j == 0 && (_lineCount != 0 && k >= _lineCount - || _lineCount == 0 && curY + (_lineCount > 0 ? eachHeight : child.height) > viewHeight)) - { - //new page - page++; - curY = 0; - k = 0; - } - - lineSize += child.sourceWidth; - j++; - if (j == _columnCount || i == cnt - 1) - { - remainSize = viewWidth - (j - 1) * _columnGap; - remainPercent = 1; - curX = 0; - for (j = lineStart; j <= i; j++) - { - child = GetChildAt(j); - if (foldInvisibleItems && !child.visible) - continue; - - child.SetXY(page * viewWidth + curX, curY); - float perc = child.sourceWidth / lineSize; - child.SetSize(Mathf.Round(perc / remainPercent * remainSize), _lineCount > 0 ? eachHeight : child.height, true); - remainSize -= child.width; - remainPercent -= perc; - curX += child.width + _columnGap; - - if (child.height > maxHeight) - maxHeight = child.height; - } - //new line - curY += Mathf.CeilToInt(maxHeight) + _lineGap; - maxHeight = 0; - j = 0; - lineStart = i + 1; - lineSize = 0; - - k++; - } - } - } - else - { - for (i = 0; i < cnt; i++) - { - child = GetChildAt(i); - if (foldInvisibleItems && !child.visible) - continue; - - if (curX != 0) - curX += _columnGap; - - if (_autoResizeItem && _lineCount > 0) - child.SetSize(child.width, eachHeight, true); - - if (_columnCount != 0 && j >= _columnCount - || _columnCount == 0 && curX + child.width > viewWidth && maxHeight != 0) - { - curX = 0; - curY += maxHeight + _lineGap; - maxHeight = 0; - j = 0; - k++; - - if (_lineCount != 0 && k >= _lineCount - || _lineCount == 0 && curY + child.height > viewHeight && maxWidth != 0)//new page - { - page++; - curY = 0; - k = 0; - } - } - child.SetXY(page * viewWidth + curX, curY); - curX += Mathf.CeilToInt(child.width); - if (curX > maxWidth) - maxWidth = curX; - if (child.height > maxHeight) - maxHeight = child.height; - j++; - } - } - ch = page > 0 ? viewHeight : (curY + Mathf.CeilToInt(maxHeight)); - cw = (page + 1) * viewWidth; - } - - HandleAlign(cw, ch); - SetBounds(0, 0, cw, ch); - - InvalidateBatchingState(true); - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - _layout = (ListLayoutType)buffer.ReadByte(); - selectionMode = (ListSelectionMode)buffer.ReadByte(); - _align = (AlignType)buffer.ReadByte(); - _verticalAlign = (VertAlignType)buffer.ReadByte(); - _lineGap = buffer.ReadShort(); - _columnGap = buffer.ReadShort(); - _lineCount = buffer.ReadShort(); - _columnCount = buffer.ReadShort(); - _autoResizeItem = buffer.ReadBool(); - _childrenRenderOrder = (ChildrenRenderOrder)buffer.ReadByte(); - _apexIndex = buffer.ReadShort(); - - if (buffer.ReadBool()) - { - _margin.top = buffer.ReadInt(); - _margin.bottom = buffer.ReadInt(); - _margin.left = buffer.ReadInt(); - _margin.right = buffer.ReadInt(); - } - - OverflowType overflow = (OverflowType)buffer.ReadByte(); - if (overflow == OverflowType.Scroll) - { - int savedPos = buffer.position; - buffer.Seek(beginPos, 7); - SetupScroll(buffer); - buffer.position = savedPos; - } - else - SetupOverflow(overflow); - - if (buffer.ReadBool()) - { - int i1 = buffer.ReadInt(); - int i2 = buffer.ReadInt(); - this.clipSoftness = new Vector2(i1, i2); - } - - if (buffer.version >= 2) - { - scrollItemToViewOnClick = buffer.ReadBool(); - foldInvisibleItems = buffer.ReadBool(); - } - - buffer.Seek(beginPos, 8); - - _defaultItem = buffer.ReadS(); - ReadItems(buffer); - } - - virtual protected void ReadItems(ByteBuffer buffer) - { - int itemCount = buffer.ReadShort(); - for (int i = 0; i < itemCount; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - string str = buffer.ReadS(); - if (str == null) - { - str = _defaultItem; - if (string.IsNullOrEmpty(str)) - { - buffer.position = nextPos; - continue; - } - } - - GObject obj = GetFromPool(str); - if (obj != null) - { - AddChild(obj); - SetupItem(buffer, obj); - } - - buffer.position = nextPos; - } - } - - protected void SetupItem(ByteBuffer buffer, GObject obj) - { - string str; - str = buffer.ReadS(); - if (str != null) - obj.text = str; - str = buffer.ReadS(); - if (str != null && (obj is GButton)) - (obj as GButton).selectedTitle = str; - str = buffer.ReadS(); - if (str != null) - obj.icon = str; - str = buffer.ReadS(); - if (str != null && (obj is GButton)) - (obj as GButton).selectedIcon = str; - str = buffer.ReadS(); - if (str != null) - obj.name = str; - - if (obj is GComponent) - { - int cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - Controller cc = ((GComponent)obj).GetController(buffer.ReadS()); - str = buffer.ReadS(); - if (cc != null) - cc.selectedPageId = str; - } - - if (buffer.version >= 2) - { - cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - string target = buffer.ReadS(); - int propertyId = buffer.ReadShort(); - string value = buffer.ReadS(); - GObject obj2 = ((GComponent)obj).GetChildByPath(target); - if (obj2 != null) - { - if (propertyId == 0) - obj2.text = value; - else if (propertyId == 1) - obj2.icon = value; - } - } - } - } - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - buffer.Seek(beginPos, 6); - - int i = buffer.ReadShort(); - if (i != -1) - _selectionController = parent.GetControllerAt(i); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs.meta deleted file mode 100644 index a7975a0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: f5eda689519c51b42955139d2c6caba4 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs deleted file mode 100644 index 8adf74d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs +++ /dev/null @@ -1,732 +0,0 @@ -using System; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GLoader class - /// - public class GLoader : GObject, IAnimationGear, IColorGear - { - /// - /// Display an error sign if the loader fails to load the content. - /// UIConfig.loaderErrorSign muse be set. - /// - public bool showErrorSign; - - string _url; - AlignType _align; - VertAlignType _verticalAlign; - bool _autoSize; - FillType _fill; - bool _shrinkOnly; - bool _useResize; - bool _updatingLayout; - PackageItem _contentItem; - Action _reloadDelegate; - - MovieClip _content; - GObject _errorSign; - GComponent _content2; - -#if FAIRYGUI_PUERTS - public Action __loadExternal; - public Action __freeExternal; -#endif - - public GLoader() - { - _url = string.Empty; - _align = AlignType.Left; - _verticalAlign = VertAlignType.Top; - showErrorSign = true; - _reloadDelegate = OnExternalReload; - } - - override protected void CreateDisplayObject() - { - displayObject = new Container("GLoader"); - displayObject.gOwner = this; - _content = new MovieClip(); - ((Container)displayObject).AddChild(_content); - ((Container)displayObject).opaque = true; - } - - override public void Dispose() - { - if (_disposed) return; - - if (_content.texture != null) - { - if (_contentItem == null) - { - _content.texture.onSizeChanged -= _reloadDelegate; - try - { - FreeExternal(_content.texture); - } - catch (Exception err) - { - Debug.LogWarning(err); - } - } - } - if (_errorSign != null) - _errorSign.Dispose(); - if (_content2 != null) - _content2.Dispose(); - _content.Dispose(); - - base.Dispose(); - } - - /// - /// - /// - public string url - { - get { return _url; } - set - { - if (_url == value) - return; - - ClearContent(); - _url = value; - LoadContent(); - UpdateGear(7); - } - } - - override public string icon - { - get { return _url; } - set { this.url = value; } - } - - /// - /// - /// - public AlignType align - { - get { return _align; } - set - { - if (_align != value) - { - _align = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public VertAlignType verticalAlign - { - get { return _verticalAlign; } - set - { - if (_verticalAlign != value) - { - _verticalAlign = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public FillType fill - { - get { return _fill; } - set - { - if (_fill != value) - { - _fill = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public bool useResize - { - get { return _useResize; } - set - { - if (_useResize != value) - { - _useResize = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public bool shrinkOnly - { - get { return _shrinkOnly; } - set - { - if (_shrinkOnly != value) - { - _shrinkOnly = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public bool autoSize - { - get { return _autoSize; } - set - { - if (_autoSize != value) - { - _autoSize = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public bool playing - { - get { return _content.playing; } - set - { - _content.playing = value; - UpdateGear(5); - } - } - - /// - /// - /// - public int frame - { - get { return _content.frame; } - set - { - _content.frame = value; - UpdateGear(5); - } - } - - /// - /// - /// - public float timeScale - { - get { return _content.timeScale; } - set { _content.timeScale = value; } - } - - /// - /// - /// - public bool ignoreEngineTimeScale - { - get { return _content.ignoreEngineTimeScale; } - set { _content.ignoreEngineTimeScale = value; } - } - - /// - /// - /// - /// - public void Advance(float time) - { - _content.Advance(time); - } - - /// - /// - /// - public Material material - { - get { return _content.material; } - set { _content.material = value; } - } - - /// - /// - /// - public string shader - { - get { return _content.shader; } - set { _content.shader = value; } - } - - /// - /// - /// - public Color color - { - get { return _content.color; } - set - { - if (_content.color != value) - { - _content.color = value; - UpdateGear(4); - } - } - } - - /// - /// - /// - public FillMethod fillMethod - { - get { return _content.fillMethod; } - set { _content.fillMethod = value; } - } - - /// - /// - /// - public int fillOrigin - { - get { return _content.fillOrigin; } - set { _content.fillOrigin = value; } - } - - /// - /// - /// - public bool fillClockwise - { - get { return _content.fillClockwise; } - set { _content.fillClockwise = value; } - } - - /// - /// - /// - public float fillAmount - { - get { return _content.fillAmount; } - set { _content.fillAmount = value; } - } - - /// - /// - /// - public Image image - { - get { return _content; } - } - - /// - /// - /// - public MovieClip movieClip - { - get { return _content; } - } - - /// - /// - /// - public GComponent component - { - get { return _content2; } - } - - /// - /// - /// - public NTexture texture - { - get - { - return _content.texture; - } - - set - { - this.url = null; - - _content.texture = value; - if (value != null) - { - sourceWidth = value.width; - sourceHeight = value.height; - } - else - { - sourceWidth = sourceHeight = 0; - } - - UpdateLayout(); - } - } - - override public IFilter filter - { - get { return _content.filter; } - set { _content.filter = value; } - } - - override public BlendMode blendMode - { - get { return _content.blendMode; } - set { _content.blendMode = value; } - } - - /// - /// - /// - protected void LoadContent() - { - ClearContent(); - - if (string.IsNullOrEmpty(_url)) - return; - - if (_url.StartsWith(UIPackage.URL_PREFIX)) - LoadFromPackage(_url); - else - LoadExternal(); - } - - protected void LoadFromPackage(string itemURL) - { - _contentItem = UIPackage.GetItemByURL(itemURL); - - if (_contentItem != null) - { - _contentItem = _contentItem.getBranch(); - sourceWidth = _contentItem.width; - sourceHeight = _contentItem.height; - _contentItem = _contentItem.getHighResolution(); - _contentItem.Load(); - - if (_contentItem.type == PackageItemType.Image) - { - _content.texture = _contentItem.texture; - _content.textureScale = new Vector2(_contentItem.width / (float)sourceWidth, _contentItem.height / (float)sourceHeight); - _content.scale9Grid = _contentItem.scale9Grid; - _content.scaleByTile = _contentItem.scaleByTile; - _content.tileGridIndice = _contentItem.tileGridIndice; - - UpdateLayout(); - } - else if (_contentItem.type == PackageItemType.MovieClip) - { - _content.interval = _contentItem.interval; - _content.swing = _contentItem.swing; - _content.repeatDelay = _contentItem.repeatDelay; - _content.frames = _contentItem.frames; - - UpdateLayout(); - } - else if (_contentItem.type == PackageItemType.Component) - { - GObject obj = UIPackage.CreateObjectFromURL(itemURL); - if (obj == null) - SetErrorState(); - else if (!(obj is GComponent)) - { - obj.Dispose(); - SetErrorState(); - } - else - { - _content2 = (GComponent)obj; - ((Container)displayObject).AddChild(_content2.displayObject); - UpdateLayout(); - } - } - else - { - if (_autoSize) - this.SetSize(_contentItem.width, _contentItem.height); - - SetErrorState(); - - Debug.LogWarning("Unsupported type of GLoader: " + _contentItem.type); - } - } - else - SetErrorState(); - } - - virtual protected void LoadExternal() - { -#if FAIRYGUI_PUERTS - if (__loadExternal != null) - { - __loadExternal(); - return; - } -#endif - Texture2D tex = (Texture2D)Resources.Load(_url, typeof(Texture2D)); - if (tex != null) - onExternalLoadSuccess(new NTexture(tex)); - else - onExternalLoadFailed(); - } - - virtual protected void FreeExternal(NTexture texture) - { -#if FAIRYGUI_PUERTS - if (__freeExternal != null) - { - __freeExternal(texture); - return; - } -#endif - } - - public void onExternalLoadSuccess(NTexture texture) - { - _content.texture = texture; - sourceWidth = texture.width; - sourceHeight = texture.height; - _content.scale9Grid = null; - _content.scaleByTile = false; - texture.onSizeChanged += _reloadDelegate; - UpdateLayout(); - } - - public void onExternalLoadFailed() - { - SetErrorState(); - } - - void OnExternalReload(NTexture texture) - { - sourceWidth = texture.width; - sourceHeight = texture.height; - UpdateLayout(); - } - - private void SetErrorState() - { - if (!showErrorSign || !Application.isPlaying) - return; - - if (_errorSign == null) - { - if (UIConfig.loaderErrorSign != null) - _errorSign = UIPackage.CreateObjectFromURL(UIConfig.loaderErrorSign); - else - return; - } - - if (_errorSign != null) - { - _errorSign.SetSize(this.width, this.height); - ((Container)displayObject).AddChild(_errorSign.displayObject); - } - } - - protected void ClearErrorState() - { - if (_errorSign != null && _errorSign.displayObject.parent != null) - ((Container)displayObject).RemoveChild(_errorSign.displayObject); - } - - protected void UpdateLayout() - { - if (_content2 == null && _content.texture == null && _content.frames == null) - { - if (_autoSize) - { - _updatingLayout = true; - SetSize(50, 30); - _updatingLayout = false; - } - return; - } - - float contentWidth = sourceWidth; - float contentHeight = sourceHeight; - - if (_autoSize) - { - _updatingLayout = true; - if (contentWidth == 0) - contentWidth = 50; - if (contentHeight == 0) - contentHeight = 30; - SetSize(contentWidth, contentHeight); - - _updatingLayout = false; - - if (_width == contentWidth && _height == contentHeight) - { - if (_content2 != null) - { - _content2.SetXY(0, 0); - _content2.SetScale(1, 1); - if (_useResize) - _content2.SetSize(contentWidth, contentHeight, true); - } - else - { - _content.SetXY(0, 0); - _content.SetSize(contentWidth, contentHeight); - } - - InvalidateBatchingState(); - return; - } - //如果不相等,可能是由于大小限制造成的,要后续处理 - } - - float sx = 1, sy = 1; - if (_fill != FillType.None) - { - sx = this.width / sourceWidth; - sy = this.height / sourceHeight; - - if (sx != 1 || sy != 1) - { - if (_fill == FillType.ScaleMatchHeight) - sx = sy; - else if (_fill == FillType.ScaleMatchWidth) - sy = sx; - else if (_fill == FillType.Scale) - { - if (sx > sy) - sx = sy; - else - sy = sx; - } - else if (_fill == FillType.ScaleNoBorder) - { - if (sx > sy) - sy = sx; - else - sx = sy; - } - - if (_shrinkOnly) - { - if (sx > 1) - sx = 1; - if (sy > 1) - sy = 1; - } - - contentWidth = sourceWidth * sx; - contentHeight = sourceHeight * sy; - } - } - - if (_content2 != null) - { - if (_useResize) - { - _content2.SetScale(1, 1); - _content2.SetSize(contentWidth, contentHeight, true); - } - else - _content2.SetScale(sx, sy); - } - else - _content.size = new Vector2(contentWidth, contentHeight); - - float nx; - float ny; - if (_align == AlignType.Center) - nx = (this.width - contentWidth) / 2; - else if (_align == AlignType.Right) - nx = this.width - contentWidth; - else - nx = 0; - if (_verticalAlign == VertAlignType.Middle) - ny = (this.height - contentHeight) / 2; - else if (_verticalAlign == VertAlignType.Bottom) - ny = this.height - contentHeight; - else - ny = 0; - if (_content2 != null) - _content2.SetXY(nx, ny); - else - _content.SetXY(nx, ny); - - InvalidateBatchingState(); - } - - private void ClearContent() - { - ClearErrorState(); - - if (_content.texture != null) - { - if (_contentItem == null) - { - _content.texture.onSizeChanged -= _reloadDelegate; - FreeExternal(_content.texture); - } - _content.texture = null; - } - _content.frames = null; - - if (_content2 != null) - { - _content2.Dispose(); - _content2 = null; - } - _contentItem = null; - } - - override protected void HandleSizeChanged() - { - base.HandleSizeChanged(); - - if (!_updatingLayout) - UpdateLayout(); - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - _url = buffer.ReadS(); - _align = (AlignType)buffer.ReadByte(); - _verticalAlign = (VertAlignType)buffer.ReadByte(); - _fill = (FillType)buffer.ReadByte(); - _shrinkOnly = buffer.ReadBool(); - _autoSize = buffer.ReadBool(); - showErrorSign = buffer.ReadBool(); - _content.playing = buffer.ReadBool(); - _content.frame = buffer.ReadInt(); - - if (buffer.ReadBool()) - _content.color = buffer.ReadColor(); - _content.fillMethod = (FillMethod)buffer.ReadByte(); - if (_content.fillMethod != FillMethod.None) - { - _content.fillOrigin = buffer.ReadByte(); - _content.fillClockwise = buffer.ReadBool(); - _content.fillAmount = buffer.ReadFloat(); - } - if (buffer.version >= 7) - _useResize = buffer.ReadBool(); - - if (!string.IsNullOrEmpty(_url)) - LoadContent(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs.meta deleted file mode 100644 index d53397e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 43ce591d02b49e8419c431df4af3da0b -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs deleted file mode 100644 index a9a092d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs +++ /dev/null @@ -1,567 +0,0 @@ -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public partial class GLoader3D : GObject, IAnimationGear, IColorGear - { - string _url; - AlignType _align; - VertAlignType _verticalAlign; - bool _autoSize; - FillType _fill; - bool _shrinkOnly; - string _animationName; - string _skinName; - bool _playing; - int _frame; - bool _loop; - bool _updatingLayout; - Color _color; - - protected PackageItem _contentItem; - protected GoWrapper _content; - - public GLoader3D() - { - _url = string.Empty; - _align = AlignType.Left; - _verticalAlign = VertAlignType.Top; - _playing = true; - _color = Color.white; - } - - override protected void CreateDisplayObject() - { - displayObject = new Container("GLoader3D"); - displayObject.gOwner = this; - - _content = new GoWrapper(); - _content.onUpdate += OnUpdateContent; - ((Container)displayObject).AddChild(_content); - ((Container)displayObject).opaque = true; - } - - override public void Dispose() - { - _content.Dispose(); - base.Dispose(); - } - - /// - /// - /// - public string url - { - get { return _url; } - set - { - if (_url == value) - return; - - ClearContent(); - _url = value; - LoadContent(); - UpdateGear(7); - } - } - - override public string icon - { - get { return _url; } - set { this.url = value; } - } - - /// - /// - /// - public AlignType align - { - get { return _align; } - set - { - if (_align != value) - { - _align = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public VertAlignType verticalAlign - { - get { return _verticalAlign; } - set - { - if (_verticalAlign != value) - { - _verticalAlign = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public FillType fill - { - get { return _fill; } - set - { - if (_fill != value) - { - _fill = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public bool shrinkOnly - { - get { return _shrinkOnly; } - set - { - if (_shrinkOnly != value) - { - _shrinkOnly = value; - UpdateLayout(); - } - } - } - - /// - /// - /// - public bool autoSize - { - get { return _autoSize; } - set - { - if (_autoSize != value) - { - _autoSize = value; - UpdateLayout(); - } - } - } - - public bool playing - { - get { return _playing; } - set - { - if (_playing != value) - { - _playing = value; - OnChange("playing"); - UpdateGear(5); - } - } - } - - public int frame - { - get { return _frame; } - set - { - - if (_frame != value) - { - _frame = value; - OnChange("frame"); - UpdateGear(5); - } - } - } - - /// - /// Not implemented - /// - public float timeScale - { - get; - set; - } - - /// - /// Not implemented - /// - public bool ignoreEngineTimeScale - { - get; - set; - } - - /// - /// Not implemented - /// - /// - public void Advance(float time) - { - } - - /// - /// - /// - public bool loop - { - get { return _loop; } - set - { - if (_loop != value) - { - _loop = value; - OnChange("loop"); - } - } - } - - /// - /// - /// - /// - public string animationName - { - get { return _animationName; } - set - { - _animationName = value; - OnChange("animationName"); - UpdateGear(5); - } - } - - /// - /// - /// - /// - public string skinName - { - get { return _skinName; } - set - { - _skinName = value; - OnChange("skinName"); - UpdateGear(5); - } - } - - /// - /// - /// - public Material material - { - get { return _content.material; } - set { _content.material = value; } - } - - /// - /// - /// - public string shader - { - get { return _content.shader; } - set { _content.shader = value; } - } - - /// - /// - /// - public Color color - { - get { return _color; } - set - { - if (_color != value) - { - _color = value; - UpdateGear(4); - - OnChange("color"); - } - } - } - - /// - /// - /// - public GameObject wrapTarget - { - get { return _content.wrapTarget; } - } - - /// - /// - /// - /// - /// - /// - /// - public void SetWrapTarget(GameObject gameObject, bool cloneMaterial, int width, int height) - { - _content.SetWrapTarget(gameObject, cloneMaterial); - _content.SetSize(width, height); - sourceWidth = width; - sourceHeight = height; - - UpdateLayout(); - } - - override public IFilter filter - { - get { return _content.filter; } - set { _content.filter = value; } - } - - override public BlendMode blendMode - { - get { return _content.blendMode; } - set { _content.blendMode = value; } - } - - /// - /// - /// - protected void LoadContent() - { - ClearContent(); - - if (string.IsNullOrEmpty(_url)) - return; - - _contentItem = UIPackage.GetItemByURL(_url); - - if (_contentItem != null) - { - _contentItem.skeletonLoaders.Add(this); - _contentItem = _contentItem.getBranch(); - _contentItem = _contentItem.getHighResolution(); - _contentItem.Load(); - - if (_contentItem.type == PackageItemType.Spine) - { -#if FAIRYGUI_SPINE - LoadSpine(); -#endif - } - else if (_contentItem.type == PackageItemType.DragoneBones) - { -#if FAIRYGUI_DRAGONBONES - LoadDragonBones(); -#endif - } - } - else - LoadExternal(); - } - - virtual protected void OnChange(string propertyName) - { - if (_contentItem == null) - return; - - - if (_contentItem.type == PackageItemType.Spine) - { -#if FAIRYGUI_SPINE - OnChangeSpine(propertyName); -#endif - } - else if (_contentItem.type == PackageItemType.DragoneBones) - { -#if FAIRYGUI_DRAGONBONES - OnChangeDragonBones(propertyName); -#endif - } - } - - virtual protected void LoadExternal() - { - } - - virtual protected void FreeExternal() - { - GameObject.DestroyImmediate(_content.wrapTarget); - } - - protected void UpdateLayout() - { - if (sourceWidth == 0 || sourceHeight == 0) - return; - - float contentWidth = sourceWidth; - float contentHeight = sourceHeight; - - if (_autoSize) - { - _updatingLayout = true; - if (contentWidth == 0) - contentWidth = 50; - if (contentHeight == 0) - contentHeight = 30; - SetSize(contentWidth, contentHeight); - - _updatingLayout = false; - - if (_width == contentWidth && _height == contentHeight) - { - _content.SetXY(0, 0); - _content.SetScale(1, 1); - - InvalidateBatchingState(); - return; - } - //如果不相等,可能是由于大小限制造成的,要后续处理 - } - - float sx = 1, sy = 1; - if (_fill != FillType.None) - { - sx = this.width / sourceWidth; - sy = this.height / sourceHeight; - - if (sx != 1 || sy != 1) - { - if (_fill == FillType.ScaleMatchHeight) - sx = sy; - else if (_fill == FillType.ScaleMatchWidth) - sy = sx; - else if (_fill == FillType.Scale) - { - if (sx > sy) - sx = sy; - else - sy = sx; - } - else if (_fill == FillType.ScaleNoBorder) - { - if (sx > sy) - sy = sx; - else - sx = sy; - } - - if (_shrinkOnly) - { - if (sx > 1) - sx = 1; - if (sy > 1) - sy = 1; - } - - contentWidth = sourceWidth * sx; - contentHeight = sourceHeight * sy; - } - } - - _content.SetScale(sx, sy); - - float nx; - float ny; - if (_align == AlignType.Center) - nx = (this.width - contentWidth) / 2; - else if (_align == AlignType.Right) - nx = this.width - contentWidth; - else - nx = 0; - if (_verticalAlign == VertAlignType.Middle) - ny = (this.height - contentHeight) / 2; - else if (_verticalAlign == VertAlignType.Bottom) - ny = this.height - contentHeight; - else - ny = 0; - _content.SetXY(nx, ny); - - InvalidateBatchingState(); - } - - protected void ClearContent() - { - if (_content.wrapTarget != null) - { - if (_contentItem != null) - { - if (_contentItem.type == PackageItemType.Spine) - { -#if FAIRYGUI_SPINE - FreeSpine(); -#endif - } - else if (_contentItem.type == PackageItemType.DragoneBones) - { -#if FAIRYGUI_DRAGONBONES - FreeDragonBones(); -#endif - } - } - else - FreeExternal(); - } - _content.wrapTarget = null; - _contentItem = null; - } - - protected void OnUpdateContent(UpdateContext context) - { - if (_contentItem == null) - return; - - - if (_contentItem.type == PackageItemType.Spine) - { -#if FAIRYGUI_SPINE - OnUpdateSpine(context); -#endif - } - else if (_contentItem.type == PackageItemType.DragoneBones) - { -#if FAIRYGUI_DRAGONBONES - OnUpdateDragonBones(context); -#endif - } - } - - override protected void HandleSizeChanged() - { - base.HandleSizeChanged(); - - if (!_updatingLayout) - UpdateLayout(); - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - _url = buffer.ReadS(); - _align = (AlignType)buffer.ReadByte(); - _verticalAlign = (VertAlignType)buffer.ReadByte(); - _fill = (FillType)buffer.ReadByte(); - _shrinkOnly = buffer.ReadBool(); - _autoSize = buffer.ReadBool(); - _animationName = buffer.ReadS(); - _skinName = buffer.ReadS(); - _playing = buffer.ReadBool(); - _frame = buffer.ReadInt(); - _loop = buffer.ReadBool(); - - if (buffer.ReadBool()) - this.color = buffer.ReadColor(); //color - - if (!string.IsNullOrEmpty(_url)) - LoadContent(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs.meta deleted file mode 100644 index 84920c8..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 808355b0b55f945779f2a21d3d69cbfb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs deleted file mode 100644 index 1697a93..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs +++ /dev/null @@ -1,190 +0,0 @@ -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GMovieClip class. - /// - public class GMovieClip : GObject, IAnimationGear, IColorGear - { - MovieClip _content; - EventListener _onPlayEnd; - - public GMovieClip() - { - } - - override protected void CreateDisplayObject() - { - _content = new MovieClip(); - _content.gOwner = this; - _content.ignoreEngineTimeScale = true; - displayObject = _content; - } - - /// - /// - /// - public EventListener onPlayEnd - { - get { return _onPlayEnd ?? (_onPlayEnd = new EventListener(this, "onPlayEnd")); } - } - - /// - /// - /// - public bool playing - { - get { return _content.playing; } - set - { - _content.playing = value; - UpdateGear(5); - } - } - - /// - /// - /// - public int frame - { - get { return _content.frame; } - set - { - _content.frame = value; - UpdateGear(5); - } - } - - /// - /// - /// - public Color color - { - get { return _content.color; } - set - { - _content.color = value; - UpdateGear(4); - } - } - - /// - /// - /// - public FlipType flip - { - get { return _content.graphics.flip; } - set { _content.graphics.flip = value; } - } - - /// - /// - /// - public Material material - { - get { return _content.material; } - set { _content.material = value; } - } - - /// - /// - /// - public string shader - { - get { return _content.shader; } - set { _content.shader = value; } - } - - /// - /// - /// - public float timeScale - { - get { return _content.timeScale; } - set { _content.timeScale = value; } - } - - /// - /// - /// - public bool ignoreEngineTimeScale - { - get { return _content.ignoreEngineTimeScale; } - set { _content.ignoreEngineTimeScale = value; } - } - - /// - /// - /// - public void Rewind() - { - _content.Rewind(); - } - - /// - /// - /// - /// - public void SyncStatus(GMovieClip anotherMc) - { - _content.SyncStatus(anotherMc._content); - } - - /// - /// - /// - /// - public void Advance(float time) - { - _content.Advance(time); - } - - /// - /// Play from the start to end, repeat times, set to endAt on complete. - /// 从start帧开始,播放到end帧(-1表示结尾),重复times次(0表示无限循环),循环结束后,停止在endAt帧(-1表示参数end) - /// - /// Start frame - /// End frame. -1 indicates the last frame. - /// Repeat times. 0 indicates infinite loop. - /// Stop frame. -1 indicates to equal to the end parameter. - public void SetPlaySettings(int start, int end, int times, int endAt) - { - ((MovieClip)displayObject).SetPlaySettings(start, end, times, endAt); - } - - override public void ConstructFromResource() - { - this.gameObjectName = packageItem.name; - - PackageItem contentItem = packageItem.getBranch(); - sourceWidth = contentItem.width; - sourceHeight = contentItem.height; - initWidth = sourceWidth; - initHeight = sourceHeight; - contentItem = contentItem.getHighResolution(); - contentItem.Load(); - - _content.interval = contentItem.interval; - _content.swing = contentItem.swing; - _content.repeatDelay = contentItem.repeatDelay; - _content.frames = contentItem.frames; - - SetSize(sourceWidth, sourceHeight); - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - if (buffer.ReadBool()) - _content.color = buffer.ReadColor(); - _content.graphics.flip = (FlipType)buffer.ReadByte(); - _content.frame = buffer.ReadInt(); - _content.playing = buffer.ReadBool(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs.meta deleted file mode 100644 index 43a15a2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 158e4b32fb035414091844233b2b9269 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs deleted file mode 100644 index 288a852..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs +++ /dev/null @@ -1,2187 +0,0 @@ -using System; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - public class GObject : EventDispatcher - { - /// - /// GObject的id,仅作为内部使用。与name不同,id值是不会相同的。 - /// id is for internal use only. - /// - public string id { get; private set; } - - /// - /// Name of the object. - /// - public string name; - - /// - /// User defined data. - /// - public object data; - - /// - /// The source width of the object. - /// - public int sourceWidth; - - /// - /// The source height of the object. - /// - public int sourceHeight; - - /// - /// The initial width of the object. - /// - public int initWidth; - - /// - /// The initial height of the object. - /// - public int initHeight; - - /// - /// - /// - public int minWidth; - - /// - /// - /// - public int maxWidth; - - /// - /// - /// - public int minHeight; - - /// - /// - /// - public int maxHeight; - - /// - /// Relations Object. - /// - public Relations relations { get; private set; } - - /// - /// Restricted range of dragging. - /// - public Rect? dragBounds; - - /// - /// Parent object. - /// - public GComponent parent { get; private set; } - - /// - /// Lowlevel display object. - /// - public DisplayObject displayObject { get; protected set; } - - /// - /// 当前全局正在被拖动的对象 - /// - public static GObject draggingObject { get; private set; } - - /// - /// - /// - public PackageItem packageItem; - - float _x; - float _y; - float _z; - float _pivotX; - float _pivotY; - bool _pivotAsAnchor; - float _alpha; - float _rotation; - float _rotationX; - float _rotationY; - bool _visible; - bool _internalVisible; - bool _handlingController; - bool _touchable; - bool _grayed; - bool _draggable; - float _scaleX; - float _scaleY; - int _sortingOrder; - string _tooltips; - GGroup _group; - - GearBase[] _gears; - - EventListener _onClick; - EventListener _onRightClick; - EventListener _onTouchBegin; - EventListener _onTouchMove; - EventListener _onTouchEnd; - EventListener _onRollOver; - EventListener _onRollOut; - EventListener _onAddedToStage; - EventListener _onRemovedFromStage; - EventListener _onKeyDown; - EventListener _onClickLink; - EventListener _onPositionChanged; - EventListener _onSizeChanged; - EventListener _onDragStart; - EventListener _onDragMove; - EventListener _onDragEnd; - EventListener _onGearStop; - EventListener _onFocusIn; - EventListener _onFocusOut; - - internal protected bool underConstruct; - internal float _width; - internal float _height; - internal float _rawWidth; - internal float _rawHeight; - internal bool _gearLocked; - internal float _sizePercentInGroup; - internal bool _disposed; - internal GTreeNode _treeNode; - - internal static uint _gInstanceCounter; - - public GObject() - { - _width = 0; - _height = 0; - _alpha = 1; - _visible = true; - _touchable = true; - _scaleX = 1; - _scaleY = 1; - _internalVisible = true; - id = "_n" + _gInstanceCounter++; - name = string.Empty; - - CreateDisplayObject(); - - relations = new Relations(this); - _gears = new GearBase[10]; - } - - /// - /// Dispatched when the object or its child was clicked. - /// - public EventListener onClick - { - get { return _onClick ?? (_onClick = new EventListener(this, "onClick")); } - } - - /// - /// Dispatched when the object or its child was clicked by right mouse button. Web only. - /// - public EventListener onRightClick - { - get { return _onRightClick ?? (_onRightClick = new EventListener(this, "onRightClick")); } - } - - /// - /// Dispatched when the finger touched the object or its child just now. - /// - public EventListener onTouchBegin - { - get { return _onTouchBegin ?? (_onTouchBegin = new EventListener(this, "onTouchBegin")); } - } - - /// - /// - /// - public EventListener onTouchMove - { - get { return _onTouchMove ?? (_onTouchMove = new EventListener(this, "onTouchMove")); } - } - - /// - /// Dispatched when the finger was lifted from the screen or from the mouse button. - /// - public EventListener onTouchEnd - { - get { return _onTouchEnd ?? (_onTouchEnd = new EventListener(this, "onTouchEnd")); } - } - - /// - /// The cursor or finger hovers over an object. - /// - public EventListener onRollOver - { - get { return _onRollOver ?? (_onRollOver = new EventListener(this, "onRollOver")); } - } - - /// - /// The cursor or finger leave an object. - /// - public EventListener onRollOut - { - get { return _onRollOut ?? (_onRollOut = new EventListener(this, "onRollOut")); } - } - - /// - /// Dispatched when the object was added to the stage. - /// - public EventListener onAddedToStage - { - get { return _onAddedToStage ?? (_onAddedToStage = new EventListener(this, "onAddedToStage")); } - } - - /// - /// Dispatched when the object was removed from the stage. - /// - public EventListener onRemovedFromStage - { - get { return _onRemovedFromStage ?? (_onRemovedFromStage = new EventListener(this, "onRemovedFromStage")); } - } - - /// - /// Dispatched on key pressed when the object is in focus. - /// - public EventListener onKeyDown - { - get { return _onKeyDown ?? (_onKeyDown = new EventListener(this, "onKeyDown")); } - } - - /// - /// Dispatched when links in the object or its child was clicked. - /// - public EventListener onClickLink - { - get { return _onClickLink ?? (_onClickLink = new EventListener(this, "onClickLink")); } - } - - /// - /// Dispatched when the object was moved. - /// - public EventListener onPositionChanged - { - get { return _onPositionChanged ?? (_onPositionChanged = new EventListener(this, "onPositionChanged")); } - } - - /// - /// Dispatched when the object was resized. - /// - public EventListener onSizeChanged - { - get { return _onSizeChanged ?? (_onSizeChanged = new EventListener(this, "onSizeChanged")); } - } - - /// - /// Dispatched when drag start. - /// - public EventListener onDragStart - { - get { return _onDragStart ?? (_onDragStart = new EventListener(this, "onDragStart")); } - } - - /// - /// Dispatched when dragging. - /// - public EventListener onDragMove - { - get { return _onDragMove ?? (_onDragMove = new EventListener(this, "onDragMove")); } - } - - /// - /// Dispatched when drag end. - /// - public EventListener onDragEnd - { - get { return _onDragEnd ?? (_onDragEnd = new EventListener(this, "onDragEnd")); } - } - - /// - /// - /// - public EventListener onGearStop - { - get { return _onGearStop ?? (_onGearStop = new EventListener(this, "onGearStop")); } - } - - /// - /// - /// - public EventListener onFocusIn - { - get { return _onFocusIn ?? (_onFocusIn = new EventListener(this, "onFocusIn")); } - } - - /// - /// - /// - public EventListener onFocusOut - { - get { return _onFocusOut ?? (_onFocusOut = new EventListener(this, "onFocusOut")); } - } - - /// - /// The x coordinate of the object relative to the local coordinates of the parent. - /// - public float x - { - get { return _x; } - set - { - SetPosition(value, _y, _z); - } - } - - /// - /// The y coordinate of the object relative to the local coordinates of the parent. - /// - public float y - { - get { return _y; } - set - { - SetPosition(_x, value, _z); - } - } - - /// - /// The z coordinate of the object relative to the local coordinates of the parent. - /// - public float z - { - get { return _z; } - set - { - SetPosition(_x, _y, value); - } - } - - /// - /// The x and y coordinates of the object relative to the local coordinates of the parent. - /// - public Vector2 xy - { - get { return new Vector2(_x, _y); } - set { SetPosition(value.x, value.y, _z); } - } - - /// - /// The x,y,z coordinates of the object relative to the local coordinates of the parent. - /// - public Vector3 position - { - get { return new Vector3(_x, _y, _z); } - set { SetPosition(value.x, value.y, value.z); } - } - - /// - /// change the x and y coordinates of the object relative to the local coordinates of the parent. - /// - /// x value. - /// y value. - public void SetXY(float xv, float yv) - { - SetPosition(xv, yv, _z); - } - - /// - /// - /// - /// - /// - /// - public void SetXY(float xv, float yv, bool topLeftValue) - { - if (_pivotAsAnchor) - SetPosition(xv + _pivotX * _width, yv + _pivotY * _height, _z); - else - SetPosition(xv, yv, _z); - } - - /// - /// change the x,y,z coordinates of the object relative to the local coordinates of the parent. - /// - /// x value. - /// y value. - /// z value. - public void SetPosition(float xv, float yv, float zv) - { - if (_x != xv || _y != yv || _z != zv) - { - float dx = xv - _x; - float dy = yv - _y; - _x = xv; - _y = yv; - _z = zv; - - HandlePositionChanged(); - - if (this is GGroup) - ((GGroup)this).MoveChildren(dx, dy); - - UpdateGear(1); - - if (parent != null && !(parent is GList)) - { - parent.SetBoundsChangedFlag(); - if (_group != null) - _group.SetBoundsChangedFlag(true); - DispatchEvent("onPositionChanged", null); - } - - if (draggingObject == this && !sUpdateInDragging) - sGlobalRect = this.LocalToGlobal(new Rect(0, 0, this.width, this.height)); - } - } - - [Obsolete("Use UIConfig.makePixelPerfect or DisplayObject.pixelPerfect")] - public bool pixelSnapping - { - get { return false; } - set { } - } - - /// - /// Set the object in middle of the parent or GRoot if the parent is not set. - /// - public void Center() - { - Center(false); - } - - /// - /// Set the object in middle of the parent or GRoot if the parent is not set. - /// - /// Add relations to maintain the center state. - public virtual void Center(bool restraint) - { - GComponent r; - if (parent != null) - r = parent; - else - r = this.root; - - this.SetXY((int)((r.width - this.width) / 2), (int)((r.height - this.height) / 2), true); - if (restraint) - { - this.AddRelation(r, RelationType.Center_Center); - this.AddRelation(r, RelationType.Middle_Middle); - } - } - - /// - /// 设置对象为全屏大小(逻辑屏幕)。 - /// - public void MakeFullScreen() - { - this.SetSize(GRoot.inst.width, GRoot.inst.height); - } - - /// - /// The width of the object in pixels. - /// - public float width - { - get - { - return _width; - } - set - { - SetSize(value, _rawHeight); - } - } - - /// - /// The height of the object in pixels. - /// - public float height - { - get - { - return _height; - } - set - { - SetSize(_rawWidth, value); - } - } - - /// - /// The size of the object in pixels. - /// - public Vector2 size - { - get { return new Vector2(width, height); } - set { SetSize(value.x, value.y); } - } - - /// - /// actualWidth = width * scalex - /// - public float actualWidth - { - get { return this.width * _scaleX; } - } - - /// - /// actualHeight = height * scaleY - /// - public float actualHeight - { - get { return this.height * _scaleY; } - } - - /// - /// Change size. - /// - /// Width value. - /// Height value. - public void SetSize(float wv, float hv) - { - SetSize(wv, hv, false); - } - - /// - /// Change size. - /// - /// Width value. - /// Height value. - /// If pivot is set, the object's positon will change when its size change. Set ignorePivot=true to keep the position. - public void SetSize(float wv, float hv, bool ignorePivot) - { - if (_rawWidth != wv || _rawHeight != hv) - { - _rawWidth = wv; - _rawHeight = hv; - if (wv < minWidth) - wv = minWidth; - else if (maxWidth > 0 && wv > maxWidth) - wv = maxWidth; - if (hv < minHeight) - hv = minHeight; - else if (maxHeight > 0 && hv > maxHeight) - hv = maxHeight; - float dWidth = wv - _width; - float dHeight = hv - _height; - _width = wv; - _height = hv; - - HandleSizeChanged(); - - if (_pivotX != 0 || _pivotY != 0) - { - if (!_pivotAsAnchor) - { - if (!ignorePivot) - SetXY(_x - _pivotX * dWidth, _y - _pivotY * dHeight); - else - HandlePositionChanged(); - } - else - HandlePositionChanged(); - } - - if (this is GGroup) - ((GGroup)this).ResizeChildren(dWidth, dHeight); - - UpdateGear(2); - - if (parent != null) - { - relations.OnOwnerSizeChanged(dWidth, dHeight, _pivotAsAnchor || !ignorePivot); - parent.SetBoundsChangedFlag(); - if (_group != null) - _group.SetBoundsChangedFlag(); - } - - DispatchEvent("onSizeChanged", null); - } - } - - protected void SetSizeDirectly(float wv, float hv) - { - _rawWidth = wv; - _rawHeight = hv; - if (wv < 0) - wv = 0; - if (hv < 0) - hv = 0; - _width = wv; - _height = hv; - } - - /// - /// - /// - public float xMin - { - get - { - return _pivotAsAnchor ? (_x - _width * _pivotX) : _x; - } - set - { - if (_pivotAsAnchor) - SetPosition(value + _width * _pivotX, _y, _z); - else - SetPosition(value, _y, _z); - } - } - - /// - /// - /// - public float yMin - { - get - { - return _pivotAsAnchor ? (_y - _height * _pivotY) : _y; - } - set - { - if (_pivotAsAnchor) - SetPosition(_x, value + _height * _pivotY, _z); - else - SetPosition(_x, value, _z); - } - } - - /// - /// The horizontal scale factor. '1' means no scale, cannt be negative. - /// - public float scaleX - { - get { return _scaleX; } - set - { - SetScale(value, _scaleY); - } - } - - /// - /// The vertical scale factor. '1' means no scale, cannt be negative. - /// - public float scaleY - { - get { return _scaleY; } - set - { - SetScale(_scaleX, value); - } - } - - /// - /// The scale factor. - /// - public Vector2 scale - { - get { return new Vector2(_scaleX, _scaleY); } - set { SetScale(value.x, value.y); } - } - - /// - /// Change the scale factor. - /// - /// The horizontal scale factor. - /// The vertical scale factor - public void SetScale(float wv, float hv) - { - if (_scaleX != wv || _scaleY != hv) - { - _scaleX = wv; - _scaleY = hv; - HandleScaleChanged(); - - UpdateGear(2); - } - } - - /// - /// - /// - public Vector2 skew - { - get - { - if (displayObject != null) - return displayObject.skew; - else - return Vector2.zero; - } - - set - { - if (displayObject != null) - displayObject.skew = value; - } - } - - /// - /// The x coordinate of the object's origin in its own coordinate space. - /// - public float pivotX - { - get { return _pivotX; } - set - { - SetPivot(value, _pivotY, _pivotAsAnchor); - } - } - - /// - /// The y coordinate of the object's origin in its own coordinate space. - /// - public float pivotY - { - get { return _pivotY; } - set - { - SetPivot(_pivotX, value, _pivotAsAnchor); - } - } - - /// - /// The x and y coordinates of the object's origin in its own coordinate space. - /// - public Vector2 pivot - { - get { return new Vector2(_pivotX, _pivotY); } - set { SetPivot(value.x, value.y, _pivotAsAnchor); } - } - - public bool pivotAsAnchor - { - get { return _pivotAsAnchor; } - set - { - SetPivot(_pivotX, _pivotY, value); - } - } - - /// - /// Change the x and y coordinates of the object's origin in its own coordinate space. - /// - /// x value in ratio - /// y value in ratio - public void SetPivot(float xv, float yv) - { - SetPivot(xv, yv, false); - } - - /// - /// Change the x and y coordinates of the object's origin in its own coordinate space. - /// - /// x value in ratio - /// y value in ratio - /// If use the pivot as the anchor position - public void SetPivot(float xv, float yv, bool asAnchor) - { - if (_pivotX != xv || _pivotY != yv || _pivotAsAnchor != asAnchor) - { - _pivotX = xv; - _pivotY = yv; - _pivotAsAnchor = asAnchor; - if (displayObject != null) - displayObject.pivot = new Vector2(_pivotX, _pivotY); - HandlePositionChanged(); - } - } - - /// - /// If the object can touch or click. GImage/GTextField is not touchable even it is true. - /// - public bool touchable - { - get - { - return _touchable; - } - set - { - if (_touchable != value) - { - _touchable = value; - UpdateGear(3); - - if (displayObject != null) - displayObject.touchable = _touchable; - } - } - } - - /// - /// If true, apply a grayed effect on this object. - /// - public bool grayed - { - get - { - return _grayed; - } - set - { - if (_grayed != value) - { - _grayed = value; - HandleGrayedChanged(); - UpdateGear(3); - } - } - } - - /// - /// Enabled is shortcut for grayed and !touchable combination. - /// - public bool enabled - { - get - { - return !_grayed && _touchable; - } - set - { - this.grayed = !value; - this.touchable = value; - } - } - - /// - /// The rotation around the z axis of the object in degrees. - /// - public float rotation - { - get - { - return _rotation; - } - set - { - _rotation = value; - if (displayObject != null) - displayObject.rotation = _rotation; - UpdateGear(3); - } - } - - /// - /// The rotation around the x axis of the object in degrees. - /// - public float rotationX - { - get - { - return _rotationX; - } - set - { - _rotationX = value; - if (displayObject != null) - displayObject.rotationX = _rotationX; - } - } - - /// - /// The rotation around the y axis of the object in degrees. - /// - public float rotationY - { - get - { - return _rotationY; - } - set - { - _rotationY = value; - if (displayObject != null) - displayObject.rotationY = _rotationY; - } - } - - /// - /// The opacity of the object. 0 = transparent, 1 = opaque. - /// - public float alpha - { - - get - { - return _alpha; - } - - set - { - _alpha = value; - HandleAlphaChanged(); - UpdateGear(3); - } - } - - /// - /// The visibility of the object. An invisible object will be untouchable. - /// - public bool visible - { - get - { - return _visible; - } - - set - { - if (_visible != value) - { - _visible = value; - HandleVisibleChanged(); - if (parent != null) - parent.SetBoundsChangedFlag(); - if (_group != null && _group.excludeInvisibles) - _group.SetBoundsChangedFlag(); - } - } - } - - internal bool internalVisible - { - get - { - return _internalVisible && (group == null || group.internalVisible); - } - } - - internal bool internalVisible2 - { - get - { - return _visible && (group == null || group.internalVisible2); - } - } - - internal bool internalVisible3 - { - get - { - return _visible && _internalVisible; - } - } - - /// - /// By default(when sortingOrder==0), object added to component is arrange by the added roder. - /// The bigger is the sorting order, the object is more in front. - /// - public int sortingOrder - { - get { return _sortingOrder; } - set - { - if (value < 0) - value = 0; - if (_sortingOrder != value) - { - int old = _sortingOrder; - _sortingOrder = value; - if (parent != null) - parent.ChildSortingOrderChanged(this, old, _sortingOrder); - } - } - } - - /// - /// If the object can be focused? - /// - public bool focusable - { - get { return displayObject != null && displayObject.focusable; } - set { if (displayObject != null) displayObject.focusable = value; } - } - - /// - /// If the object can be navigated by TAB? - /// - public bool tabStop - { - get { return displayObject != null && displayObject.tabStop; } - set { if (displayObject != null) displayObject.tabStop = value; } - } - - /// - /// If the object is focused. - /// - public bool focused - { - get { return displayObject != null && displayObject.focused; } - } - - /// - /// Request focus on this object. - /// - public void RequestFocus() - { - if (displayObject != null) - Stage.inst.SetFocus(displayObject, false); - } - - /// - /// Request focus on this object. - /// - public void RequestFocus(bool byKey) - { - if (displayObject != null) - Stage.inst.SetFocus(displayObject, byKey); - } - - /// - /// Tooltips of this object. UIConfig.tooltipsWin must be set first. - /// - public string tooltips - { - get { return _tooltips; } - set - { - if (!string.IsNullOrEmpty(_tooltips)) - { - this.onRollOver.Remove(__rollOver); - this.onRollOut.Remove(__rollOut); - } - - _tooltips = value; - if (!string.IsNullOrEmpty(_tooltips)) - { - this.onRollOver.Add(__rollOver); - this.onRollOut.Add(__rollOut); - } - } - } - - - /// - /// - /// - /// - public string cursor - { - get { return displayObject != null ? displayObject.cursor : null; } - set - { - if (displayObject != null) - displayObject.cursor = value; - } - } - - private void __rollOver() - { - this.root.ShowTooltips(tooltips); - } - - private void __rollOut() - { - this.root.HideTooltips(); - } - - /// - /// - /// - virtual public IFilter filter - { - get { return displayObject != null ? displayObject.filter : null; } - set { if (displayObject != null) displayObject.filter = value; } - } - - /// - /// - /// - virtual public BlendMode blendMode - { - get { return displayObject != null ? displayObject.blendMode : BlendMode.None; } - set { if (displayObject != null) displayObject.blendMode = value; } - } - - /// - /// 设定GameObject的名称 - /// - public string gameObjectName - { - get - { - if (displayObject != null) - return displayObject.gameObject.name; - else - return null; - } - - set - { - if (displayObject != null) - displayObject.gameObject.name = value; - } - } - - /// - /// - /// - /// - public void SetHome(GObject obj) - { - if (obj != null && displayObject != null && obj.displayObject != null) - displayObject.home = obj.displayObject.cachedTransform; - } - - /// - /// If the object has lowlevel displayobject and the displayobject has a container parent? - /// - public bool inContainer - { - get - { - return displayObject != null && displayObject.parent != null; - } - } - - /// - /// If the object is on stage. - /// - public bool onStage - { - get - { - return displayObject != null && displayObject.stage != null; - } - } - - /// - /// Resource url of this object. - /// - public string resourceURL - { - get - { - if (packageItem != null) - return UIPackage.URL_PREFIX + packageItem.owner.id + packageItem.id; - else - return null; - } - } - - /// - /// Gear to xy controller. - /// - public GearXY gearXY - { - get - { - return (GearXY)GetGear(1); - } - } - - /// - /// Gear to size controller. - /// - public GearSize gearSize - { - get - { - return (GearSize)GetGear(2); - } - } - - /// - /// Gear to look controller. - /// - public GearLook gearLook - { - get - { - return (GearLook)GetGear(3); - } - } - - public GearBase GetGear(int index) - { - GearBase gear = _gears[index]; - if (gear == null) - { - switch (index) - { - case 0: - gear = new GearDisplay(this); - break; - case 1: - gear = new GearXY(this); - break; - case 2: - gear = new GearSize(this); - break; - case 3: - gear = new GearLook(this); - break; - case 4: - gear = new GearColor(this); - break; - case 5: - gear = new GearAnimation(this); - break; - case 6: - gear = new GearText(this); - break; - case 7: - gear = new GearIcon(this); - break; - case 8: - gear = new GearDisplay2(this); - break; - case 9: - gear = new GearFontSize(this); - break; - default: - throw new System.Exception("FairyGUI: invalid gear index!"); - } - _gears[index] = gear; - } - return gear; - } - - protected void UpdateGear(int index) - { - if (underConstruct || _gearLocked) - return; - - GearBase gear = _gears[index]; - if (gear != null && gear.controller != null) - gear.UpdateState(); - } - - internal bool CheckGearController(int index, Controller c) - { - return _gears[index] != null && _gears[index].controller == c; - } - - internal void UpdateGearFromRelations(int index, float dx, float dy) - { - if (_gears[index] != null) - _gears[index].UpdateFromRelations(dx, dy); - } - - internal uint AddDisplayLock() - { - GearDisplay gearDisplay = (GearDisplay)_gears[0]; - if (gearDisplay != null && gearDisplay.controller != null) - { - uint ret = gearDisplay.AddLock(); - CheckGearDisplay(); - - return ret; - } - else - return 0; - } - - internal void ReleaseDisplayLock(uint token) - { - GearDisplay gearDisplay = (GearDisplay)_gears[0]; - if (gearDisplay != null && gearDisplay.controller != null) - { - gearDisplay.ReleaseLock(token); - CheckGearDisplay(); - } - } - - void CheckGearDisplay() - { - if (_handlingController) - return; - - bool connected = _gears[0] == null || ((GearDisplay)_gears[0]).connected; - if (_gears[8] != null) - connected = ((GearDisplay2)_gears[8]).Evaluate(connected); - - if (connected != _internalVisible) - { - _internalVisible = connected; - if (parent != null) - parent.ChildStateChanged(this); - if (_group != null && _group.excludeInvisibles) - _group.SetBoundsChangedFlag(); - } - } - - /// - /// Mark the fairy batching state is invalid. - /// - public void InvalidateBatchingState() - { - if (displayObject != null) - displayObject.InvalidateBatchingState(); - else if ((this is GGroup) && parent != null) - parent.container.InvalidateBatchingState(true); - } - - virtual public void HandleControllerChanged(Controller c) - { - _handlingController = true; - for (int i = 0; i < 10; i++) - { - GearBase gear = _gears[i]; - if (gear != null && gear.controller == c) - gear.Apply(); - } - _handlingController = false; - - CheckGearDisplay(); - } - - /// - /// - /// - /// - /// - public void AddRelation(GObject target, RelationType relationType) - { - AddRelation(target, relationType, false); - } - - /// - /// - /// - /// - /// - /// - public void AddRelation(GObject target, RelationType relationType, bool usePercent) - { - relations.Add(target, relationType, usePercent); - } - - /// - /// - /// - /// - /// - public void RemoveRelation(GObject target, RelationType relationType) - { - relations.Remove(target, relationType); - } - - /// - /// - /// - public void RemoveFromParent() - { - if (parent != null) - parent.RemoveChild(this); - } - - /// - /// Group belonging to. - /// - public GGroup group - { - get { return _group; } - set - { - if (_group != value) - { - if (_group != null) - _group.SetBoundsChangedFlag(); - _group = value; - if (_group != null) - _group.SetBoundsChangedFlag(); - HandleVisibleChanged(); - if (parent != null) - parent.ChildStateChanged(this); - } - } - } - - /// - /// - /// - public GRoot root - { - get - { - GObject p = this; - while (p.parent != null) - p = p.parent; - - if (p is GRoot) - return (GRoot)p; - - if (p.displayObject != null && p.displayObject.parent != null) - { - DisplayObject d = p.displayObject.parent.GetChild("GRoot"); - if (d != null && (d.gOwner is GRoot)) - return (GRoot)d.gOwner; - } - - return GRoot.inst; - } - } - - /// - /// - /// - virtual public string text - { - get { return null; } - set { /*override in child*/} - } - - /// - /// - /// - virtual public string icon - { - get { return null; } - set { /*override in child*/} - } - - /// - /// - /// - public bool draggable - { - get { return _draggable; } - set - { - if (_draggable != value) - { - _draggable = value; - InitDrag(); - } - } - } - - /// - /// - /// - public void StartDrag() - { - StartDrag(-1); - } - - /// - /// - /// - /// - public void StartDrag(int touchId) - { - if (displayObject.stage == null) - return; - - DragBegin(touchId); - } - - /// - /// - /// - public void StopDrag() - { - DragEnd(); - } - - /// - /// - /// - public bool dragging - { - get { return draggingObject == this; } - } - - /// - /// - /// - public Vector2 dragStartPos - { - get { return _dragTouchStartPos; } - } - - /// - /// Transforms a point from the local coordinate system to global (Stage) coordinates. - /// - /// - /// - public Vector2 LocalToGlobal(Vector2 pt) - { - if (_pivotAsAnchor) - { - pt.x += _width * _pivotX; - pt.y += _height * _pivotY; - } - return displayObject.LocalToGlobal(pt); - } - - /// - /// Transforms a point from global (Stage) coordinates to the local coordinate system. - /// - /// - /// - public Vector2 GlobalToLocal(Vector2 pt) - { - pt = displayObject.GlobalToLocal(pt); - if (_pivotAsAnchor) - { - pt.x -= _width * _pivotX; - pt.y -= _height * _pivotY; - } - return pt; - } - - /// - /// - /// - /// - /// - public Rect LocalToGlobal(Rect rect) - { - Rect ret = new Rect(); - Vector2 v = this.LocalToGlobal(new Vector2(rect.xMin, rect.yMin)); - ret.xMin = v.x; - ret.yMin = v.y; - v = this.LocalToGlobal(new Vector2(rect.xMax, rect.yMax)); - ret.xMax = v.x; - ret.yMax = v.y; - return ret; - } - - /// - /// - /// - /// - /// - public Rect GlobalToLocal(Rect rect) - { - Rect ret = new Rect(); - Vector2 v = this.GlobalToLocal(new Vector2(rect.xMin, rect.yMin)); - ret.xMin = v.x; - ret.yMin = v.y; - v = this.GlobalToLocal(new Vector2(rect.xMax, rect.yMax)); - ret.xMax = v.x; - ret.yMax = v.y; - return ret; - } - - /// - /// Transforms a point from the local coordinate system to GRoot coordinates. - /// - /// - /// - /// - public Vector2 LocalToRoot(Vector2 pt, GRoot r) - { - pt = LocalToGlobal(pt); - if (r == null || r == GRoot.inst) - { - //fast - pt.x /= UIContentScaler.scaleFactor; - pt.y /= UIContentScaler.scaleFactor; - return pt; - } - else - return r.GlobalToLocal(pt); - } - - /// - /// Transforms a point from the GRoot coordinate to local coordinates system. - /// - /// - /// - /// - public Vector2 RootToLocal(Vector2 pt, GRoot r) - { - if (r == null || r == GRoot.inst) - { - //fast - pt.x *= UIContentScaler.scaleFactor; - pt.y *= UIContentScaler.scaleFactor; - } - else - pt = r.LocalToGlobal(pt); - return GlobalToLocal(pt); - } - - /// - /// - /// - /// - /// - public Vector2 WorldToLocal(Vector3 pt) - { - return WorldToLocal(pt, HitTestContext.cachedMainCamera); - } - - /// - /// - /// - /// - /// - /// - public Vector2 WorldToLocal(Vector3 pt, Camera camera) - { - Vector3 v = camera.WorldToScreenPoint(pt); - v.y = Screen.height - v.y; - v.z = 0; - return GlobalToLocal(v); - } - - /// - /// - /// - /// - /// - /// - public Vector2 TransformPoint(Vector2 pt, GObject targetSpace) - { - if (_pivotAsAnchor) - { - pt.x += _width * _pivotX; - pt.y += _height * _pivotY; - } - return this.displayObject.TransformPoint(pt, targetSpace != null ? targetSpace.displayObject : Stage.inst); - } - - /// - /// - /// - /// - /// - /// - public Rect TransformRect(Rect rect, GObject targetSpace) - { - if (_pivotAsAnchor) - { - rect.x += _width * _pivotX; - rect.y += _height * _pivotY; - } - return this.displayObject.TransformRect(rect, targetSpace != null ? targetSpace.displayObject : Stage.inst); - } - - /// - /// - /// - public bool isDisposed - { - get { return _disposed; } - } - - /// - /// - /// - virtual public void Dispose() - { - if (_disposed) - return; - - _disposed = true; - - RemoveFromParent(); - RemoveEventListeners(); - relations.Dispose(); - relations = null; - for (int i = 0; i < 10; i++) - { - GearBase gear = _gears[i]; - if (gear != null) - gear.Dispose(); - } - if (displayObject != null) - { - displayObject.gOwner = null; - displayObject.Dispose(); - } - data = null; - } - - /// - /// - /// - public GImage asImage - { - get { return this as GImage; } - } - - /// - /// - /// - public GComponent asCom - { - get { return this as GComponent; } - } - - /// - /// - /// - public GButton asButton - { - get { return this as GButton; } - } - - /// - /// - /// - public GLabel asLabel - { - get { return this as GLabel; } - } - - /// - /// - /// - public GProgressBar asProgress - { - get { return this as GProgressBar; } - } - - /// - /// - /// - public GSlider asSlider - { - get { return this as GSlider; } - } - - /// - /// - /// - public GComboBox asComboBox - { - get { return this as GComboBox; } - } - - /// - /// - /// - public GTextField asTextField - { - get { return this as GTextField; } - } - - /// - /// - /// - public GRichTextField asRichTextField - { - get { return this as GRichTextField; } - } - - /// - /// - /// - public GTextInput asTextInput - { - get { return this as GTextInput; } - } - - /// - /// - /// - public GLoader asLoader - { - get { return this as GLoader; } - } - - /// - /// - /// - public GLoader3D asLoader3D - { - get { return this as GLoader3D; } - } - - /// - /// - /// - public GList asList - { - get { return this as GList; } - } - - /// - /// - /// - public GGraph asGraph - { - get { return this as GGraph; } - } - - /// - /// - /// - public GGroup asGroup - { - get { return this as GGroup; } - } - - /// - /// - /// - public GMovieClip asMovieClip - { - get { return this as GMovieClip; } - } - - /// - /// - /// - public GTree asTree - { - get { return this as GTree; } - } - - /// - /// - /// - public GTreeNode treeNode - { - get { return _treeNode; } - } - - virtual protected void CreateDisplayObject() - { - } - - internal void InternalSetParent(GComponent value) - { - parent = value; - } - - virtual protected void HandlePositionChanged() - { - if (displayObject != null) - { - float xv = _x; - float yv = _y; - if (!_pivotAsAnchor) - { - xv += _width * _pivotX; - yv += _height * _pivotY; - } - displayObject.location = new Vector3(xv, yv, _z); - } - } - - virtual protected void HandleSizeChanged() - { - if (displayObject != null) - displayObject.SetSize(_width, _height); - } - - virtual protected void HandleScaleChanged() - { - if (displayObject != null) - displayObject.SetScale(_scaleX, _scaleY); - } - - virtual protected void HandleGrayedChanged() - { - if (displayObject != null) - displayObject.grayed = _grayed; - } - - virtual protected void HandleAlphaChanged() - { - if (displayObject != null) - displayObject.alpha = _alpha; - } - - virtual internal protected void HandleVisibleChanged() - { - if (displayObject != null) - displayObject.visible = internalVisible2; - } - - virtual public void ConstructFromResource() - { - } - - virtual public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - buffer.Seek(beginPos, 0); - buffer.Skip(5); - - id = buffer.ReadS(); - name = buffer.ReadS(); - float f1 = buffer.ReadInt(); - float f2 = buffer.ReadInt(); - SetXY(f1, f2); - - if (buffer.ReadBool()) - { - initWidth = buffer.ReadInt(); - initHeight = buffer.ReadInt(); - SetSize(initWidth, initHeight, true); - } - - if (buffer.ReadBool()) - { - minWidth = buffer.ReadInt(); - maxWidth = buffer.ReadInt(); - minHeight = buffer.ReadInt(); - maxHeight = buffer.ReadInt(); - } - - if (buffer.ReadBool()) - { - f1 = buffer.ReadFloat(); - f2 = buffer.ReadFloat(); - SetScale(f1, f2); - } - - if (buffer.ReadBool()) - { - f1 = buffer.ReadFloat(); - f2 = buffer.ReadFloat(); - this.skew = new Vector2(f1, f2); - } - - if (buffer.ReadBool()) - { - f1 = buffer.ReadFloat(); - f2 = buffer.ReadFloat(); - SetPivot(f1, f2, buffer.ReadBool()); - } - - f1 = buffer.ReadFloat(); - if (f1 != 1) - this.alpha = f1; - - f1 = buffer.ReadFloat(); - if (f1 != 0) - this.rotation = f1; - - if (!buffer.ReadBool()) - this.visible = false; - if (!buffer.ReadBool()) - this.touchable = false; - if (buffer.ReadBool()) - this.grayed = true; - this.blendMode = (BlendMode)buffer.ReadByte(); - - int filter = buffer.ReadByte(); - if (filter == 1) - { - ColorFilter cf = new ColorFilter(); - this.filter = cf; - - cf.AdjustBrightness(buffer.ReadFloat()); - cf.AdjustContrast(buffer.ReadFloat()); - cf.AdjustSaturation(buffer.ReadFloat()); - cf.AdjustHue(buffer.ReadFloat()); - } - - string str = buffer.ReadS(); - if (str != null) - this.data = str; - } - - virtual public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - buffer.Seek(beginPos, 1); - - string str = buffer.ReadS(); - if (str != null) - this.tooltips = str; - - int groupId = buffer.ReadShort(); - if (groupId >= 0) - group = parent.GetChildAt(groupId) as GGroup; - - buffer.Seek(beginPos, 2); - - int cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - GearBase gear = GetGear(buffer.ReadByte()); - gear.Setup(buffer); - - buffer.position = nextPos; - } - } - - #region Drag support - Vector2 _dragTouchStartPos; - bool _dragTesting; - - static Vector2 sGlobalDragStart = new Vector2(); - static Rect sGlobalRect = new Rect(); - static bool sUpdateInDragging = false; - - private void InitDrag() - { - if (_draggable) - { - onTouchBegin.Add(__touchBegin); - onTouchMove.Add(__touchMove); - onTouchEnd.Add(__touchEnd); - } - else - { - onTouchBegin.Remove(__touchBegin); - onTouchMove.Remove(__touchMove); - onTouchEnd.Remove(__touchEnd); - } - } - - private void DragBegin(int touchId) - { - if (DispatchEvent("onDragStart", touchId)) - return; - - if (draggingObject != null) - { - GObject tmp = draggingObject; - draggingObject.StopDrag(); - draggingObject = null; - tmp.DispatchEvent("onDragEnd", null); - } - - onTouchMove.Add(__touchMove); - onTouchEnd.Add(__touchEnd); - - sGlobalDragStart = Stage.inst.GetTouchPosition(touchId); - sGlobalRect = this.LocalToGlobal(new Rect(0, 0, this.width, this.height)); - _dragTesting = false; - - draggingObject = this; - Stage.inst.AddTouchMonitor(touchId, this); - } - - private void DragEnd() - { - if (draggingObject == this) - { - _dragTesting = false; - draggingObject = null; - } - } - - private void __touchBegin(EventContext context) - { - if ((Stage.inst.focus is InputTextField) && ((InputTextField)Stage.inst.focus).editable) - { - _dragTesting = false; - return; - } - - InputEvent evt = context.inputEvent; - _dragTouchStartPos = evt.position; - _dragTesting = true; - context.CaptureTouch(); - } - - private void __touchMove(EventContext context) - { - InputEvent evt = context.inputEvent; - - if (_dragTesting && draggingObject != this) - { - int sensitivity; - if (Stage.touchScreen) - sensitivity = UIConfig.touchDragSensitivity; - else - sensitivity = UIConfig.clickDragSensitivity; - if (Mathf.Abs(_dragTouchStartPos.x - evt.x) < sensitivity - && Mathf.Abs(_dragTouchStartPos.y - evt.y) < sensitivity) - return; - - _dragTesting = false; - DragBegin(evt.touchId); - } - - if (draggingObject == this) - { - float xx = evt.x - sGlobalDragStart.x + sGlobalRect.x; - float yy = evt.y - sGlobalDragStart.y + sGlobalRect.y; - - if (dragBounds != null) - { - Rect rect = GRoot.inst.LocalToGlobal((Rect)dragBounds); - if (xx < rect.x) - xx = rect.x; - else if (xx + sGlobalRect.width > rect.xMax) - { - xx = rect.xMax - sGlobalRect.width; - if (xx < rect.x) - xx = rect.x; - } - - if (yy < rect.y) - yy = rect.y; - else if (yy + sGlobalRect.height > rect.yMax) - { - yy = rect.yMax - sGlobalRect.height; - if (yy < rect.y) - yy = rect.y; - } - } - - Vector2 pt = this.parent.GlobalToLocal(new Vector2(xx, yy)); - if (float.IsNaN(pt.x)) - return; - - sUpdateInDragging = true; - this.SetXY(Mathf.RoundToInt(pt.x), Mathf.RoundToInt(pt.y)); - sUpdateInDragging = false; - - DispatchEvent("onDragMove", null); - } - } - - private void __touchEnd(EventContext context) - { - if (draggingObject == this) - { - draggingObject = null; - DispatchEvent("onDragEnd", null); - } - } - #endregion - - #region Tween Helpers - public GTweener TweenMove(Vector2 endValue, float duration) - { - return GTween.To(this.xy, endValue, duration).SetTarget(this, TweenPropType.XY); - } - - public GTweener TweenMoveX(float endValue, float duration) - { - return GTween.To(_x, endValue, duration).SetTarget(this, TweenPropType.X); - } - - public GTweener TweenMoveY(float endValue, float duration) - { - return GTween.To(_y, endValue, duration).SetTarget(this, TweenPropType.Y); - } - - public GTweener TweenScale(Vector2 endValue, float duration) - { - return GTween.To(this.scale, endValue, duration).SetTarget(this, TweenPropType.Scale); - } - - public GTweener TweenScaleX(float endValue, float duration) - { - return GTween.To(_scaleX, endValue, duration).SetTarget(this, TweenPropType.ScaleX); - } - - public GTweener TweenScaleY(float endValue, float duration) - { - return GTween.To(_scaleY, endValue, duration).SetTarget(this, TweenPropType.ScaleY); - } - - public GTweener TweenResize(Vector2 endValue, float duration) - { - return GTween.To(this.size, endValue, duration).SetTarget(this, TweenPropType.Size); - } - - public GTweener TweenFade(float endValue, float duration) - { - return GTween.To(_alpha, endValue, duration).SetTarget(this, TweenPropType.Alpha); - } - - public GTweener TweenRotate(float endValue, float duration) - { - return GTween.To(_rotation, endValue, duration).SetTarget(this, TweenPropType.Rotation); - } - #endregion - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs.meta deleted file mode 100644 index dd83393..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d3ab09a55620b5f40a544e775edc4b22 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs deleted file mode 100644 index baafadd..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs +++ /dev/null @@ -1,106 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GObjectPool is use for GObject pooling. - /// - public class GObjectPool - { - /// - /// Callback function when a new object is creating. - /// - /// - public delegate void InitCallbackDelegate(GObject obj); - - /// - /// Callback function when a new object is creating. - /// - public InitCallbackDelegate initCallback; - - Dictionary> _pool; - Transform _manager; - - /// - /// 需要设置一个manager,加入池里的对象都成为这个manager的孩子 - /// - /// - public GObjectPool(Transform manager) - { - _manager = manager; - _pool = new Dictionary>(); - } - - /// - /// Dispose all objects in the pool. - /// - public void Clear() - { - foreach (KeyValuePair> kv in _pool) - { - Queue list = kv.Value; - foreach (GObject obj in list) - obj.Dispose(); - } - _pool.Clear(); - } - - /// - /// - /// - public int count - { - get { return _pool.Count; } - } - - /// - /// - /// - /// - /// - public GObject GetObject(string url) - { - url = UIPackage.NormalizeURL(url); - if (url == null) - return null; - - Queue arr; - if (_pool.TryGetValue(url, out arr) - && arr.Count > 0) - return arr.Dequeue(); - - GObject obj = UIPackage.CreateObjectFromURL(url); - if (obj != null) - { - if (initCallback != null) - initCallback(obj); - } - - return obj; - } - - /// - /// - /// - /// - public void ReturnObject(GObject obj) - { - if (obj.displayObject.isDisposed) - return; - - string url = obj.resourceURL; - Queue arr; - if (!_pool.TryGetValue(url, out arr)) - { - arr = new Queue(); - _pool.Add(url, arr); - } - - if (_manager != null) - obj.displayObject.cachedTransform.SetParent(_manager, false); - arr.Enqueue(obj); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs.meta deleted file mode 100644 index 426e906..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: bb355b8d4ba140f469be6be6b062dfda -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs deleted file mode 100644 index 50d3748..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs +++ /dev/null @@ -1,311 +0,0 @@ -using System; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GProgressBar class. - /// - public class GProgressBar : GComponent - { - double _min; - double _max; - double _value; - ProgressTitleType _titleType; - bool _reverse; - - GObject _titleObject; - GMovieClip _aniObject; - GObject _barObjectH; - GObject _barObjectV; - float _barMaxWidth; - float _barMaxHeight; - float _barMaxWidthDelta; - float _barMaxHeightDelta; - float _barStartX; - float _barStartY; - - public GProgressBar() - { - _value = 50; - _max = 100; - } - - /// - /// - /// - public ProgressTitleType titleType - { - - get - { - return _titleType; - } - set - { - if (_titleType != value) - { - _titleType = value; - Update(_value); - } - } - } - - /// - /// - /// - public double min - { - get - { - return _min; - } - set - { - if (_min != value) - { - _min = value; - Update(_value); - } - } - } - - /// - /// - /// - public double max - { - get - { - return _max; - } - set - { - if (_max != value) - { - _max = value; - Update(_value); - } - } - } - - /// - /// - /// - public double value - { - get - { - return _value; - } - set - { - if (_value != value) - { - GTween.Kill(this, TweenPropType.Progress, false); - - _value = value; - Update(_value); - } - } - } - - public bool reverse - { - get { return _reverse; } - set { _reverse = value; } - } - - /// - /// 动态改变进度值。 - /// - /// - /// - public GTweener TweenValue(double value, float duration) - { - double oldValule; - - GTweener twener = GTween.GetTween(this, TweenPropType.Progress); - if (twener != null) - { - oldValule = twener.value.d; - twener.Kill(false); - } - else - oldValule = _value; - - _value = value; - return GTween.ToDouble(oldValule, _value, duration) - .SetEase(EaseType.Linear) - .SetTarget(this, TweenPropType.Progress); - } - - /// - /// - /// - /// - public void Update(double newValue) - { - float percent = Mathf.Clamp01((float)((newValue - _min) / (_max - _min))); - if (_titleObject != null) - { - switch (_titleType) - { - case ProgressTitleType.Percent: - if (RTLSupport.BaseDirection == RTLSupport.DirectionType.RTL) - _titleObject.text = "%" + Mathf.FloorToInt(percent * 100); - else - _titleObject.text = Mathf.FloorToInt(percent * 100) + "%"; - break; - - case ProgressTitleType.ValueAndMax: - if (RTLSupport.BaseDirection == RTLSupport.DirectionType.RTL) - _titleObject.text = Math.Round(max) + "/" + Math.Round(newValue); - else - _titleObject.text = Math.Round(newValue) + "/" + Math.Round(max); - break; - - case ProgressTitleType.Value: - _titleObject.text = "" + Math.Round(newValue); - break; - - case ProgressTitleType.Max: - _titleObject.text = "" + Math.Round(_max); - break; - } - } - - float fullWidth = this.width - _barMaxWidthDelta; - float fullHeight = this.height - _barMaxHeightDelta; - if (!_reverse) - { - if (_barObjectH != null) - { - if (!SetFillAmount(_barObjectH, percent)) - _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); - } - if (_barObjectV != null) - { - if (!SetFillAmount(_barObjectV, percent)) - _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); - } - } - else - { - if (_barObjectH != null) - { - if (!SetFillAmount(_barObjectH, 1 - percent)) - { - _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); - _barObjectH.x = _barStartX + (fullWidth - _barObjectH.width); - } - } - if (_barObjectV != null) - { - if (!SetFillAmount(_barObjectV, 1 - percent)) - { - _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); - _barObjectV.y = _barStartY + (fullHeight - _barObjectV.height); - } - } - } - if (_aniObject != null) - _aniObject.frame = Mathf.RoundToInt(percent * 100); - - InvalidateBatchingState(true); - } - - bool SetFillAmount(GObject bar, float amount) - { - if ((bar is GImage) && ((GImage)bar).fillMethod != FillMethod.None) - ((GImage)bar).fillAmount = amount; - else if ((bar is GLoader) && ((GLoader)bar).fillMethod != FillMethod.None) - ((GLoader)bar).fillAmount = amount; - else - return false; - - return true; - } - - override protected void ConstructExtension(ByteBuffer buffer) - { - buffer.Seek(0, 6); - - _titleType = (ProgressTitleType)buffer.ReadByte(); - _reverse = buffer.ReadBool(); - - _titleObject = GetChild("title"); - _barObjectH = GetChild("bar"); - _barObjectV = GetChild("bar_v"); - _aniObject = GetChild("ani") as GMovieClip; - - if (_barObjectH != null) - { - _barMaxWidth = _barObjectH.width; - _barMaxWidthDelta = this.width - _barMaxWidth; - _barStartX = _barObjectH.x; - } - if (_barObjectV != null) - { - _barMaxHeight = _barObjectV.height; - _barMaxHeightDelta = this.height - _barMaxHeight; - _barStartY = _barObjectV.y; - } - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - if (!buffer.Seek(beginPos, 6)) - { - Update(_value); - return; - } - - if ((ObjectType)buffer.ReadByte() != packageItem.objectType) - { - Update(_value); - return; - } - - _value = buffer.ReadInt(); - _max = buffer.ReadInt(); - if (buffer.version >= 2) - _min = buffer.ReadInt(); - - if (buffer.version >= 5) - { - string sound = buffer.ReadS(); - if (!string.IsNullOrEmpty(sound)) - { - float volumeScale = buffer.ReadFloat(); - displayObject.onClick.Add(() => - { - NAudioClip audioClip = UIPackage.GetItemAssetByURL(sound) as NAudioClip; - if (audioClip != null && audioClip.nativeClip != null) - Stage.inst.PlayOneShotSound(audioClip.nativeClip, volumeScale); - }); - } - else - buffer.Skip(4); - } - - Update(_value); - } - - override protected void HandleSizeChanged() - { - base.HandleSizeChanged(); - - if (_barObjectH != null) - _barMaxWidth = this.width - _barMaxWidthDelta; - if (_barObjectV != null) - _barMaxHeight = this.height - _barMaxHeightDelta; - - if (!this.underConstruct) - Update(_value); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs.meta deleted file mode 100644 index 3a1a62a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 4f13bf1fdc7711c4aa9c5e1631138025 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs deleted file mode 100644 index 7df005e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// GRichTextField class. - /// - public class GRichTextField : GTextField - { - /// - /// - /// - public RichTextField richTextField { get; private set; } - - public GRichTextField() - : base() - { - } - - override protected void CreateDisplayObject() - { - richTextField = new RichTextField(); - richTextField.gOwner = this; - displayObject = richTextField; - - _textField = richTextField.textField; - } - - override protected void SetTextFieldText() - { - string str = _text; - if (_templateVars != null) - str = ParseTemplate(str); - - _textField.maxWidth = maxWidth; - if (_ubbEnabled) - richTextField.htmlText = UBBParser.inst.Parse(str); - else - richTextField.htmlText = str; - } - - /// - /// - /// - public Dictionary emojies - { - get { return richTextField.emojies; } - set { richTextField.emojies = value; } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs.meta deleted file mode 100644 index 99f8f3b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c329d14f7b7d35348be7ec3e2a4b0591 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs deleted file mode 100644 index e5d7d72..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs +++ /dev/null @@ -1,856 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// GRoot is a topmost component of UI display list.You dont need to create GRoot. It is created automatically. - /// - public class GRoot : GComponent - { - /// - /// - /// - public static float contentScaleFactor - { - get { return UIContentScaler.scaleFactor; } - } - - /// - /// - /// - public static int contentScaleLevel - { - get { return UIContentScaler.scaleLevel; } - } - - GGraph _modalLayer; - GObject _modalWaitPane; - List _popupStack; - List _justClosedPopups; - HashSet _specialPopups; - GObject _tooltipWin; - GObject _defaultTooltipWin; - - internal static GRoot _inst; - public static GRoot inst - { - get - { - if (_inst == null) - Stage.Instantiate(); - - return _inst; - } - } - - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - _inst = null; - } -#endif - - public GRoot() - { - this.name = this.rootContainer.name = this.rootContainer.gameObject.name = "GRoot"; - this.opaque = false; - - _popupStack = new List(); - _justClosedPopups = new List(); - _specialPopups = new HashSet(); - - Stage.inst.onTouchBegin.AddCapture(__stageTouchBegin); - Stage.inst.onTouchEnd.AddCapture(__stageTouchEnd); - } - - override public void Dispose() - { - base.Dispose(); - - Stage.inst.onTouchBegin.RemoveCapture(__stageTouchBegin); - Stage.inst.onTouchEnd.RemoveCapture(__stageTouchEnd); - } - - /// - /// Set content scale factor. - /// - /// Design resolution of x axis. - /// Design resolution of y axis. - public void SetContentScaleFactor(int designResolutionX, int designResolutionY) - { - SetContentScaleFactor(designResolutionX, designResolutionY, UIContentScaler.ScreenMatchMode.MatchWidthOrHeight); - } - - /// - /// Set content scale factor. - /// - /// Design resolution of x axis. - /// Design resolution of y axis. - /// Match mode. - public void SetContentScaleFactor(int designResolutionX, int designResolutionY, UIContentScaler.ScreenMatchMode screenMatchMode) - { - UIContentScaler scaler = Stage.inst.gameObject.GetComponent(); - scaler.designResolutionX = designResolutionX; - scaler.designResolutionY = designResolutionY; - scaler.scaleMode = UIContentScaler.ScaleMode.ScaleWithScreenSize; - scaler.screenMatchMode = screenMatchMode; - scaler.ApplyChange(); - ApplyContentScaleFactor(); - } - - /// - /// - /// - /// - public void SetContentScaleFactor(float constantScaleFactor) - { - UIContentScaler scaler = Stage.inst.gameObject.GetComponent(); - scaler.scaleMode = UIContentScaler.ScaleMode.ConstantPixelSize; - scaler.constantScaleFactor = constantScaleFactor; - scaler.ApplyChange(); - ApplyContentScaleFactor(); - } - - /// - /// This is called after screen size changed. - /// - public void ApplyContentScaleFactor() - { - this.SetSize(Mathf.CeilToInt(Stage.inst.width / UIContentScaler.scaleFactor), Mathf.CeilToInt(Stage.inst.height / UIContentScaler.scaleFactor)); - this.SetScale(UIContentScaler.scaleFactor, UIContentScaler.scaleFactor); - } - - /// - /// Display a window. - /// - /// - public void ShowWindow(Window win) - { - AddChild(win); - AdjustModalLayer(); - } - - /// - /// Call window.Hide - /// 关闭一个窗口。将调用Window.Hide方法。 - /// - /// - public void HideWindow(Window win) - { - win.Hide(); - } - - /// - /// Remove a window from stage immediatelly. window.Hide/window.OnHide will never be called. - ///立刻关闭一个窗口。不会调用Window.Hide方法,Window.OnHide也不会被调用。 - /// - /// - public void HideWindowImmediately(Window win) - { - HideWindowImmediately(win, false); - } - - /// - /// Remove a window from stage immediatelly. window.Hide/window.OnHide will never be called. - /// 立刻关闭一个窗口。不会调用Window.Hide方法,Window.OnHide也不会被调用。 - /// - /// - /// True to dispose the window. - public void HideWindowImmediately(Window win, bool dispose) - { - if (win.parent == this) - RemoveChild(win, dispose); - else if (dispose) - win.Dispose(); - - AdjustModalLayer(); - } - - /// - /// 将一个窗口提到所有窗口的最前面 - /// - /// - public void BringToFront(Window win) - { - int cnt = this.numChildren; - int i; - if (_modalLayer != null && _modalLayer.parent != null && !win.modal) - i = GetChildIndex(_modalLayer) - 1; - else - i = cnt - 1; - - for (; i >= 0; i--) - { - GObject g = GetChildAt(i); - if (g == win) - return; - if (g is Window) - break; - } - - if (i >= 0) - SetChildIndex(win, i); - } - - /// - /// Display a modal layer and a waiting sign in the front. - /// 显示一个半透明层和一个等待标志在最前面。半透明层的颜色可以通过UIConfig.modalLayerColor设定。 - /// 等待标志的资源可以通过UIConfig.globalModalWaiting。等待标志组件会设置为屏幕大小,请内部做好关联。 - /// - public void ShowModalWait() - { - if (UIConfig.globalModalWaiting != null) - { - if (_modalWaitPane == null || _modalWaitPane.isDisposed) - { - _modalWaitPane = UIPackage.CreateObjectFromURL(UIConfig.globalModalWaiting); - _modalWaitPane.SetHome(this); - } - _modalWaitPane.SetSize(this.width, this.height); - _modalWaitPane.AddRelation(this, RelationType.Size); - - AddChild(_modalWaitPane); - } - } - - /// - /// Hide modal layer and waiting sign. - /// - public void CloseModalWait() - { - if (_modalWaitPane != null && _modalWaitPane.parent != null) - RemoveChild(_modalWaitPane); - } - - /// - /// Close all windows except modal windows. - /// - public void CloseAllExceptModals() - { - GObject[] arr = _children.ToArray(); - foreach (GObject g in arr) - { - if ((g is Window) && !(g as Window).modal) - HideWindowImmediately(g as Window); - } - } - - /// - /// Close all windows. - /// - public void CloseAllWindows() - { - GObject[] arr = _children.ToArray(); - foreach (GObject g in arr) - { - if (g is Window) - HideWindowImmediately(g as Window); - } - } - - /// - /// Get window on top. - /// - /// - public Window GetTopWindow() - { - int cnt = this.numChildren; - for (int i = cnt - 1; i >= 0; i--) - { - GObject g = this.GetChildAt(i); - if (g is Window) - { - return (Window)(g); - } - } - - return null; - } - - /// - /// - /// - public GGraph modalLayer - { - get - { - if (_modalLayer == null || _modalLayer.isDisposed) - CreateModalLayer(); - - return _modalLayer; - } - } - - void CreateModalLayer() - { - _modalLayer = new GGraph(); - _modalLayer.DrawRect(this.width, this.height, 0, Color.white, UIConfig.modalLayerColor); - _modalLayer.AddRelation(this, RelationType.Size); - _modalLayer.name = _modalLayer.gameObjectName = "ModalLayer"; - _modalLayer.SetHome(this); - } - - /// - /// Return true if a modal window is on stage. - /// - public bool hasModalWindow - { - get { return _modalLayer != null && _modalLayer.parent != null; } - } - - /// - /// Return true if modal waiting layer is on stage. - /// - public bool modalWaiting - { - get - { - return (_modalWaitPane != null) && _modalWaitPane.onStage; - } - } - - /// - /// Get current touch target. (including hover) - /// - public GObject touchTarget - { - get - { - return DisplayObjectToGObject(Stage.inst.touchTarget); - } - } - - /// - /// - /// - /// - /// - public GObject DisplayObjectToGObject(DisplayObject obj) - { - while (obj != null) - { - if (obj.gOwner != null) - return obj.gOwner; - - obj = obj.parent; - } - return null; - } - - private void AdjustModalLayer() - { - if (_modalLayer == null || _modalLayer.isDisposed) - CreateModalLayer(); - - int cnt = this.numChildren; - - if (_modalWaitPane != null && _modalWaitPane.parent != null) - SetChildIndex(_modalWaitPane, cnt - 1); - - for (int i = cnt - 1; i >= 0; i--) - { - GObject g = this.GetChildAt(i); - if ((g is Window) && (g as Window).modal) - { - if (_modalLayer.parent == null) - AddChildAt(_modalLayer, i); - else - SetChildIndexBefore(_modalLayer, i); - return; - } - } - - if (_modalLayer.parent != null) - RemoveChild(_modalLayer); - } - - /// - /// Show a popup object. - /// 显示一个popup。 - /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 - /// - /// - public void ShowPopup(GObject popup) - { - ShowPopup(popup, null, PopupDirection.Auto, false); - } - - /// - /// Show a popup object along with the specific target object. - /// 显示一个popup。将popup显示在指定对象的上边或者下边。 - /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 - /// - /// - /// - public void ShowPopup(GObject popup, GObject target) - { - ShowPopup(popup, target, PopupDirection.Auto, false); - } - - [Obsolete] - public void ShowPopup(GObject popup, GObject target, object downward) - { - ShowPopup(popup, target, - downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up), - false); - } - - /// - /// Show a popup object along with the specific target object. - /// 显示一个popup。将popup显示在指定对象的上方或者下方。 - /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 - /// - /// - /// - /// - public void ShowPopup(GObject popup, GObject target, PopupDirection dir) - { - ShowPopup(popup, target, dir, false); - } - - /// - /// Show a popup object along with the specific target object. - /// 显示一个popup。将popup显示在指定对象的上方或者下方。 - /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 - /// 默认情况下,popup在touchEnd事件中关闭;特别设置closeUntilUpEvent=true则可使该popup在touchEnd中才关闭。 - /// - /// - /// - /// - /// - public void ShowPopup(GObject popup, GObject target, PopupDirection dir, bool closeUntilUpEvent) - { - if (_popupStack.Count > 0) - { - int k = _popupStack.IndexOf(popup); - if (k != -1) - { - for (int i = _popupStack.Count - 1; i >= k; i--) - { - int last = _popupStack.Count - 1; - GObject obj = _popupStack[last]; - ClosePopup(obj); - _popupStack.RemoveAt(last); - _specialPopups.Remove(obj); - } - } - } - _popupStack.Add(popup); - if (closeUntilUpEvent) - _specialPopups.Add(popup); - - if (target != null) - { - GObject p = target; - while (p != null) - { - if (p.parent == this) - { - if (popup.sortingOrder < p.sortingOrder) - { - popup.sortingOrder = p.sortingOrder; - } - break; - } - p = p.parent; - } - } - - AddChild(popup); - AdjustModalLayer(); - - if ((popup is Window) && target == null && dir == PopupDirection.Auto) - return; - - Vector2 pos = GetPoupPosition(popup, target, dir); - popup.xy = pos; - } - - [Obsolete] - public Vector2 GetPoupPosition(GObject popup, GObject target, object downward) - { - return GetPoupPosition(popup, target, - downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up)); - } - - /// - /// - /// - /// - /// - /// - /// - public Vector2 GetPoupPosition(GObject popup, GObject target, PopupDirection dir) - { - Vector2 pos; - Vector2 size = Vector2.zero; - if (target != null) - { - pos = target.LocalToRoot(Vector2.zero, this); - size = target.LocalToRoot(target.size, this) - pos; - } - else - { - pos = this.GlobalToLocal(Stage.inst.touchPosition); - } - float xx, yy; - xx = pos.x; - if (xx + popup.width > this.width) - xx = xx + size.x - popup.width; - yy = pos.y + size.y; - if ((dir == PopupDirection.Auto && yy + popup.height > this.height) - || dir == PopupDirection.Up) - { - yy = pos.y - popup.height - 1; - if (yy < 0) - { - yy = 0; - xx += size.x / 2; - } - } - - return new Vector2(Mathf.RoundToInt(xx), Mathf.RoundToInt(yy)); - } - - /// - /// If a popup is showing, then close it; otherwise, open it. - /// - /// - public void TogglePopup(GObject popup) - { - TogglePopup(popup, null, PopupDirection.Auto, false); - } - - /// - /// - /// - /// - /// - public void TogglePopup(GObject popup, GObject target) - { - TogglePopup(popup, target, PopupDirection.Auto, false); - } - - [Obsolete] - public void TogglePopup(GObject popup, GObject target, object downward) - { - TogglePopup(popup, target, - downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up), - false); - } - - /// - /// - /// - /// - /// - /// - public void TogglePopup(GObject popup, GObject target, PopupDirection dir) - { - TogglePopup(popup, target, dir, false); - } - - /// - /// - /// - /// - /// - /// - /// - public void TogglePopup(GObject popup, GObject target, PopupDirection dir, bool closeUntilUpEvent) - { - if (_justClosedPopups.IndexOf(popup) != -1) - return; - - ShowPopup(popup, target, dir, closeUntilUpEvent); - } - - /// - /// Close all popups. - /// - public void HidePopup() - { - HidePopup(null); - } - - /// - /// Close a popup. - /// - /// - public void HidePopup(GObject popup) - { - if (popup != null) - { - int k = _popupStack.IndexOf(popup); - if (k != -1) - { - for (int i = _popupStack.Count - 1; i >= k; i--) - { - int last = _popupStack.Count - 1; - GObject obj = _popupStack[last]; - ClosePopup(obj); - _popupStack.RemoveAt(last); - _specialPopups.Remove(obj); - } - } - } - else - { - foreach (GObject obj in _popupStack) - ClosePopup(obj); - _popupStack.Clear(); - _specialPopups.Clear(); - } - } - - /// - /// - /// - public bool hasAnyPopup - { - get { return _popupStack.Count > 0; } - } - - void ClosePopup(GObject target) - { - if (target.parent != null) - { - if (target is Window) - ((Window)target).Hide(); - else - RemoveChild(target); - } - } - - /// - /// - /// - /// - public void ShowTooltips(string msg) - { - ShowTooltips(msg, 0.1f); - } - - /// - /// - /// - /// - /// - public void ShowTooltips(string msg, float delay) - { - if (_defaultTooltipWin == null || _defaultTooltipWin.isDisposed) - { - string resourceURL = UIConfig.tooltipsWin; - if (string.IsNullOrEmpty(resourceURL)) - { - Debug.LogWarning("FairyGUI: UIConfig.tooltipsWin not defined"); - return; - } - - _defaultTooltipWin = UIPackage.CreateObjectFromURL(resourceURL); - _defaultTooltipWin.SetHome(this); - _defaultTooltipWin.touchable = false; - } - - _defaultTooltipWin.text = msg; - ShowTooltipsWin(_defaultTooltipWin, delay); - } - - /// - /// - /// - /// - public void ShowTooltipsWin(GObject tooltipWin) - { - ShowTooltipsWin(tooltipWin, 0.1f); - } - - /// - /// - /// - /// - /// - public void ShowTooltipsWin(GObject tooltipWin, float delay) - { - HideTooltips(); - - _tooltipWin = tooltipWin; - Timers.inst.Add(delay, 1, __showTooltipsWin); - } - - void __showTooltipsWin(object param) - { - if (_tooltipWin == null) - return; - - float xx = Stage.inst.touchPosition.x + 10; - float yy = Stage.inst.touchPosition.y + 20; - - Vector2 pt = this.GlobalToLocal(new Vector2(xx, yy)); - xx = pt.x; - yy = pt.y; - - if (xx + _tooltipWin.width > this.width) - xx = xx - _tooltipWin.width; - if (yy + _tooltipWin.height > this.height) - { - yy = yy - _tooltipWin.height - 1; - if (yy < 0) - yy = 0; - } - - _tooltipWin.x = Mathf.RoundToInt(xx); - _tooltipWin.y = Mathf.RoundToInt(yy); - AddChild(_tooltipWin); - } - - /// - /// - /// - public void HideTooltips() - { - if (_tooltipWin != null) - { - if (_tooltipWin.parent != null) - RemoveChild(_tooltipWin); - _tooltipWin = null; - } - } - - /// - /// - /// - public GObject focus - { - get - { - GObject obj = DisplayObjectToGObject(Stage.inst.focus); - if (obj != null && !IsAncestorOf(obj)) - return null; - else - return obj; - } - - set - { - if (value == null) - Stage.inst.focus = null; - else - Stage.inst.focus = value.displayObject; - } - } - - void __stageTouchBegin(EventContext context) - { - if (_tooltipWin != null) - HideTooltips(); - - CheckPopups(true); - } - - void __stageTouchEnd(EventContext context) - { - CheckPopups(false); - } - - void CheckPopups(bool touchBegin) - { - if (touchBegin) - _justClosedPopups.Clear(); - - if (_popupStack.Count > 0) - { - DisplayObject mc = Stage.inst.touchTarget as DisplayObject; - bool handled = false; - while (mc != Stage.inst && mc != null) - { - if (mc.gOwner != null) - { - int k = _popupStack.IndexOf(mc.gOwner); - if (k != -1) - { - for (int i = _popupStack.Count - 1; i > k; i--) - { - int last = _popupStack.Count - 1; - GObject popup = _popupStack[last]; - if (touchBegin == _specialPopups.Contains(popup)) - continue; - - ClosePopup(popup); - _justClosedPopups.Add(popup); - _popupStack.RemoveAt(last); - _specialPopups.Remove(popup); - } - handled = true; - break; - } - } - mc = mc.parent; - } - - if (!handled) - { - for (int i = _popupStack.Count - 1; i >= 0; i--) - { - GObject popup = _popupStack[i]; - if (touchBegin == _specialPopups.Contains(popup)) - continue; - - ClosePopup(popup); - _justClosedPopups.Add(popup); - _popupStack.RemoveAt(i); - _specialPopups.Remove(popup); - } - } - } - } - - /// - /// - /// - public void EnableSound() - { - Stage.inst.EnableSound(); - } - - /// - /// - /// - public void DisableSound() - { - Stage.inst.DisableSound(); - } - - /// - /// - /// - /// - /// - public void PlayOneShotSound(AudioClip clip, float volumeScale) - { - Stage.inst.PlayOneShotSound(clip, volumeScale); - } - - /// - /// - /// - /// - public void PlayOneShotSound(AudioClip clip) - { - Stage.inst.PlayOneShotSound(clip); - } - - /// - /// - /// - public float soundVolume - { - get { return Stage.inst.soundVolume; } - set { Stage.inst.soundVolume = value; } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs.meta deleted file mode 100644 index f7a47c3..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c82e50658ca58b2459448b9c86cb4777 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs deleted file mode 100644 index c490ce1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs +++ /dev/null @@ -1,226 +0,0 @@ -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// GScrollBar class. - /// - public class GScrollBar : GComponent - { - GObject _grip; - GObject _arrowButton1; - GObject _arrowButton2; - GObject _bar; - ScrollPane _target; - - bool _vertical; - float _scrollPerc; - bool _fixedGripSize; - bool _gripDragging; - - Vector2 _dragOffset; - - public GScrollBar() - { - _scrollPerc = 0; - } - - /// - /// - /// - /// - /// - public void SetScrollPane(ScrollPane target, bool vertical) - { - _target = target; - _vertical = vertical; - } - - /// - /// - /// - public void SetDisplayPerc(float value) - { - if (_vertical) - { - if (!_fixedGripSize) - _grip.height = Mathf.FloorToInt(value * _bar.height); - _grip.y = Mathf.RoundToInt(_bar.y + (_bar.height - _grip.height) * _scrollPerc); - } - else - { - if (!_fixedGripSize) - _grip.width = Mathf.FloorToInt(value * _bar.width); - _grip.x = Mathf.RoundToInt(_bar.x + (_bar.width - _grip.width) * _scrollPerc); - } - - _grip.visible = value != 0 && value != 1; - } - - /// - /// - /// - public void setScrollPerc(float value) - { - _scrollPerc = value; - if (_vertical) - _grip.y = Mathf.RoundToInt(_bar.y + (_bar.height - _grip.height) * _scrollPerc); - else - _grip.x = Mathf.RoundToInt(_bar.x + (_bar.width - _grip.width) * _scrollPerc); - } - - /// - /// - /// - public float minSize - { - get - { - if (_vertical) - return (_arrowButton1 != null ? _arrowButton1.height : 0) + (_arrowButton2 != null ? _arrowButton2.height : 0); - else - return (_arrowButton1 != null ? _arrowButton1.width : 0) + (_arrowButton2 != null ? _arrowButton2.width : 0); - } - } - - /// - /// - /// - public bool gripDragging - { - get - { - return _gripDragging; - } - } - - override protected void ConstructExtension(ByteBuffer buffer) - { - buffer.Seek(0, 6); - - _fixedGripSize = buffer.ReadBool(); - - _grip = GetChild("grip"); - if (_grip == null) - { - Debug.LogWarning("FairyGUI: " + this.resourceURL + " should define grip"); - return; - } - - _bar = GetChild("bar"); - if (_bar == null) - { - Debug.LogWarning("FairyGUI: " + this.resourceURL + " should define bar"); - return; - } - - _arrowButton1 = GetChild("arrow1"); - _arrowButton2 = GetChild("arrow2"); - - _grip.onTouchBegin.Add(__gripTouchBegin); - _grip.onTouchMove.Add(__gripTouchMove); - _grip.onTouchEnd.Add(__gripTouchEnd); - - this.onTouchBegin.Add(__touchBegin); - if (_arrowButton1 != null) - _arrowButton1.onTouchBegin.Add(__arrowButton1Click); - if (_arrowButton2 != null) - _arrowButton2.onTouchBegin.Add(__arrowButton2Click); - } - - void __gripTouchBegin(EventContext context) - { - if (_bar == null) - return; - - context.StopPropagation(); - - InputEvent evt = context.inputEvent; - if (evt.button != 0) - return; - - context.CaptureTouch(); - - _gripDragging = true; - _target.UpdateScrollBarVisible(); - - _dragOffset = this.GlobalToLocal(new Vector2(evt.x, evt.y)) - _grip.xy; - } - - void __gripTouchMove(EventContext context) - { - InputEvent evt = context.inputEvent; - Vector2 pt = this.GlobalToLocal(new Vector2(evt.x, evt.y)); - if (float.IsNaN(pt.x)) - return; - - if (_vertical) - { - float curY = pt.y - _dragOffset.y; - float diff = _bar.height - _grip.height; - if (diff == 0) - _target.percY = 0; - else - _target.percY = (curY - _bar.y) / diff; - } - else - { - float curX = pt.x - _dragOffset.x; - float diff = _bar.width - _grip.width; - if (diff == 0) - _target.percX = 0; - else - _target.percX = (curX - _bar.x) / diff; - } - } - - void __gripTouchEnd(EventContext context) - { - _gripDragging = false; - _target.UpdateScrollBarVisible(); - } - - void __arrowButton1Click(EventContext context) - { - context.StopPropagation(); - - if (_vertical) - _target.ScrollUp(); - else - _target.ScrollLeft(); - } - - void __arrowButton2Click(EventContext context) - { - context.StopPropagation(); - - if (_vertical) - _target.ScrollDown(); - else - _target.ScrollRight(); - } - - void __touchBegin(EventContext context) - { - context.StopPropagation(); - - InputEvent evt = context.inputEvent; - Vector2 pt = _grip.GlobalToLocal(new Vector2(evt.x, evt.y)); - if (_vertical) - { - if (pt.y < 0) - _target.ScrollUp(4, false); - else - _target.ScrollDown(4, false); - } - else - { - if (pt.x < 0) - _target.ScrollLeft(4, false); - else - _target.ScrollRight(4, false); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs.meta deleted file mode 100644 index f0de7d0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b6b0ce43cdb60cf4e8e1ddccdf2f5082 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs deleted file mode 100644 index 8664264..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs +++ /dev/null @@ -1,405 +0,0 @@ -using System; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class GSlider : GComponent - { - double _min; - double _max; - double _value; - ProgressTitleType _titleType; - bool _reverse; - bool _wholeNumbers; - - GObject _titleObject; - GObject _barObjectH; - GObject _barObjectV; - float _barMaxWidth; - float _barMaxHeight; - float _barMaxWidthDelta; - float _barMaxHeightDelta; - GObject _gripObject; - Vector2 _clickPos; - float _clickPercent; - float _barStartX; - float _barStartY; - - EventListener _onChanged; - EventListener _onGripTouchEnd; - - public bool changeOnClick; - public bool canDrag; - - public GSlider() - { - _value = 50; - _max = 100; - changeOnClick = true; - canDrag = true; - } - - /// - /// - /// - public EventListener onChanged - { - get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } - } - - /// - /// - /// - public EventListener onGripTouchEnd - { - get { return _onGripTouchEnd ?? (_onGripTouchEnd = new EventListener(this, "onGripTouchEnd")); } - } - - /// - /// - /// - public ProgressTitleType titleType - { - get - { - return _titleType; - } - set - { - if (_titleType != value) - { - _titleType = value; - Update(); - } - } - } - - /// - /// - /// - public double min - { - get - { - return _min; - } - set - { - if (_min != value) - { - _min = value; - Update(); - } - } - } - - /// - /// - /// - public double max - { - get - { - return _max; - } - set - { - if (_max != value) - { - _max = value; - Update(); - } - } - } - - /// - /// - /// - public double value - { - get - { - return _value; - } - set - { - if (_value != value) - { - _value = value; - Update(); - } - } - } - - /// - /// - /// - public bool wholeNumbers - { - get - { - return _wholeNumbers; - } - set - { - if (_wholeNumbers != value) - { - _wholeNumbers = value; - Update(); - } - } - } - - private void Update() - { - UpdateWithPercent((float)((_value - _min) / (_max - _min)), false); - } - - private void UpdateWithPercent(float percent, bool manual) - { - percent = Mathf.Clamp01(percent); - if (manual) - { - double newValue = _min + (_max - _min) * percent; - if (newValue < _min) - newValue = _min; - if (newValue > _max) - newValue = _max; - if (_wholeNumbers) - { - newValue = Math.Round(newValue); - percent = Mathf.Clamp01((float)((newValue - _min) / (_max - _min))); - } - - if (newValue != _value) - { - _value = newValue; - if (DispatchEvent("onChanged", null)) - return; - } - } - - if (_titleObject != null) - { - switch (_titleType) - { - case ProgressTitleType.Percent: - _titleObject.text = Mathf.FloorToInt(percent * 100) + "%"; - break; - - case ProgressTitleType.ValueAndMax: - _titleObject.text = Math.Round(_value) + "/" + Math.Round(max); - break; - - case ProgressTitleType.Value: - _titleObject.text = "" + Math.Round(_value); - break; - - case ProgressTitleType.Max: - _titleObject.text = "" + Math.Round(_max); - break; - } - } - - float fullWidth = this.width - _barMaxWidthDelta; - float fullHeight = this.height - _barMaxHeightDelta; - if (!_reverse) - { - if (_barObjectH != null) - { - if (!SetFillAmount(_barObjectH, percent)) - _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); - } - if (_barObjectV != null) - { - if (!SetFillAmount(_barObjectV, percent)) - _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); - } - } - else - { - if (_barObjectH != null) - { - if (!SetFillAmount(_barObjectH, 1 - percent)) - { - _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); - _barObjectH.x = _barStartX + (fullWidth - _barObjectH.width); - } - } - if (_barObjectV != null) - { - if (!SetFillAmount(_barObjectV, 1 - percent)) - { - _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); - _barObjectV.y = _barStartY + (fullHeight - _barObjectV.height); - } - } - } - - InvalidateBatchingState(true); - } - - bool SetFillAmount(GObject bar, float amount) - { - if ((bar is GImage) && ((GImage)bar).fillMethod != FillMethod.None) - ((GImage)bar).fillAmount = amount; - else if ((bar is GLoader) && ((GLoader)bar).fillMethod != FillMethod.None) - ((GLoader)bar).fillAmount = amount; - else - return false; - - return true; - } - - override protected void ConstructExtension(ByteBuffer buffer) - { - buffer.Seek(0, 6); - - _titleType = (ProgressTitleType)buffer.ReadByte(); - _reverse = buffer.ReadBool(); - if (buffer.version >= 2) - { - _wholeNumbers = buffer.ReadBool(); - this.changeOnClick = buffer.ReadBool(); - } - - _titleObject = GetChild("title"); - _barObjectH = GetChild("bar"); - _barObjectV = GetChild("bar_v"); - _gripObject = GetChild("grip"); - - if (_barObjectH != null) - { - _barMaxWidth = _barObjectH.width; - _barMaxWidthDelta = this.width - _barMaxWidth; - _barStartX = _barObjectH.x; - } - if (_barObjectV != null) - { - _barMaxHeight = _barObjectV.height; - _barMaxHeightDelta = this.height - _barMaxHeight; - _barStartY = _barObjectV.y; - } - - if (_gripObject != null) - { - _gripObject.onTouchBegin.Add(__gripTouchBegin); - _gripObject.onTouchMove.Add(__gripTouchMove); - _gripObject.onTouchEnd.Add(__gripTouchEnd); - } - - onTouchBegin.Add(__barTouchBegin); - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - if (!buffer.Seek(beginPos, 6)) - { - Update(); - return; - } - - if ((ObjectType)buffer.ReadByte() != packageItem.objectType) - { - Update(); - return; - } - - _value = buffer.ReadInt(); - _max = buffer.ReadInt(); - if (buffer.version >= 2) - _min = buffer.ReadInt(); - - - Update(); - } - - override protected void HandleSizeChanged() - { - base.HandleSizeChanged(); - - if (_barObjectH != null) - _barMaxWidth = this.width - _barMaxWidthDelta; - if (_barObjectV != null) - _barMaxHeight = this.height - _barMaxHeightDelta; - - if (!this.underConstruct) - Update(); - } - - private void __gripTouchBegin(EventContext context) - { - this.canDrag = true; - - context.StopPropagation(); - - InputEvent evt = context.inputEvent; - if (evt.button != 0) - return; - - context.CaptureTouch(); - - _clickPos = this.GlobalToLocal(new Vector2(evt.x, evt.y)); - _clickPercent = Mathf.Clamp01((float)((_value - _min) / (_max - _min))); - } - - private void __gripTouchMove(EventContext context) - { - if (!this.canDrag) - return; - - InputEvent evt = context.inputEvent; - Vector2 pt = this.GlobalToLocal(new Vector2(evt.x, evt.y)); - if (float.IsNaN(pt.x)) - return; - - float deltaX = pt.x - _clickPos.x; - float deltaY = pt.y - _clickPos.y; - if (_reverse) - { - deltaX = -deltaX; - deltaY = -deltaY; - } - - float percent; - if (_barObjectH != null) - percent = _clickPercent + deltaX / _barMaxWidth; - else - percent = _clickPercent + deltaY / _barMaxHeight; - - UpdateWithPercent(percent, true); - } - - private void __gripTouchEnd(EventContext context) - { - DispatchEvent("onGripTouchEnd", null); - } - - private void __barTouchBegin(EventContext context) - { - if (!changeOnClick) - return; - - InputEvent evt = context.inputEvent; - Vector2 pt = _gripObject.GlobalToLocal(new Vector2(evt.x, evt.y)); - float percent = Mathf.Clamp01((float)((_value - _min) / (_max - _min))); - float delta = 0; - if (_barObjectH != null) - delta = (pt.x - _gripObject.width / 2) / _barMaxWidth; - if (_barObjectV != null) - delta = (pt.y - _gripObject.height / 2) / _barMaxHeight; - if (_reverse) - percent -= delta; - else - percent += delta; - - UpdateWithPercent(percent, true); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs.meta deleted file mode 100644 index 9a70d48..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a2a1a4a3ec0a296489e15eb1ae1214ee -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs deleted file mode 100644 index 25d9fec..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs +++ /dev/null @@ -1,438 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class GTextField : GObject, ITextColorGear - { - protected TextField _textField; - protected string _text; - protected bool _ubbEnabled; - protected bool _updatingSize; - protected Dictionary _templateVars; - - public GTextField() - : base() - { - TextFormat tf = _textField.textFormat; - tf.font = UIConfig.defaultFont; - tf.size = 12; - tf.color = Color.black; - tf.lineSpacing = 3; - tf.letterSpacing = 0; - _textField.textFormat = tf; - - _text = string.Empty; - _textField.autoSize = AutoSizeType.Both; - _textField.wordWrap = false; - } - - override protected void CreateDisplayObject() - { - _textField = new TextField(); - _textField.gOwner = this; - displayObject = _textField; - } - - /// - /// - /// - override public string text - { - get - { - if (this is GTextInput) - _text = ((GTextInput)this).inputTextField.text; - return _text; - } - set - { - if (value == null) - value = string.Empty; - _text = value; - SetTextFieldText(); - UpdateSize(); - UpdateGear(6); - } - } - - virtual protected void SetTextFieldText() - { - string str = _text; - if (_templateVars != null) - str = ParseTemplate(str); - - _textField.maxWidth = maxWidth; - if (_ubbEnabled) - _textField.htmlText = UBBParser.inst.Parse(XMLUtils.EncodeString(str)); - else - _textField.text = str; - } - - /// - /// - /// - public Dictionary templateVars - { - get { return _templateVars; } - set - { - if (_templateVars == null && value == null) - return; - - _templateVars = value; - - FlushVars(); - } - } - - /// - /// - /// - /// - /// - /// - public GTextField SetVar(string name, string value) - { - if (_templateVars == null) - _templateVars = new Dictionary(); - _templateVars[name] = value; - - return this; - } - - /// - /// - /// - public void FlushVars() - { - SetTextFieldText(); - UpdateSize(); - } - - /// - /// - /// - public bool HasCharacter(char ch) - { - return _textField.HasCharacter(ch); - } - - protected string ParseTemplate(string template) - { - int pos1 = 0, pos2 = 0; - int pos3; - string tag; - string value; - StringBuilder buffer = new StringBuilder(); - - while ((pos2 = template.IndexOf('{', pos1)) != -1) - { - if (pos2 > 0 && template[pos2 - 1] == '\\') - { - buffer.Append(template, pos1, pos2 - pos1 - 1); - buffer.Append('{'); - pos1 = pos2 + 1; - continue; - } - - buffer.Append(template, pos1, pos2 - pos1); - pos1 = pos2; - pos2 = template.IndexOf('}', pos1); - if (pos2 == -1) - break; - - if (pos2 == pos1 + 1) - { - buffer.Append(template, pos1, 2); - pos1 = pos2 + 1; - continue; - } - - tag = template.Substring(pos1 + 1, pos2 - pos1 - 1); - pos3 = tag.IndexOf('='); - if (pos3 != -1) - { - if (!_templateVars.TryGetValue(tag.Substring(0, pos3), out value)) - value = tag.Substring(pos3 + 1); - } - else - { - if (!_templateVars.TryGetValue(tag, out value)) - value = ""; - } - buffer.Append(value); - pos1 = pos2 + 1; - } - if (pos1 < template.Length) - buffer.Append(template, pos1, template.Length - pos1); - - return buffer.ToString(); - } - - /// - /// - /// - public TextFormat textFormat - { - get - { - return _textField.textFormat; - } - set - { - _textField.textFormat = value; - if (!underConstruct) - UpdateSize(); - } - } - - /// - /// - /// - public Color color - { - get - { - return _textField.textFormat.color; - } - set - { - if (_textField.textFormat.color != value) - { - TextFormat tf = _textField.textFormat; - tf.color = value; - _textField.textFormat = tf; - UpdateGear(4); - } - } - } - - /// - /// - /// - public AlignType align - { - get { return _textField.align; } - set { _textField.align = value; } - } - - /// - /// - /// - public VertAlignType verticalAlign - { - get { return _textField.verticalAlign; } - set { _textField.verticalAlign = value; } - } - - /// - /// - /// - public bool singleLine - { - get { return _textField.singleLine; } - set { _textField.singleLine = value; } - } - - /// - /// - /// - public float stroke - { - get { return _textField.stroke; } - set { _textField.stroke = value; } - } - - /// - /// - /// - public Color strokeColor - { - get { return _textField.strokeColor; } - set - { - _textField.strokeColor = value; - UpdateGear(4); - } - } - - /// - /// - /// - public Vector2 shadowOffset - { - get { return _textField.shadowOffset; } - set { _textField.shadowOffset = value; } - } - - /// - /// - /// - public bool UBBEnabled - { - get { return _ubbEnabled; } - set { _ubbEnabled = value; } - } - - /// - /// - /// - public AutoSizeType autoSize - { - get { return _textField.autoSize; } - set - { - _textField.autoSize = value; - if (value == AutoSizeType.Both) - { - _textField.wordWrap = false; - - if (!underConstruct) - this.SetSize(_textField.textWidth, _textField.textHeight); - } - else - { - _textField.wordWrap = true; - - if (value == AutoSizeType.Height) - { - if (!underConstruct) - { - displayObject.width = this.width; - this.height = _textField.textHeight; - } - } - else - displayObject.SetSize(this.width, this.height); - } - } - } - - /// - /// - /// - public float textWidth - { - get { return _textField.textWidth; } - } - - /// - /// - /// - public float textHeight - { - get { return _textField.textHeight; } - } - - protected void UpdateSize() - { - if (_updatingSize) - return; - - _updatingSize = true; - - if (_textField.autoSize == AutoSizeType.Both) - { - this.size = displayObject.size; - InvalidateBatchingState(); - } - else if (_textField.autoSize == AutoSizeType.Height) - { - this.height = displayObject.height; - InvalidateBatchingState(); - } - - _updatingSize = false; - } - - override protected void HandleSizeChanged() - { - if (_updatingSize) - return; - - if (underConstruct) - displayObject.SetSize(this.width, this.height); - else if (_textField.autoSize != AutoSizeType.Both) - { - if (_textField.autoSize == AutoSizeType.Height) - { - displayObject.width = this.width;//先调整宽度,让文本重排 - if (_text != string.Empty) //文本为空时,1是本来就不需要调整, 2是为了防止改掉文本为空时的默认高度,造成关联错误 - SetSizeDirectly(this.width, displayObject.height); - } - else - displayObject.SetSize(this.width, this.height); - } - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 5); - - TextFormat tf = _textField.textFormat; - - tf.font = buffer.ReadS(); - tf.size = buffer.ReadShort(); - tf.color = buffer.ReadColor(); - this.align = (AlignType)buffer.ReadByte(); - this.verticalAlign = (VertAlignType)buffer.ReadByte(); - tf.lineSpacing = buffer.ReadShort(); - tf.letterSpacing = buffer.ReadShort(); - _ubbEnabled = buffer.ReadBool(); - this.autoSize = (AutoSizeType)buffer.ReadByte(); - tf.underline = buffer.ReadBool(); - tf.italic = buffer.ReadBool(); - tf.bold = buffer.ReadBool(); - this.singleLine = buffer.ReadBool(); - if (buffer.ReadBool()) - { - tf.outlineColor = buffer.ReadColor(); - tf.outline = buffer.ReadFloat(); - } - - if (buffer.ReadBool()) - { - tf.shadowColor = buffer.ReadColor(); - float f1 = buffer.ReadFloat(); - float f2 = buffer.ReadFloat(); - tf.shadowOffset = new Vector2(f1, f2); - } - - if (buffer.ReadBool()) - _templateVars = new Dictionary(); - - if (buffer.version >= 3) - { - tf.strikethrough = buffer.ReadBool(); -#if FAIRYGUI_TMPRO - tf.faceDilate = buffer.ReadFloat(); - tf.outlineSoftness = buffer.ReadFloat(); - tf.underlaySoftness = buffer.ReadFloat(); -#else - buffer.Skip(12); -#endif - } - - _textField.textFormat = tf; - } - - override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_AfterAdd(buffer, beginPos); - - buffer.Seek(beginPos, 6); - - string str = buffer.ReadS(); - if (str != null) - this.text = str; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs.meta deleted file mode 100644 index 50ff1e5..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d64856957bd90d24aa05d134fb14e01d -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs deleted file mode 100644 index d0b76b6..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class GTextInput : GTextField - { - /// - /// - /// - public InputTextField inputTextField { get; private set; } - - EventListener _onChanged; - EventListener _onSubmit; - - public GTextInput() - { - _textField.autoSize = AutoSizeType.None; - _textField.wordWrap = false; - } - - /// - /// - /// - public EventListener onChanged - { - get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } - } - - /// - /// - /// - public EventListener onSubmit - { - get { return _onSubmit ?? (_onSubmit = new EventListener(this, "onSubmit")); } - } - - /// - /// - /// - public bool editable - { - get { return inputTextField.editable; } - set { inputTextField.editable = value; } - } - - /// - /// - /// - public bool hideInput - { - get { return inputTextField.hideInput; } - set { inputTextField.hideInput = value; } - } - - /// - /// - /// - public int maxLength - { - get { return inputTextField.maxLength; } - set { inputTextField.maxLength = value; } - } - - /// - /// - /// - public string restrict - { - get { return inputTextField.restrict; } - set { inputTextField.restrict = value; } - } - - /// - /// - /// - public bool displayAsPassword - { - get { return inputTextField.displayAsPassword; } - set { inputTextField.displayAsPassword = value; } - } - - /// - /// - /// - public int caretPosition - { - get { return inputTextField.caretPosition; } - set { inputTextField.caretPosition = value; } - } - - /// - /// - /// - public string promptText - { - get { return inputTextField.promptText; } - set { inputTextField.promptText = value; } - } - - /// - /// 在移动设备上是否使用键盘输入。如果false,则文本在获得焦点后不会弹出键盘。 - /// - public bool keyboardInput - { - get { return inputTextField.keyboardInput; } - set { inputTextField.keyboardInput = value; } - } - - /// - /// - /// - public int keyboardType - { - get { return inputTextField.keyboardType; } - set { inputTextField.keyboardType = value; } - } - - /// - /// - /// - public bool disableIME - { - get { return inputTextField.disableIME; } - set { inputTextField.disableIME = value; } - } - - /// - /// - /// - public Dictionary emojies - { - get { return inputTextField.emojies; } - set { inputTextField.emojies = value; } - } - - /// - /// - /// - public int border - { - get { return inputTextField.border; } - set { inputTextField.border = value; } - } - - /// - /// - /// - public int corner - { - get { return inputTextField.corner; } - set { inputTextField.corner = value; } - } - - /// - /// - /// - public Color borderColor - { - get { return inputTextField.borderColor; } - set { inputTextField.borderColor = value; } - } - - /// - /// - /// - public Color backgroundColor - { - get { return inputTextField.backgroundColor; } - set { inputTextField.backgroundColor = value; } - } - - /// - /// - /// - public bool mouseWheelEnabled - { - get { return inputTextField.mouseWheelEnabled; } - set { inputTextField.mouseWheelEnabled = value; } - } - - /// - /// - /// - /// - /// - public void SetSelection(int start, int length) - { - inputTextField.SetSelection(start, length); - } - - /// - /// - /// - /// - public void ReplaceSelection(string value) - { - inputTextField.ReplaceSelection(value); - } - - override protected void SetTextFieldText() - { - inputTextField.text = _text; - } - - override protected void CreateDisplayObject() - { - inputTextField = new InputTextField(); - inputTextField.gOwner = this; - displayObject = inputTextField; - - _textField = inputTextField.textField; - } - - public override void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 4); - - string str = buffer.ReadS(); - if (str != null) - inputTextField.promptText = str; - - str = buffer.ReadS(); - if (str != null) - inputTextField.restrict = str; - - int iv = buffer.ReadInt(); - if (iv != 0) - inputTextField.maxLength = iv; - iv = buffer.ReadInt(); - if (iv != 0) - inputTextField.keyboardType = iv; - if (buffer.ReadBool()) - inputTextField.displayAsPassword = true; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs.meta deleted file mode 100644 index 4af9216..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0e6f98107e4db9142b9de3358cf95378 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs deleted file mode 100644 index de45629..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs +++ /dev/null @@ -1,557 +0,0 @@ -using System; -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class GTree : GList - { - public delegate void TreeNodeRenderDelegate(GTreeNode node, GComponent obj); - public delegate void TreeNodeWillExpandDelegate(GTreeNode node, bool expand); - - /// - /// 当TreeNode需要更新时回调 - /// - public TreeNodeRenderDelegate treeNodeRender; - - /// - /// 当TreeNode即将展开或者收缩时回调。可以在回调中动态增加子节点。 - /// - public TreeNodeWillExpandDelegate treeNodeWillExpand; - - int _indent; - GTreeNode _rootNode; - int _clickToExpand; - bool _expandedStatusInEvt; - - private static List helperIntList = new List(); - - /// - /// - /// - public GTree() - { - _indent = 30; - - _rootNode = new GTreeNode(true); - _rootNode._SetTree(this); - _rootNode.expanded = true; - - } - - /// - /// TreeView的顶层节点,这是个虚拟节点,也就是他不会显示出来。 - /// - public GTreeNode rootNode - { - get { return _rootNode; } - } - - /// - /// TreeView每级的缩进,单位像素。 - /// - public int indent - { - get { return _indent; } - set { _indent = value; } - } - - /// - /// - /// - public int clickToExpand - { - get { return _clickToExpand; } - set { _clickToExpand = value; } - } - - /// - /// - /// - /// - public GTreeNode GetSelectedNode() - { - int i = this.selectedIndex; - if (i != -1) - return (GTreeNode)this.GetChildAt(i)._treeNode; - else - return null; - } - - /// - /// - /// - /// - public List GetSelectedNodes() - { - return GetSelectedNodes(null); - } - - /// - /// - /// - /// - /// - public List GetSelectedNodes(List result) - { - if (result == null) - result = new List(); - helperIntList.Clear(); - List sels = GetSelection(helperIntList); - int cnt = sels.Count; - for (int i = 0; i < cnt; i++) - { - GTreeNode node = GetChildAt(sels[i])._treeNode; - result.Add(node); - } - return result; - } - /// - /// - /// - /// - public void SelectNode(GTreeNode node) - { - SelectNode(node, false); - } - - /// - /// - /// - /// - /// - public void SelectNode(GTreeNode node, bool scrollItToView) - { - GTreeNode parentNode = node.parent; - while (parentNode != null && parentNode != _rootNode) - { - parentNode.expanded = true; - parentNode = parentNode.parent; - } - AddSelection(GetChildIndex(node.cell), scrollItToView); - } - - /// - /// - /// - /// - public void UnselectNode(GTreeNode node) - { - RemoveSelection(GetChildIndex(node.cell)); - } - - /// - /// - /// - public void ExpandAll() - { - ExpandAll(_rootNode); - } - - /// - /// - /// - /// - public void ExpandAll(GTreeNode folderNode) - { - folderNode.expanded = true; - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - GTreeNode node = folderNode.GetChildAt(i); - if (node.isFolder) - ExpandAll(node); - } - } - - /// - /// - /// - /// - public void CollapseAll() - { - CollapseAll(_rootNode); - } - - /// - /// - /// - /// - public void CollapseAll(GTreeNode folderNode) - { - if (folderNode != _rootNode) - folderNode.expanded = false; - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - GTreeNode node = folderNode.GetChildAt(i); - if (node.isFolder) - CollapseAll(node); - } - } - - /// - /// - /// - /// - void CreateCell(GTreeNode node) - { - GComponent child = itemPool.GetObject(string.IsNullOrEmpty(node._resURL) ? this.defaultItem : node._resURL) as GComponent; - if (child == null) - throw new Exception("FairyGUI: cannot create tree node object."); - child.displayObject.home = this.displayObject.cachedTransform; - child._treeNode = node; - node._cell = child; - - GObject indentObj = node.cell.GetChild("indent"); - if (indentObj != null) - indentObj.width = (node.level - 1) * indent; - - Controller cc; - - cc = child.GetController("expanded"); - if (cc != null) - { - cc.onChanged.Add(__expandedStateChanged); - cc.selectedIndex = node.expanded ? 1 : 0; - } - - cc = child.GetController("leaf"); - if (cc != null) - cc.selectedIndex = node.isFolder ? 0 : 1; - - if (node.isFolder) - child.onTouchBegin.Add(__cellTouchBegin); - - if (treeNodeRender != null) - treeNodeRender(node, node._cell); - } - - /// - /// - /// - /// - internal void _AfterInserted(GTreeNode node) - { - if (node._cell == null) - CreateCell(node); - - int index = GetInsertIndexForNode(node); - AddChildAt(node.cell, index); - if (treeNodeRender != null) - treeNodeRender(node, node._cell); - - if (node.isFolder && node.expanded) - CheckChildren(node, index); - } - - /// - /// - /// - /// - /// - int GetInsertIndexForNode(GTreeNode node) - { - GTreeNode prevNode = node.GetPrevSibling(); - if (prevNode == null) - prevNode = node.parent; - int insertIndex = GetChildIndex(prevNode.cell) + 1; - int myLevel = node.level; - int cnt = this.numChildren; - for (int i = insertIndex; i < cnt; i++) - { - GTreeNode testNode = GetChildAt(i)._treeNode; - if (testNode.level <= myLevel) - break; - - insertIndex++; - } - - return insertIndex; - } - - /// - /// - /// - /// - internal void _AfterRemoved(GTreeNode node) - { - RemoveNode(node); - } - - /// - /// - /// - /// - internal void _AfterExpanded(GTreeNode node) - { - if (node == _rootNode) - { - CheckChildren(_rootNode, 0); - return; - } - - if (this.treeNodeWillExpand != null) - this.treeNodeWillExpand(node, true); - - if (node._cell == null) - return; - - if (this.treeNodeRender != null) - this.treeNodeRender(node, node._cell); - - Controller cc = node._cell.GetController("expanded"); - if (cc != null) - cc.selectedIndex = 1; - - if (node._cell.parent != null) - CheckChildren(node, GetChildIndex(node._cell)); - } - - /// - /// - /// - /// - internal void _AfterCollapsed(GTreeNode node) - { - if (node == _rootNode) - { - CheckChildren(_rootNode, 0); - return; - } - - if (this.treeNodeWillExpand != null) - this.treeNodeWillExpand(node, false); - - if (node._cell == null) - return; - - if (this.treeNodeRender != null) - this.treeNodeRender(node, node._cell); - - Controller cc = node._cell.GetController("expanded"); - if (cc != null) - cc.selectedIndex = 0; - - if (node._cell.parent != null) - HideFolderNode(node); - } - - /// - /// - /// - /// - internal void _AfterMoved(GTreeNode node) - { - int startIndex = GetChildIndex(node._cell); - int endIndex; - if (node.isFolder) - endIndex = GetFolderEndIndex(startIndex, node.level); - else - endIndex = startIndex + 1; - int insertIndex = GetInsertIndexForNode(node); - int cnt = endIndex - startIndex; - - if (insertIndex < startIndex) - { - for (int i = 0; i < cnt; i++) - { - GObject obj = GetChildAt(startIndex + i); - SetChildIndex(obj, insertIndex + i); - } - } - else - { - for (int i = 0; i < cnt; i++) - { - GObject obj = GetChildAt(startIndex); - SetChildIndex(obj, insertIndex); - } - } - } - - private int GetFolderEndIndex(int startIndex, int level) - { - int cnt = this.numChildren; - for (int i = startIndex + 1; i < cnt; i++) - { - GTreeNode node = GetChildAt(i)._treeNode; - if (node.level <= level) - return i; - } - - return cnt; - } - - /// - /// - /// - /// - /// - /// - int CheckChildren(GTreeNode folderNode, int index) - { - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - index++; - GTreeNode node = folderNode.GetChildAt(i); - if (node.cell == null) - CreateCell(node); - - if (node.cell.parent == null) - AddChildAt(node.cell, index); - - if (node.isFolder && node.expanded) - index = CheckChildren(node, index); - } - - return index; - } - - /// - /// - /// - /// - void HideFolderNode(GTreeNode folderNode) - { - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - GTreeNode node = folderNode.GetChildAt(i); - if (node.cell != null && node.cell.parent != null) - RemoveChild(node.cell); - - if (node.isFolder && node.expanded) - HideFolderNode(node); - } - } - - /// - /// - /// - /// - void RemoveNode(GTreeNode node) - { - if (node.cell != null) - { - if (node.cell.parent != null) - RemoveChild(node.cell); - itemPool.ReturnObject(node.cell); - node._cell._treeNode = null; - node._cell = null; - } - - if (node.isFolder) - { - int cnt = node.numChildren; - for (int i = 0; i < cnt; i++) - { - GTreeNode node2 = node.GetChildAt(i); - RemoveNode(node2); - } - } - } - - void __cellTouchBegin(EventContext context) - { - GTreeNode node = ((GObject)context.sender)._treeNode; - _expandedStatusInEvt = node.expanded; - } - - void __expandedStateChanged(EventContext context) - { - Controller cc = (Controller)context.sender; - GTreeNode node = cc.parent._treeNode; - node.expanded = cc.selectedIndex == 1; - } - - override protected void DispatchItemEvent(GObject item, EventContext context) - { - if (_clickToExpand != 0) - { - GTreeNode node = item._treeNode; - if (node != null && _expandedStatusInEvt == node.expanded) - { - if (_clickToExpand == 2) - { - if (context.inputEvent.isDoubleClick) - node.expanded = !node.expanded; - } - else - node.expanded = !node.expanded; - } - } - - base.DispatchItemEvent(item, context); - } - - override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) - { - base.Setup_BeforeAdd(buffer, beginPos); - - buffer.Seek(beginPos, 9); - - _indent = buffer.ReadInt(); - _clickToExpand = buffer.ReadByte(); - } - - override protected void ReadItems(ByteBuffer buffer) - { - int nextPos; - string str; - bool isFolder; - GTreeNode lastNode = null; - int level; - int prevLevel = 0; - - int cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - str = buffer.ReadS(); - if (str == null) - { - str = this.defaultItem; - if (str == null) - { - buffer.position = nextPos; - continue; - } - } - - isFolder = buffer.ReadBool(); - level = buffer.ReadByte(); - - GTreeNode node = new GTreeNode(isFolder, str); - node.expanded = true; - if (i == 0) - _rootNode.AddChild(node); - else - { - if (level > prevLevel) - lastNode.AddChild(node); - else if (level < prevLevel) - { - for (int j = level; j <= prevLevel; j++) - lastNode = lastNode.parent; - lastNode.AddChild(node); - } - else - lastNode.parent.AddChild(node); - } - lastNode = node; - prevLevel = level; - - SetupItem(buffer, node.cell); - - buffer.position = nextPos; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs.meta deleted file mode 100644 index f3872c9..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b2d05bd744ca041a8beb8cfd9421d8a7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs deleted file mode 100644 index 3ac04eb..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs +++ /dev/null @@ -1,406 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace FairyGUI -{ - /// - /// - /// - public class GTreeNode - { - /// - /// - /// - public object data; - - /// - /// - /// - public GTreeNode parent { get; private set; } - - /// - /// - /// - public GTree tree { get; private set; } - - List _children; - bool _expanded; - int _level; - internal GComponent _cell; - internal string _resURL; - - /// - /// - /// - /// - public GTreeNode(bool hasChild) : this(hasChild, null) - { - - } - - /// - /// - /// - /// - /// - public GTreeNode(bool hasChild, string resURL) - { - if (hasChild) - _children = new List(); - _resURL = resURL; - } - - /// - /// - /// - public GComponent cell - { - get { return _cell; } - } - - /// - /// - /// - public int level - { - get { return _level; } - } - - /// - /// - /// - public bool expanded - { - get - { - return _expanded; - } - - set - { - if (_children == null) - return; - - if (_expanded != value) - { - _expanded = value; - if (tree != null) - { - if (_expanded) - tree._AfterExpanded(this); - else - tree._AfterCollapsed(this); - } - } - } - } - - /// - /// - /// - public void ExpandToRoot() - { - GTreeNode p = this; - while (p != null) - { - p.expanded = true; - p = p.parent; - } - } - - /// - /// - /// - public bool isFolder - { - get { return _children != null; } - } - - /// - /// - /// - public string text - { - get - { - if (_cell != null) - return _cell.text; - else - return null; - } - - set - { - if (_cell != null) - _cell.text = value; - } - } - - /// - /// - /// - public string icon - { - get - { - if (_cell != null) - return _cell.icon; - else - return null; - } - - set - { - if (_cell != null) - _cell.icon = value; - } - } - - /// - /// - /// - /// - /// - public GTreeNode AddChild(GTreeNode child) - { - AddChildAt(child, _children.Count); - return child; - } - - /// - /// - /// - /// - /// - /// - public GTreeNode AddChildAt(GTreeNode child, int index) - { - if (child == null) - throw new Exception("child is null"); - - int numChildren = _children.Count; - - if (index >= 0 && index <= numChildren) - { - if (child.parent == this) - { - SetChildIndex(child, index); - } - else - { - if (child.parent != null) - child.parent.RemoveChild(child); - - int cnt = _children.Count; - if (index == cnt) - _children.Add(child); - else - _children.Insert(index, child); - - child.parent = this; - child._level = _level + 1; - child._SetTree(this.tree); - if (tree != null && this == tree.rootNode || _cell != null && _cell.parent != null && _expanded) - tree._AfterInserted(child); - } - - return child; - } - else - { - throw new Exception("Invalid child index"); - } - } - - /// - /// - /// - /// - /// - public GTreeNode RemoveChild(GTreeNode child) - { - int childIndex = _children.IndexOf(child); - if (childIndex != -1) - { - RemoveChildAt(childIndex); - } - return child; - } - - /// - /// - /// - /// - /// - public GTreeNode RemoveChildAt(int index) - { - if (index >= 0 && index < numChildren) - { - GTreeNode child = _children[index]; - _children.RemoveAt(index); - - child.parent = null; - if (tree != null) - { - child._SetTree(null); - tree._AfterRemoved(child); - } - - return child; - } - else - { - throw new Exception("Invalid child index"); - } - } - - /// - /// - /// - /// - /// - public void RemoveChildren(int beginIndex = 0, int endIndex = -1) - { - if (endIndex < 0 || endIndex >= numChildren) - endIndex = numChildren - 1; - - for (int i = beginIndex; i <= endIndex; ++i) - RemoveChildAt(beginIndex); - } - - /// - /// - /// - /// - /// - public GTreeNode GetChildAt(int index) - { - if (index >= 0 && index < numChildren) - return _children[index]; - else - throw new Exception("Invalid child index"); - } - - /// - /// - /// - /// - /// - public int GetChildIndex(GTreeNode child) - { - return _children.IndexOf(child); - } - - /// - /// - /// - /// - public GTreeNode GetPrevSibling() - { - if (parent == null) - return null; - - int i = parent._children.IndexOf(this); - if (i <= 0) - return null; - - return parent._children[i - 1]; - } - - /// - /// - /// - /// - public GTreeNode GetNextSibling() - { - if (parent == null) - return null; - - int i = parent._children.IndexOf(this); - if (i < 0 || i >= parent._children.Count - 1) - return null; - - return parent._children[i + 1]; - } - - /// - /// - /// - /// - /// - public void SetChildIndex(GTreeNode child, int index) - { - int oldIndex = _children.IndexOf(child); - if (oldIndex == -1) - throw new Exception("Not a child of this container"); - - int cnt = _children.Count; - if (index < 0) - index = 0; - else if (index > cnt) - index = cnt; - - if (oldIndex == index) - return; - - _children.RemoveAt(oldIndex); - _children.Insert(index, child); - if (tree != null && this == tree.rootNode || _cell != null && _cell.parent != null && _expanded) - tree._AfterMoved(child); - } - - /// - /// - /// - /// - /// - public void SwapChildren(GTreeNode child1, GTreeNode child2) - { - int index1 = _children.IndexOf(child1); - int index2 = _children.IndexOf(child2); - if (index1 == -1 || index2 == -1) - throw new Exception("Not a child of this container"); - SwapChildrenAt(index1, index2); - } - - /// - /// - /// - /// - /// - public void SwapChildrenAt(int index1, int index2) - { - GTreeNode child1 = _children[index1]; - GTreeNode child2 = _children[index2]; - - SetChildIndex(child1, index2); - SetChildIndex(child2, index1); - } - - /// - /// - /// - public int numChildren - { - get { return (null == _children) ? 0 : _children.Count; } - } - - internal void _SetTree(GTree value) - { - tree = value; - if (tree != null && tree.treeNodeWillExpand != null && _expanded) - tree.treeNodeWillExpand(this, true); - - if (_children != null) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - GTreeNode node = _children[i]; - node._level = _level + 1; - node._SetTree(value); - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs.meta deleted file mode 100644 index f074700..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0507f7de6e0d34b85853b6a2f591aaf9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears.meta deleted file mode 100644 index 89715db..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b22c996c870881c438177e27f3450ac7 -folderAsset: yes -timeCreated: 1476166202 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs deleted file mode 100644 index 3638afc..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - class GearAnimationValue - { - public bool playing; - public int frame; - public string animationName; - public string skinName; - - public GearAnimationValue(bool playing, int frame) - { - this.playing = playing; - this.frame = frame; - } - } - - /// - /// Gear is a connection between object and controller. - /// - public class GearAnimation : GearBase - { - Dictionary _storage; - GearAnimationValue _default; - - public GearAnimation(GObject owner) - : base(owner) - { - } - - protected override void Init() - { - _default = new GearAnimationValue(((IAnimationGear)_owner).playing, ((IAnimationGear)_owner).frame); - if (_owner is GLoader3D) - { - _default.animationName = ((GLoader3D)_owner).animationName; - _default.skinName = ((GLoader3D)_owner).skinName; - } - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - GearAnimationValue gv; - if (pageId == null) - gv = _default; - else - { - gv = new GearAnimationValue(false, 0); - _storage[pageId] = gv; - } - - gv.playing = buffer.ReadBool(); - gv.frame = buffer.ReadInt(); - } - - public void AddExtStatus(string pageId, ByteBuffer buffer) - { - GearAnimationValue gv; - if (pageId == null) - gv = _default; - else - gv = _storage[pageId]; - gv.animationName = buffer.ReadS(); - gv.skinName = buffer.ReadS(); - } - - override public void Apply() - { - _owner._gearLocked = true; - - GearAnimationValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - gv = _default; - - IAnimationGear mc = (IAnimationGear)_owner; - mc.frame = gv.frame; - mc.playing = gv.playing; - if (_owner is GLoader3D) - { - ((GLoader3D)_owner).animationName = gv.animationName; - ((GLoader3D)_owner).skinName = gv.skinName; - } - - _owner._gearLocked = false; - } - - override public void UpdateState() - { - IAnimationGear mc = (IAnimationGear)_owner; - GearAnimationValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - _storage[_controller.selectedPageId] = gv = new GearAnimationValue(mc.playing, mc.frame); - else - { - gv.playing = mc.playing; - gv.frame = mc.frame; - } - - if (_owner is GLoader3D) - { - gv.animationName = ((GLoader3D)_owner).animationName; - gv.skinName = ((GLoader3D)_owner).skinName; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs.meta deleted file mode 100644 index a642fee..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 87e99c1910ca9684d8719dae7bdb7658 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs deleted file mode 100644 index 6d05ef7..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs +++ /dev/null @@ -1,203 +0,0 @@ -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// Gear is a connection between object and controller. - /// - abstract public class GearBase - { - public static bool disableAllTweenEffect = false; - - protected GObject _owner; - protected Controller _controller; - protected GearTweenConfig _tweenConfig; - - public GearBase(GObject owner) - { - _owner = owner; - } - - public void Dispose() - { - if (_tweenConfig != null && _tweenConfig._tweener != null) - { - _tweenConfig._tweener.Kill(); - _tweenConfig._tweener = null; - } - } - - /// - /// Controller object. - /// - public Controller controller - { - get - { - return _controller; - } - - set - { - if (value != _controller) - { - _controller = value; - if (_controller != null) - Init(); - } - } - } - - public GearTweenConfig tweenConfig - { - get - { - if (_tweenConfig == null) - _tweenConfig = new GearTweenConfig(); - return _tweenConfig; - } - } - - public void Setup(ByteBuffer buffer) - { - _controller = _owner.parent.GetControllerAt(buffer.ReadShort()); - Init(); - - int cnt = buffer.ReadShort(); - if (this is GearDisplay) - { - ((GearDisplay)this).pages = buffer.ReadSArray(cnt); - } - else if (this is GearDisplay2) - { - ((GearDisplay2)this).pages = buffer.ReadSArray(cnt); - } - else - { - for (int i = 0; i < cnt; i++) - { - string page = buffer.ReadS(); - if (page == null) - continue; - - AddStatus(page, buffer); - } - - if (buffer.ReadBool()) - AddStatus(null, buffer); - } - - if (buffer.ReadBool()) - { - _tweenConfig = new GearTweenConfig(); - _tweenConfig.easeType = (EaseType)buffer.ReadByte(); - _tweenConfig.duration = buffer.ReadFloat(); - _tweenConfig.delay = buffer.ReadFloat(); - } - - if (buffer.version >= 2) - { - if (this is GearXY) - { - if (buffer.ReadBool()) - { - ((GearXY)this).positionsInPercent = true; - for (int i = 0; i < cnt; i++) - { - string page = buffer.ReadS(); - if (page == null) - continue; - - ((GearXY)this).AddExtStatus(page, buffer); - } - - if (buffer.ReadBool()) - ((GearXY)this).AddExtStatus(null, buffer); - } - } - else if (this is GearDisplay2) - ((GearDisplay2)this).condition = buffer.ReadByte(); - } - - if (buffer.version >= 4 && _tweenConfig != null && _tweenConfig.easeType == EaseType.Custom) - { - _tweenConfig.customEase = new CustomEase(); - _tweenConfig.customEase.Create(buffer.ReadPath()); - } - - if (buffer.version >= 6) - { - if (this is GearAnimation) - { - for (int i = 0; i < cnt; i++) - { - string page = buffer.ReadS(); - if (page == null) - continue; - - ((GearAnimation)this).AddExtStatus(page, buffer); - } - - if (buffer.ReadBool()) - ((GearAnimation)this).AddExtStatus(null, buffer); - } - } - } - - virtual public void UpdateFromRelations(float dx, float dy) - { - } - - abstract protected void AddStatus(string pageId, ByteBuffer buffer); - abstract protected void Init(); - - /// - /// Call when controller active page changed. - /// - abstract public void Apply(); - - /// - /// Call when object's properties changed. - /// - abstract public void UpdateState(); - } - - public class GearTweenConfig - { - /// - /// Use tween to apply change. - /// - public bool tween; - - /// - /// Ease type. - /// - public EaseType easeType; - - /// - /// - /// - public CustomEase customEase; - - /// - /// Tween duration in seconds. - /// - public float duration; - - /// - /// Tween delay in seconds. - /// - public float delay; - - internal uint _displayLockToken; - internal GTweener _tweener; - - public GearTweenConfig() - { - tween = true; - easeType = EaseType.QuadOut; - duration = 0.3f; - delay = 0; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs.meta deleted file mode 100644 index 6c52607..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 2050e67af29d06a44834f7ffbfe14e83 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs deleted file mode 100644 index 0e07b85..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - class GearColorValue - { - public Color color; - public Color strokeColor; - - public GearColorValue() - { - } - - public GearColorValue(Color color, Color strokeColor) - { - this.color = color; - this.strokeColor = strokeColor; - } - } - - /// - /// Gear is a connection between object and controller. - /// - public class GearColor : GearBase, ITweenListener - { - Dictionary _storage; - GearColorValue _default; - - public GearColor(GObject owner) - : base(owner) - { - } - - protected override void Init() - { - _default = new GearColorValue(); - _default.color = ((IColorGear)_owner).color; - if (_owner is ITextColorGear) - _default.strokeColor = ((ITextColorGear)_owner).strokeColor; - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - GearColorValue gv; - if (pageId == null) - gv = _default; - else - { - gv = new GearColorValue(Color.black, Color.black); - _storage[pageId] = gv; - } - - gv.color = buffer.ReadColor(); - gv.strokeColor = buffer.ReadColor(); - } - - override public void Apply() - { - GearColorValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - gv = _default; - - if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) - { - if ((_owner is ITextColorGear) && gv.strokeColor.a > 0) - { - _owner._gearLocked = true; - ((ITextColorGear)_owner).strokeColor = gv.strokeColor; - _owner._gearLocked = false; - } - - if (_tweenConfig._tweener != null) - { - if (_tweenConfig._tweener.endValue.color != gv.color) - { - _tweenConfig._tweener.Kill(true); - _tweenConfig._tweener = null; - } - else - return; - } - - if (((IColorGear)_owner).color != gv.color) - { - if (_owner.CheckGearController(0, _controller)) - _tweenConfig._displayLockToken = _owner.AddDisplayLock(); - - _tweenConfig._tweener = GTween.To(((IColorGear)_owner).color, gv.color, _tweenConfig.duration) - .SetDelay(_tweenConfig.delay) - .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) - .SetTarget(this) - .SetListener(this); - } - } - else - { - _owner._gearLocked = true; - ((IColorGear)_owner).color = gv.color; - if ((_owner is ITextColorGear) && gv.strokeColor.a > 0) - ((ITextColorGear)_owner).strokeColor = gv.strokeColor; - _owner._gearLocked = false; - } - } - - public void OnTweenStart(GTweener tweener) - { - } - - public void OnTweenUpdate(GTweener tweener) - { - _owner._gearLocked = true; - ((IColorGear)_owner).color = tweener.value.color; - _owner._gearLocked = false; - - _owner.InvalidateBatchingState(); - } - - public void OnTweenComplete(GTweener tweener) - { - _tweenConfig._tweener = null; - if (_tweenConfig._displayLockToken != 0) - { - _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); - _tweenConfig._displayLockToken = 0; - } - _owner.DispatchEvent("onGearStop", this); - } - - override public void UpdateState() - { - GearColorValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - _storage[_controller.selectedPageId] = gv = new GearColorValue(); - gv.color = ((IColorGear)_owner).color; - if (_owner is ITextColorGear) - gv.strokeColor = ((ITextColorGear)_owner).strokeColor; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs.meta deleted file mode 100644 index 31a20e4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a4878a5e9a94c1d429c827f93ca3072b -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs deleted file mode 100644 index c8c2e8a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// Gear is a connection between object and controller. - /// - public class GearDisplay : GearBase - { - /// - /// Pages involed in this gear. - /// - public string[] pages { get; set; } - - int _visible; - uint _displayLockToken; - - public GearDisplay(GObject owner) - : base(owner) - { - _displayLockToken = 1; - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - } - - override protected void Init() - { - pages = null; - } - - override public void Apply() - { - _displayLockToken++; - if (_displayLockToken == 0) - _displayLockToken = 1; - - if (pages == null || pages.Length == 0 - || Array.IndexOf(pages, _controller.selectedPageId) != -1) - _visible = 1; - else - _visible = 0; - } - - override public void UpdateState() - { - } - - public uint AddLock() - { - _visible++; - return _displayLockToken; - } - - public void ReleaseLock(uint token) - { - if (token == _displayLockToken) - _visible--; - } - - public bool connected - { - get { return _controller == null || _visible > 0; } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs.meta deleted file mode 100644 index 7c3c0ed..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: f88c3ac62122e7141a5d6c41eb11da27 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs deleted file mode 100644 index 8e812d0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// Gear is a connection between object and controller. - /// - public class GearDisplay2 : GearBase - { - /// - /// Pages involed in this gear. - /// - public string[] pages { get; set; } - public int condition; - - int _visible; - - public GearDisplay2(GObject owner) - : base(owner) - { - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - } - - override protected void Init() - { - pages = null; - } - - override public void Apply() - { - if (pages == null || pages.Length == 0 - || Array.IndexOf(pages, _controller.selectedPageId) != -1) - _visible = 1; - else - _visible = 0; - } - - override public void UpdateState() - { - } - public bool Evaluate(bool connected) - { - bool v = _controller == null || _visible > 0; - if (this.condition == 0) - v = v && connected; - else - v = v || connected; - return v; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs.meta deleted file mode 100644 index a0dbf5e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 96390d060150348e98dfe41bf7d23f5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs deleted file mode 100644 index 3d3965c..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// Gear is a connection between object and controller. - /// - public class GearFontSize : GearBase - { - Dictionary _storage; - int _default; - GTextField _textField; - - public GearFontSize(GObject owner) - : base(owner) - { - } - - protected override void Init() - { - if (_owner is GLabel) - _textField = ((GLabel)_owner).GetTextField(); - else if (_owner is GButton) - _textField = ((GButton)_owner).GetTextField(); - else - _textField = (GTextField)_owner; - - _default = _textField.textFormat.size; - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - if (pageId == null) - _default = buffer.ReadInt(); - else - _storage[pageId] = buffer.ReadInt(); - } - - override public void Apply() - { - if (_textField == null) - return; - - _owner._gearLocked = true; - - int cv; - if (!_storage.TryGetValue(_controller.selectedPageId, out cv)) - cv = _default; - - TextFormat tf = _textField.textFormat; - tf.size = cv; - _textField.textFormat = tf; - - _owner._gearLocked = false; - } - - override public void UpdateState() - { - if (_textField != null) - _storage[_controller.selectedPageId] = _textField.textFormat.size; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs.meta deleted file mode 100644 index e1ee194..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2d3a7b66a83334b44bb8630ecc980a59 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs deleted file mode 100644 index be04750..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// Gear is a connection between object and controller. - /// - public class GearIcon : GearBase - { - Dictionary _storage; - string _default; - - public GearIcon(GObject owner) - : base(owner) - { - } - - protected override void Init() - { - _default = _owner.icon; - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - if (pageId == null) - _default = buffer.ReadS(); - else - _storage[pageId] = buffer.ReadS(); - } - - override public void Apply() - { - _owner._gearLocked = true; - - string cv; - if (!_storage.TryGetValue(_controller.selectedPageId, out cv)) - cv = _default; - - _owner.icon = cv; - - _owner._gearLocked = false; - } - - override public void UpdateState() - { - _storage[_controller.selectedPageId] = _owner.icon; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs.meta deleted file mode 100644 index d8a61b1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 27b2a638ddb815f40994e0477c3ea4c0 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs deleted file mode 100644 index 20c7520..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - class GearLookValue - { - public float alpha; - public float rotation; - public bool grayed; - public bool touchable; - - public GearLookValue(float alpha, float rotation, bool grayed, bool touchable) - { - this.alpha = alpha; - this.rotation = rotation; - this.grayed = grayed; - this.touchable = touchable; - } - } - - /// - /// Gear is a connection between object and controller. - /// - public class GearLook : GearBase, ITweenListener - { - Dictionary _storage; - GearLookValue _default; - - public GearLook(GObject owner) - : base(owner) - { - } - - protected override void Init() - { - _default = new GearLookValue(_owner.alpha, _owner.rotation, _owner.grayed, _owner.touchable); - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - GearLookValue gv; - if (pageId == null) - gv = _default; - else - { - gv = new GearLookValue(0, 0, false, false); - _storage[pageId] = gv; - } - - gv.alpha = buffer.ReadFloat(); - gv.rotation = buffer.ReadFloat(); - gv.grayed = buffer.ReadBool(); - gv.touchable = buffer.ReadBool(); - } - - override public void Apply() - { - GearLookValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - gv = _default; - - if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) - { - _owner._gearLocked = true; - _owner.grayed = gv.grayed; - _owner.touchable = gv.touchable; - _owner._gearLocked = false; - - if (_tweenConfig._tweener != null) - { - if (_tweenConfig._tweener.endValue.x != gv.alpha || _tweenConfig._tweener.endValue.y != gv.rotation) - { - _tweenConfig._tweener.Kill(true); - _tweenConfig._tweener = null; - } - else - return; - } - - bool a = gv.alpha != _owner.alpha; - bool b = gv.rotation != _owner.rotation; - if (a || b) - { - if (_owner.CheckGearController(0, _controller)) - _tweenConfig._displayLockToken = _owner.AddDisplayLock(); - - _tweenConfig._tweener = GTween.To(new Vector2(_owner.alpha, _owner.rotation), new Vector2(gv.alpha, gv.rotation), _tweenConfig.duration) - .SetDelay(_tweenConfig.delay) - .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) - .SetUserData((a ? 1 : 0) + (b ? 2 : 0)) - .SetTarget(this) - .SetListener(this); - } - } - else - { - _owner._gearLocked = true; - _owner.alpha = gv.alpha; - _owner.rotation = gv.rotation; - _owner.grayed = gv.grayed; - _owner.touchable = gv.touchable; - _owner._gearLocked = false; - } - } - - public void OnTweenStart(GTweener tweener) - { - } - - public void OnTweenUpdate(GTweener tweener) - { - int flag = (int)tweener.userData; - _owner._gearLocked = true; - if ((flag & 1) != 0) - _owner.alpha = tweener.value.x; - if ((flag & 2) != 0) - { - _owner.rotation = tweener.value.y; - _owner.InvalidateBatchingState(); - } - _owner._gearLocked = false; - } - - public void OnTweenComplete(GTweener tweener) - { - _tweenConfig._tweener = null; - if (_tweenConfig._displayLockToken != 0) - { - _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); - _tweenConfig._displayLockToken = 0; - } - _owner.DispatchEvent("onGearStop", this); - } - - override public void UpdateState() - { - GearLookValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - _storage[_controller.selectedPageId] = new GearLookValue(_owner.alpha, _owner.rotation, _owner.grayed, _owner.touchable); - else - { - gv.alpha = _owner.alpha; - gv.rotation = _owner.rotation; - gv.grayed = _owner.grayed; - gv.touchable = _owner.touchable; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs.meta deleted file mode 100644 index 0e4017e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 77704143cdb38714196c9ff520a079f8 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs deleted file mode 100644 index e949097..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs +++ /dev/null @@ -1,163 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - class GearSizeValue - { - public float width; - public float height; - public float scaleX; - public float scaleY; - - public GearSizeValue(float width, float height, float scaleX, float scaleY) - { - this.width = width; - this.height = height; - this.scaleX = scaleX; - this.scaleY = scaleY; - } - } - - /// - /// Gear is a connection between object and controller. - /// - public class GearSize : GearBase, ITweenListener - { - Dictionary _storage; - GearSizeValue _default; - - public GearSize(GObject owner) - : base(owner) - { - - } - - protected override void Init() - { - _default = new GearSizeValue(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY); - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - GearSizeValue gv; - if (pageId == null) - gv = _default; - else - { - gv = new GearSizeValue(0, 0, 1, 1); - _storage[pageId] = gv; - } - - gv.width = buffer.ReadInt(); - gv.height = buffer.ReadInt(); - gv.scaleX = buffer.ReadFloat(); - gv.scaleY = buffer.ReadFloat(); - } - - override public void Apply() - { - GearSizeValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - gv = _default; - - if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) - { - if (_tweenConfig._tweener != null) - { - if (_tweenConfig._tweener.endValue.x != gv.width || _tweenConfig._tweener.endValue.y != gv.height - || _tweenConfig._tweener.endValue.z != gv.scaleX || _tweenConfig._tweener.endValue.w != gv.scaleY) - { - _tweenConfig._tweener.Kill(true); - _tweenConfig._tweener = null; - } - else - return; - } - - bool a = gv.width != _owner.width || gv.height != _owner.height; - bool b = gv.scaleX != _owner.scaleX || gv.scaleY != _owner.scaleY; - if (a || b) - { - if (_owner.CheckGearController(0, _controller)) - _tweenConfig._displayLockToken = _owner.AddDisplayLock(); - - _tweenConfig._tweener = GTween.To(new Vector4(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY), - new Vector4(gv.width, gv.height, gv.scaleX, gv.scaleY), _tweenConfig.duration) - .SetDelay(_tweenConfig.delay) - .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) - .SetUserData((a ? 1 : 0) + (b ? 2 : 0)) - .SetTarget(this) - .SetListener(this); - } - } - else - { - _owner._gearLocked = true; - _owner.SetSize(gv.width, gv.height, _owner.CheckGearController(1, _controller)); - _owner.SetScale(gv.scaleX, gv.scaleY); - _owner._gearLocked = false; - } - } - - public void OnTweenStart(GTweener tweener) - { - } - - public void OnTweenUpdate(GTweener tweener) - { - _owner._gearLocked = true; - int flag = (int)tweener.userData; - if ((flag & 1) != 0) - _owner.SetSize(tweener.value.x, tweener.value.y, _owner.CheckGearController(1, _controller)); - if ((flag & 2) != 0) - _owner.SetScale(tweener.value.z, tweener.value.w); - _owner._gearLocked = false; - - _owner.InvalidateBatchingState(); - } - - public void OnTweenComplete(GTweener tweener) - { - _tweenConfig._tweener = null; - if (_tweenConfig._displayLockToken != 0) - { - _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); - _tweenConfig._displayLockToken = 0; - } - _owner.DispatchEvent("onGearStop", this); - } - - override public void UpdateState() - { - GearSizeValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - _storage[_controller.selectedPageId] = new GearSizeValue(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY); - else - { - gv.width = _owner.width; - gv.height = _owner.height; - gv.scaleX = _owner.scaleX; - gv.scaleY = _owner.scaleY; - } - } - - override public void UpdateFromRelations(float dx, float dy) - { - if (_controller != null && _storage != null) - { - foreach (GearSizeValue gv in _storage.Values) - { - gv.width += dx; - gv.height += dy; - } - _default.width += dx; - _default.height += dy; - - UpdateState(); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs.meta deleted file mode 100644 index d20510e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 254f71ab913968a4e853a99ce79f0266 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs deleted file mode 100644 index 7cef440..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// Gear is a connection between object and controller. - /// - public class GearText : GearBase - { - Dictionary _storage; - string _default; - - public GearText(GObject owner) - : base(owner) - { - } - - protected override void Init() - { - _default = _owner.text; - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - if (pageId == null) - _default = buffer.ReadS(); - else - _storage[pageId] = buffer.ReadS(); - } - - override public void Apply() - { - _owner._gearLocked = true; - - string cv; - if (!_storage.TryGetValue(_controller.selectedPageId, out cv)) - cv = _default; - - _owner.text = cv; - - _owner._gearLocked = false; - } - - override public void UpdateState() - { - _storage[_controller.selectedPageId] = _owner.text; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs.meta deleted file mode 100644 index 2dbe1dd..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d8b20f3a5dd39ec42bed3456334916fc -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs deleted file mode 100644 index ed48c78..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - class GearXYValue - { - public float x; - public float y; - public float px; - public float py; - - public GearXYValue(float x = 0, float y = 0, float px = 0, float py = 0) - { - this.x = x; - this.y = y; - this.px = px; - this.py = py; - } - } - - /// - /// Gear is a connection between object and controller. - /// - public class GearXY : GearBase, ITweenListener - { - public bool positionsInPercent; - - Dictionary _storage; - GearXYValue _default; - - public GearXY(GObject owner) - : base(owner) - { - } - - protected override void Init() - { - _default = new GearXYValue(_owner.x, _owner.y, _owner.x / _owner.parent.width, _owner.y / _owner.parent.height); - _storage = new Dictionary(); - } - - override protected void AddStatus(string pageId, ByteBuffer buffer) - { - GearXYValue gv; - if (pageId == null) - gv = _default; - else - { - gv = new GearXYValue(); - _storage[pageId] = gv; - } - - gv.x = buffer.ReadInt(); - gv.y = buffer.ReadInt(); - } - - public void AddExtStatus(string pageId, ByteBuffer buffer) - { - GearXYValue gv; - if (pageId == null) - gv = _default; - else - gv = _storage[pageId]; - gv.px = buffer.ReadFloat(); - gv.py = buffer.ReadFloat(); - } - - override public void Apply() - { - GearXYValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - gv = _default; - - Vector2 endPos = new Vector2(); - - if (positionsInPercent && _owner.parent != null) - { - endPos.x = gv.px * _owner.parent.width; - endPos.y = gv.py * _owner.parent.height; - } - else - { - endPos.x = gv.x; - endPos.y = gv.y; - } - - if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) - { - if (_tweenConfig._tweener != null) - { - if (_tweenConfig._tweener.endValue.x != endPos.x || _tweenConfig._tweener.endValue.y != endPos.y) - { - _tweenConfig._tweener.Kill(true); - _tweenConfig._tweener = null; - } - else - return; - } - Vector2 origin = _owner.xy; - - if (endPos != origin) - { - if (_owner.CheckGearController(0, _controller)) - _tweenConfig._displayLockToken = _owner.AddDisplayLock(); - - _tweenConfig._tweener = GTween.To(origin, endPos, _tweenConfig.duration) - .SetDelay(_tweenConfig.delay) - .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) - .SetTarget(this) - .SetListener(this); - } - } - else - { - _owner._gearLocked = true; - _owner.SetXY(endPos.x, endPos.y); - _owner._gearLocked = false; - } - } - - public void OnTweenStart(GTweener tweener) - {//nothing - } - - public void OnTweenUpdate(GTweener tweener) - { - _owner._gearLocked = true; - _owner.SetXY(tweener.value.x, tweener.value.y); - _owner._gearLocked = false; - - _owner.InvalidateBatchingState(); - } - - public void OnTweenComplete(GTweener tweener) - { - _tweenConfig._tweener = null; - if (_tweenConfig._displayLockToken != 0) - { - _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); - _tweenConfig._displayLockToken = 0; - } - _owner.DispatchEvent("onGearStop", this); - } - - override public void UpdateState() - { - GearXYValue gv; - if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) - _storage[_controller.selectedPageId] = gv = new GearXYValue(); - - gv.x = _owner.x; - gv.y = _owner.y; - - gv.px = _owner.x / _owner.parent.width; - gv.py = _owner.y / _owner.parent.height; - - } - - override public void UpdateFromRelations(float dx, float dy) - { - if (_controller != null && _storage != null && !positionsInPercent) - { - foreach (GearXYValue gv in _storage.Values) - { - gv.x += dx; - gv.y += dy; - } - _default.x += dx; - _default.y += dy; - - UpdateState(); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs.meta deleted file mode 100644 index 1d0de02..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 082a852494dc8b94485733188788d58c -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs deleted file mode 100644 index 7c7900f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs +++ /dev/null @@ -1,35 +0,0 @@ - -namespace FairyGUI -{ - /// - /// - /// - public interface IAnimationGear - { - /// - /// - /// - bool playing { get; set; } - - /// - /// - /// - int frame { get; set; } - - /// - /// - /// - float timeScale { get; set; } - - /// - /// - /// - bool ignoreEngineTimeScale { get; set; } - - /// - /// - /// - /// - void Advance(float time); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs.meta deleted file mode 100644 index fa9f30d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d68e5b2a3af5c444689f459a8b265df7 -timeCreated: 1476166204 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs deleted file mode 100644 index a3b9f23..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public interface IColorGear - { - /// - /// - /// - Color color { get; set; } - } - - /// - /// - /// - public interface ITextColorGear : IColorGear - { - /// - /// - /// - Color strokeColor { get; set; } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs.meta deleted file mode 100644 index 40b05e4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e872cd17b52152a4fa250c830b9bb8cd -timeCreated: 1476166204 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs b/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs deleted file mode 100644 index e6623b2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs +++ /dev/null @@ -1,36 +0,0 @@ - -namespace FairyGUI -{ - /// - /// - /// - public delegate void UILoadCallback(); - - /// - /// - /// - public interface IUISource - { - /// - /// - /// - string fileName { get; set; } - - /// - /// - /// - bool loaded { get; } - - /// - /// - /// - /// - void Load(UILoadCallback callback); - - /// - /// 取消加载 - /// - void Cancel(); - - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs.meta deleted file mode 100644 index acb9ebe..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c742c10608d6ac84bb210a9d6abcb05d -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs deleted file mode 100644 index 5955172..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs +++ /dev/null @@ -1,29 +0,0 @@ - -namespace FairyGUI -{ - /// - /// - /// - public struct Margin - { - /// - /// - /// - public int left; - - /// - /// - /// - public int right; - - /// - /// - /// - public int top; - - /// - /// - /// - public int bottom; - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs.meta deleted file mode 100644 index e70a962..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7f31f9a61b0590943ac37f1c16ff0dc9 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs b/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs deleted file mode 100644 index 8038723..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class PackageItem - { - public UIPackage owner; - - public PackageItemType type; - public ObjectType objectType; - - public string id; - public string name; - public int width; - public int height; - public string file; - public bool exported; - public NTexture texture; - public ByteBuffer rawData; - public string[] branches; - public string[] highResolution; - - //image - public Rect? scale9Grid; - public bool scaleByTile; - public int tileGridIndice; - public PixelHitTestData pixelHitTestData; - - //movieclip - public float interval; - public float repeatDelay; - public bool swing; - public MovieClip.Frame[] frames; - - //component - public bool translated; - public UIObjectFactory.GComponentCreator extensionCreator; - - //font - public BitmapFont bitmapFont; - - //sound - public NAudioClip audioClip; - - //spine/dragonbones - public Vector2 skeletonAnchor; - public object skeletonAsset; - public HashSet skeletonLoaders; - - public object Load() - { - return owner.GetItemAsset(this); - } - - public PackageItem getBranch() - { - if (branches != null && owner._branchIndex != -1) - { - string itemId = branches[owner._branchIndex]; - if (itemId != null) - return owner.GetItem(itemId); - } - - return this; - } - - public PackageItem getHighResolution() - { - if (highResolution != null && GRoot.contentScaleLevel > 0) - { - int i = GRoot.contentScaleLevel - 1; - if (i >= highResolution.Length) - i = highResolution.Length - 1; - string itemId = highResolution[i]; - if (itemId != null) - return owner.GetItem(itemId); - } - - return this; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs.meta deleted file mode 100644 index 292b7bb..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: acb6fb5c63e3f49409db871a5a97261b -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs b/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs deleted file mode 100644 index f349860..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs +++ /dev/null @@ -1,565 +0,0 @@ -using System; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public class PopupMenu : EventDispatcher - { - protected GComponent _contentPane; - protected GList _list; - protected GObject _expandingItem; - - PopupMenu _parentMenu; - TimerCallback _showSubMenu; - TimerCallback _closeSubMenu; - EventListener _onPopup; - EventListener _onClose; - - public int visibleItemCount; - public bool hideOnClickItem; - public bool autoSize; - - const string EVENT_TYPE = "PopupMenuItemClick"; - - public PopupMenu() - { - Create(null); - } - - /// - /// - /// - /// - public PopupMenu(string resourceURL) - { - Create(resourceURL); - } - - public EventListener onPopup - { - get { return _onPopup ?? (_onPopup = new EventListener(this, "onPopup")); } - } - - public EventListener onClose - { - get { return _onClose ?? (_onClose = new EventListener(this, "onClose")); } - } - - void Create(string resourceURL) - { - if (resourceURL == null) - { - resourceURL = UIConfig.popupMenu; - if (resourceURL == null) - { - Debug.LogError("FairyGUI: UIConfig.popupMenu not defined"); - return; - } - } - - _contentPane = UIPackage.CreateObjectFromURL(resourceURL).asCom; - _contentPane.onAddedToStage.Add(__addedToStage); - _contentPane.onRemovedFromStage.Add(__removeFromStage); - _contentPane.focusable = false; - - _list = _contentPane.GetChild("list").asList; - _list.RemoveChildrenToPool(); - - _list.AddRelation(_contentPane, RelationType.Width); - _list.RemoveRelation(_contentPane, RelationType.Height); - _contentPane.AddRelation(_list, RelationType.Height); - - _list.onClickItem.Add(__clickItem); - - hideOnClickItem = true; - _showSubMenu = __showSubMenu; - _closeSubMenu = CloseSubMenu; - } - - /// - /// - /// - /// - /// - /// - public GButton AddItem(string caption, EventCallback0 callback) - { - GButton item = CreateItem(caption, callback); - _list.AddChild(item); - - return item; - } - - /// - /// - /// - /// - /// - /// - public GButton AddItem(string caption, EventCallback1 callback) - { - GButton item = CreateItem(caption, callback); - _list.AddChild(item); - - return item; - } - - /// - /// - /// - /// - /// - /// - /// - public GButton AddItemAt(string caption, int index, EventCallback1 callback) - { - GButton item = CreateItem(caption, callback); - _list.AddChildAt(item, index); - - return item; - } - - /// - /// - /// - /// - /// - /// - /// - public GButton AddItemAt(string caption, int index, EventCallback0 callback) - { - GButton item = CreateItem(caption, callback); - _list.AddChildAt(item, index); - - return item; - } - - GButton CreateItem(string caption, Delegate callback) - { - GButton item = _list.GetFromPool(_list.defaultItem).asButton; - item.title = caption; - item.grayed = false; - Controller c = item.GetController("checked"); - if (c != null) - c.selectedIndex = 0; - item.RemoveEventListeners(EVENT_TYPE); - if (callback is EventCallback0) - item.AddEventListener(EVENT_TYPE, (EventCallback0)callback); - else - item.AddEventListener(EVENT_TYPE, (EventCallback1)callback); - - item.onRollOver.Add(__rollOver); - item.onRollOut.Add(__rollOut); - - return item; - } - - /// - /// - /// - public void AddSeperator() - { - AddSeperator(-1); - } - - /// - /// - /// - public void AddSeperator(int index) - { - if (UIConfig.popupMenu_seperator == null) - { - Debug.LogError("FairyGUI: UIConfig.popupMenu_seperator not defined"); - return; - } - - if (index == -1) - _list.AddItemFromPool(UIConfig.popupMenu_seperator); - else - { - GObject item = _list.GetFromPool(UIConfig.popupMenu_seperator); - _list.AddChildAt(item, index); - } - } - - /// - /// - /// - /// - /// - public string GetItemName(int index) - { - GButton item = _list.GetChildAt(index).asButton; - return item.name; - } - - /// - /// - /// - /// - /// - public void SetItemText(string name, string caption) - { - GButton item = _list.GetChild(name).asButton; - item.title = caption; - } - - /// - /// - /// - /// - /// - public void SetItemVisible(string name, bool visible) - { - GButton item = _list.GetChild(name).asButton; - if (item.visible != visible) - { - item.visible = visible; - _list.SetBoundsChangedFlag(); - } - } - - /// - /// - /// - /// - /// - public void SetItemGrayed(string name, bool grayed) - { - GButton item = _list.GetChild(name).asButton; - item.grayed = grayed; - } - - /// - /// - /// - /// - /// - public void SetItemCheckable(string name, bool checkable) - { - GButton item = _list.GetChild(name).asButton; - Controller c = item.GetController("checked"); - if (c != null) - { - if (checkable) - { - if (c.selectedIndex == 0) - c.selectedIndex = 1; - } - else - c.selectedIndex = 0; - } - } - - /// - /// - /// - /// - /// - public void SetItemChecked(string name, bool check) - { - GButton item = _list.GetChild(name).asButton; - Controller c = item.GetController("checked"); - if (c != null) - c.selectedIndex = check ? 2 : 1; - } - - [Obsolete("Use IsItemChecked instead")] - public bool isItemChecked(string name) - { - return IsItemChecked(name); - } - - /// - /// - /// - /// - /// - public bool IsItemChecked(string name) - { - GButton item = _list.GetChild(name).asButton; - Controller c = item.GetController("checked"); - if (c != null) - return c.selectedIndex == 2; - else - return false; - } - - /// - /// - /// - /// - public void RemoveItem(string name) - { - GComponent item = _list.GetChild(name).asCom; - if (item != null) - { - item.RemoveEventListeners(EVENT_TYPE); - if (item.data is PopupMenu) - { - ((PopupMenu)item.data).Dispose(); - item.data = null; - } - int index = _list.GetChildIndex(item); - _list.RemoveChildToPoolAt(index); - } - } - - /// - /// - /// - public void ClearItems() - { - _list.RemoveChildrenToPool(); - } - - /// - /// - /// - public int itemCount - { - get { return _list.numChildren; } - } - - /// - /// - /// - public GComponent contentPane - { - get { return _contentPane; } - } - - /// - /// - /// - public GList list - { - get { return _list; } - } - - public void Dispose() - { - int cnt = _list.numChildren; - for (int i = 0; i < cnt; i++) - { - GObject obj = _list.GetChildAt(i); - if (obj.data is PopupMenu) - ((PopupMenu)obj.data).Dispose(); - } - _contentPane.Dispose(); - } - - /// - /// - /// - public void Show() - { - Show(null, PopupDirection.Auto); - } - - /// - /// - /// - /// - public void Show(GObject target) - { - Show(target, PopupDirection.Auto, null); - } - - [Obsolete] - public void Show(GObject target, object downward) - { - Show(target, downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up), null); - } - - /// - /// - /// - /// - /// - public void Show(GObject target, PopupDirection dir) - { - Show(target, PopupDirection.Auto, null); - } - - /// - /// - /// - /// - /// - /// - public void Show(GObject target, PopupDirection dir, PopupMenu parentMenu) - { - GRoot r = target != null ? target.root : GRoot.inst; - r.ShowPopup(this.contentPane, (target is GRoot) ? null : target, dir); - _parentMenu = parentMenu; - } - - public void Hide() - { - if (contentPane.parent != null) - ((GRoot)contentPane.parent).HidePopup(contentPane); - } - - void ShowSubMenu(GObject item) - { - _expandingItem = item; - - PopupMenu popup = item.data as PopupMenu; - if (item is GButton) - ((GButton)item).selected = true; - popup.Show(item, PopupDirection.Auto, this); - - Vector2 pt = contentPane.LocalToRoot(new Vector2(item.x + item.width - 5, item.y - 5), item.root); - popup.contentPane.position = pt; - } - - void CloseSubMenu(object param) - { - if (contentPane.isDisposed) - return; - - if (_expandingItem == null) - return; - - if (_expandingItem is GButton) - ((GButton)_expandingItem).selected = false; - PopupMenu popup = (PopupMenu)_expandingItem.data; - if (popup == null) - return; - - _expandingItem = null; - popup.Hide(); - } - - private void __clickItem(EventContext context) - { - GButton item = ((GObject)context.data).asButton; - if (item == null) - return; - - if (item.grayed) - { - _list.selectedIndex = -1; - return; - } - - Controller c = item.GetController("checked"); - if (c != null && c.selectedIndex != 0) - { - if (c.selectedIndex == 1) - c.selectedIndex = 2; - else - c.selectedIndex = 1; - } - - if (hideOnClickItem) - { - if (_parentMenu != null) - _parentMenu.Hide(); - Hide(); - } - - item.DispatchEvent(EVENT_TYPE, item); //event data is for backward compatibility - } - - void __addedToStage() - { - DispatchEvent("onPopup", null); - - if (autoSize) - { - _list.EnsureBoundsCorrect(); - int cnt = _list.numChildren; - float maxDelta = -1000; - for (int i = 0; i < cnt; i++) - { - GButton obj = _list.GetChildAt(i).asButton; - if (obj == null) - continue; - GTextField tf = obj.GetTextField(); - if (tf != null) - { - float v = tf.textWidth - tf.width; - if (v > maxDelta) - maxDelta = v; - } - } - - if (contentPane.width + maxDelta > contentPane.initWidth) - contentPane.width += maxDelta; - else - contentPane.width = contentPane.initWidth; - } - - _list.selectedIndex = -1; - _list.ResizeToFit(visibleItemCount > 0 ? visibleItemCount : int.MaxValue, 10); - } - - void __removeFromStage() - { - _parentMenu = null; - - if (_expandingItem != null) - Timers.inst.Add(0, 1, _closeSubMenu); - - DispatchEvent("onClose", null); - } - - void __rollOver(EventContext context) - { - GObject item = (GObject)context.sender; - if ((item.data is PopupMenu) || _expandingItem != null) - { - Timers.inst.Add(0.1f, 1, _showSubMenu, item); - } - } - - void __showSubMenu(object param) - { - if (contentPane.isDisposed) - return; - - GObject item = (GObject)param; - GRoot r = contentPane.root; - if (r == null) - return; - - if (_expandingItem != null) - { - if (_expandingItem == item) - return; - - CloseSubMenu(null); - } - - PopupMenu popup = item.data as PopupMenu; - if (popup == null) - return; - - ShowSubMenu(item); - } - - void __rollOut(EventContext context) - { - if (_expandingItem == null) - return; - - Timers.inst.Remove(_showSubMenu); - - GRoot r = contentPane.root; - if (r != null) - { - PopupMenu popup = (PopupMenu)_expandingItem.data; - Vector2 pt = popup.contentPane.GlobalToLocal(context.inputEvent.position); - if (pt.x >= 0 && pt.y >= 0 && pt.x < popup.contentPane.width && pt.y < popup.contentPane.height) - return; - } - - CloseSubMenu(null); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs.meta deleted file mode 100644 index e82a03f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: f15a5c9ba9a949d468aeb92e75f70dbd -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs b/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs deleted file mode 100644 index 62133ad..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs +++ /dev/null @@ -1,672 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - class RelationDef - { - public bool percent; - public RelationType type; - public int axis; - - public void copyFrom(RelationDef source) - { - this.percent = source.percent; - this.type = source.type; - this.axis = source.axis; - } - } - - class RelationItem - { - GObject _owner; - GObject _target; - List _defs; - Vector4 _targetData; - - public RelationItem(GObject owner) - { - _owner = owner; - _defs = new List(); - } - - public GObject target - { - get { return _target; } - set - { - if (_target != value) - { - if (_target != null) - ReleaseRefTarget(_target); - _target = value; - if (_target != null) - AddRefTarget(_target); - } - } - } - - public void Add(RelationType relationType, bool usePercent) - { - if (relationType == RelationType.Size) - { - Add(RelationType.Width, usePercent); - Add(RelationType.Height, usePercent); - return; - } - - int dc = _defs.Count; - for (int k = 0; k < dc; k++) - { - if (_defs[k].type == relationType) - return; - } - - InternalAdd(relationType, usePercent); - } - - public void InternalAdd(RelationType relationType, bool usePercent) - { - if (relationType == RelationType.Size) - { - InternalAdd(RelationType.Width, usePercent); - InternalAdd(RelationType.Height, usePercent); - return; - } - - RelationDef info = new RelationDef(); - info.percent = usePercent; - info.type = relationType; - info.axis = (relationType <= RelationType.Right_Right || relationType == RelationType.Width || relationType >= RelationType.LeftExt_Left && relationType <= RelationType.RightExt_Right) ? 0 : 1; - _defs.Add(info); - } - - public void Remove(RelationType relationType) - { - if (relationType == RelationType.Size) - { - Remove(RelationType.Width); - Remove(RelationType.Height); - return; - } - - int dc = _defs.Count; - for (int k = 0; k < dc; k++) - { - if (_defs[k].type == relationType) - { - _defs.RemoveAt(k); - break; - } - } - } - - public void CopyFrom(RelationItem source) - { - this.target = source.target; - - _defs.Clear(); - foreach (RelationDef info in source._defs) - { - RelationDef info2 = new RelationDef(); - info2.copyFrom(info); - _defs.Add(info2); - } - } - - public void Dispose() - { - if (_target != null) - { - ReleaseRefTarget(_target); - _target = null; - } - } - - public bool isEmpty - { - get { return _defs.Count == 0; } - } - - public void ApplyOnSelfSizeChanged(float dWidth, float dHeight, bool applyPivot) - { - int cnt = _defs.Count; - if (cnt == 0) - return; - - float ox = _owner.x; - float oy = _owner.y; - - for (int i = 0; i < cnt; i++) - { - RelationDef info = _defs[i]; - switch (info.type) - { - case RelationType.Center_Center: - _owner.x -= (0.5f - (applyPivot ? _owner.pivotX : 0)) * dWidth; - break; - - case RelationType.Right_Center: - case RelationType.Right_Left: - case RelationType.Right_Right: - _owner.x -= (1 - (applyPivot ? _owner.pivotX : 0)) * dWidth; - break; - - case RelationType.Middle_Middle: - _owner.y -= (0.5f - (applyPivot ? _owner.pivotY : 0)) * dHeight; - break; - - case RelationType.Bottom_Middle: - case RelationType.Bottom_Top: - case RelationType.Bottom_Bottom: - _owner.y -= (1 - (applyPivot ? _owner.pivotY : 0)) * dHeight; - break; - } - } - - if (!Mathf.Approximately(ox, _owner.x) || !Mathf.Approximately(oy, _owner.y)) - { - ox = _owner.x - ox; - oy = _owner.y - oy; - - _owner.UpdateGearFromRelations(1, ox, oy); - - if (_owner.parent != null) - { - int transCount = _owner.parent._transitions.Count; - for (int i = 0; i < transCount; i++) - _owner.parent._transitions[i].UpdateFromRelations(_owner.id, ox, oy); - } - } - } - - void ApplyOnXYChanged(RelationDef info, float dx, float dy) - { - float tmp; - switch (info.type) - { - case RelationType.Left_Left: - case RelationType.Left_Center: - case RelationType.Left_Right: - case RelationType.Center_Center: - case RelationType.Right_Left: - case RelationType.Right_Center: - case RelationType.Right_Right: - _owner.x += dx; - break; - - case RelationType.Top_Top: - case RelationType.Top_Middle: - case RelationType.Top_Bottom: - case RelationType.Middle_Middle: - case RelationType.Bottom_Top: - case RelationType.Bottom_Middle: - case RelationType.Bottom_Bottom: - _owner.y += dy; - break; - - case RelationType.Width: - case RelationType.Height: - break; - - case RelationType.LeftExt_Left: - case RelationType.LeftExt_Right: - if (_owner != _target.parent) - { - tmp = _owner.xMin; - _owner.width = _owner._rawWidth - dx; - _owner.xMin = tmp + dx; - } - else - _owner.width = _owner._rawWidth - dx; - break; - - case RelationType.RightExt_Left: - case RelationType.RightExt_Right: - if (_owner != _target.parent) - { - tmp = _owner.xMin; - _owner.width = _owner._rawWidth + dx; - _owner.xMin = tmp; - } - else - _owner.width = _owner._rawWidth + dx; - break; - - case RelationType.TopExt_Top: - case RelationType.TopExt_Bottom: - if (_owner != _target.parent) - { - tmp = _owner.yMin; - _owner.height = _owner._rawHeight - dy; - _owner.yMin = tmp + dy; - } - else - _owner.height = _owner._rawHeight - dy; - break; - - case RelationType.BottomExt_Top: - case RelationType.BottomExt_Bottom: - if (_owner != _target.parent) - { - tmp = _owner.yMin; - _owner.height = _owner._rawHeight + dy; - _owner.yMin = tmp; - } - else - _owner.height = _owner._rawHeight + dy; - break; - } - } - - void ApplyOnSizeChanged(RelationDef info) - { - float pos = 0, pivot = 0, delta = 0; - if (info.axis == 0) - { - if (_target != _owner.parent) - { - pos = _target.x; - if (_target.pivotAsAnchor) - pivot = _target.pivotX; - } - - if (info.percent) - { - if (_targetData.z != 0) - delta = _target._width / _targetData.z; - } - else - delta = _target._width - _targetData.z; - } - else - { - if (_target != _owner.parent) - { - pos = _target.y; - if (_target.pivotAsAnchor) - pivot = _target.pivotY; - } - - if (info.percent) - { - if (_targetData.w != 0) - delta = _target._height / _targetData.w; - } - else - delta = _target._height - _targetData.w; - } - - float v, tmp; - - switch (info.type) - { - case RelationType.Left_Left: - if (info.percent) - _owner.xMin = pos + (_owner.xMin - pos) * delta; - else if (pivot != 0) - _owner.x += delta * (-pivot); - break; - case RelationType.Left_Center: - if (info.percent) - _owner.xMin = pos + (_owner.xMin - pos) * delta; - else - _owner.x += delta * (0.5f - pivot); - break; - case RelationType.Left_Right: - if (info.percent) - _owner.xMin = pos + (_owner.xMin - pos) * delta; - else - _owner.x += delta * (1 - pivot); - break; - case RelationType.Center_Center: - if (info.percent) - _owner.xMin = pos + (_owner.xMin + _owner._rawWidth * 0.5f - pos) * delta - _owner._rawWidth * 0.5f; - else - _owner.x += delta * (0.5f - pivot); - break; - case RelationType.Right_Left: - if (info.percent) - _owner.xMin = pos + (_owner.xMin + _owner._rawWidth - pos) * delta - _owner._rawWidth; - else if (pivot != 0) - _owner.x += delta * (-pivot); - break; - case RelationType.Right_Center: - if (info.percent) - _owner.xMin = pos + (_owner.xMin + _owner._rawWidth - pos) * delta - _owner._rawWidth; - else - _owner.x += delta * (0.5f - pivot); - break; - case RelationType.Right_Right: - if (info.percent) - _owner.xMin = pos + (_owner.xMin + _owner._rawWidth - pos) * delta - _owner._rawWidth; - else - _owner.x += delta * (1 - pivot); - break; - - case RelationType.Top_Top: - if (info.percent) - _owner.yMin = pos + (_owner.yMin - pos) * delta; - else if (pivot != 0) - _owner.y += delta * (-pivot); - break; - case RelationType.Top_Middle: - if (info.percent) - _owner.yMin = pos + (_owner.yMin - pos) * delta; - else - _owner.y += delta * (0.5f - pivot); - break; - case RelationType.Top_Bottom: - if (info.percent) - _owner.yMin = pos + (_owner.yMin - pos) * delta; - else - _owner.y += delta * (1 - pivot); - break; - case RelationType.Middle_Middle: - if (info.percent) - _owner.yMin = pos + (_owner.yMin + _owner._rawHeight * 0.5f - pos) * delta - _owner._rawHeight * 0.5f; - else - _owner.y += delta * (0.5f - pivot); - break; - case RelationType.Bottom_Top: - if (info.percent) - _owner.yMin = pos + (_owner.yMin + _owner._rawHeight - pos) * delta - _owner._rawHeight; - else if (pivot != 0) - _owner.y += delta * (-pivot); - break; - case RelationType.Bottom_Middle: - if (info.percent) - _owner.yMin = pos + (_owner.yMin + _owner._rawHeight - pos) * delta - _owner._rawHeight; - else - _owner.y += delta * (0.5f - pivot); - break; - case RelationType.Bottom_Bottom: - if (info.percent) - _owner.yMin = pos + (_owner.yMin + _owner._rawHeight - pos) * delta - _owner._rawHeight; - else - _owner.y += delta * (1 - pivot); - break; - - case RelationType.Width: - if (_owner.underConstruct && _owner == _target.parent) - v = _owner.sourceWidth - _target.initWidth; - else - v = _owner._rawWidth - _targetData.z; - if (info.percent) - v = v * delta; - if (_target == _owner.parent) - { - if (_owner.pivotAsAnchor) - { - tmp = _owner.xMin; - _owner.SetSize(_target._width + v, _owner._rawHeight, true); - _owner.xMin = tmp; - } - else - _owner.SetSize(_target._width + v, _owner._rawHeight, true); - } - else - _owner.width = _target._width + v; - break; - case RelationType.Height: - if (_owner.underConstruct && _owner == _target.parent) - v = _owner.sourceHeight - _target.initHeight; - else - v = _owner._rawHeight - _targetData.w; - if (info.percent) - v = v * delta; - if (_target == _owner.parent) - { - if (_owner.pivotAsAnchor) - { - tmp = _owner.yMin; - _owner.SetSize(_owner._rawWidth, _target._height + v, true); - _owner.yMin = tmp; - } - else - _owner.SetSize(_owner._rawWidth, _target._height + v, true); - } - else - _owner.height = _target._height + v; - break; - - case RelationType.LeftExt_Left: - tmp = _owner.xMin; - if (info.percent) - v = pos + (tmp - pos) * delta - tmp; - else - v = delta * (-pivot); - _owner.width = _owner._rawWidth - v; - _owner.xMin = tmp + v; - break; - case RelationType.LeftExt_Right: - tmp = _owner.xMin; - if (info.percent) - v = pos + (tmp - pos) * delta - tmp; - else - v = delta * (1 - pivot); - _owner.width = _owner._rawWidth - v; - _owner.xMin = tmp + v; - break; - case RelationType.RightExt_Left: - tmp = _owner.xMin; - if (info.percent) - v = pos + (tmp + _owner._rawWidth - pos) * delta - (tmp + _owner._rawWidth); - else - v = delta * (-pivot); - _owner.width = _owner._rawWidth + v; - _owner.xMin = tmp; - break; - case RelationType.RightExt_Right: - tmp = _owner.xMin; - if (info.percent) - { - if (_owner == _target.parent) - { - if (_owner.underConstruct) - _owner.width = pos + _target._width - _target._width * pivot + - (_owner.sourceWidth - pos - _target.initWidth + _target.initWidth * pivot) * delta; - else - _owner.width = pos + (_owner._rawWidth - pos) * delta; - } - else - { - v = pos + (tmp + _owner._rawWidth - pos) * delta - (tmp + _owner._rawWidth); - _owner.width = _owner._rawWidth + v; - _owner.xMin = tmp; - } - } - else - { - if (_owner == _target.parent) - { - if (_owner.underConstruct) - _owner.width = _owner.sourceWidth + (_target._width - _target.initWidth) * (1 - pivot); - else - _owner.width = _owner._rawWidth + delta * (1 - pivot); - } - else - { - v = delta * (1 - pivot); - _owner.width = _owner._rawWidth + v; - _owner.xMin = tmp; - } - } - break; - case RelationType.TopExt_Top: - tmp = _owner.yMin; - if (info.percent) - v = pos + (tmp - pos) * delta - tmp; - else - v = delta * (-pivot); - _owner.height = _owner._rawHeight - v; - _owner.yMin = tmp + v; - break; - case RelationType.TopExt_Bottom: - tmp = _owner.yMin; - if (info.percent) - v = pos + (tmp - pos) * delta - tmp; - else - v = delta * (1 - pivot); - _owner.height = _owner._rawHeight - v; - _owner.yMin = tmp + v; - break; - case RelationType.BottomExt_Top: - tmp = _owner.yMin; - if (info.percent) - v = pos + (tmp + _owner._rawHeight - pos) * delta - (tmp + _owner._rawHeight); - else - v = delta * (-pivot); - _owner.height = _owner._rawHeight + v; - _owner.yMin = tmp; - break; - case RelationType.BottomExt_Bottom: - tmp = _owner.yMin; - if (info.percent) - { - if (_owner == _target.parent) - { - if (_owner.underConstruct) - _owner.height = pos + _target._height - _target._height * pivot + - (_owner.sourceHeight - pos - _target.initHeight + _target.initHeight * pivot) * delta; - else - _owner.height = pos + (_owner._rawHeight - pos) * delta; - } - else - { - v = pos + (tmp + _owner._rawHeight - pos) * delta - (tmp + _owner._rawHeight); - _owner.height = _owner._rawHeight + v; - _owner.yMin = tmp; - } - } - else - { - if (_owner == _target.parent) - { - if (_owner.underConstruct) - _owner.height = _owner.sourceHeight + (_target._height - _target.initHeight) * (1 - pivot); - else - _owner.height = _owner._rawHeight + delta * (1 - pivot); - } - else - { - v = delta * (1 - pivot); - _owner.height = _owner._rawHeight + v; - _owner.yMin = tmp; - } - } - break; - } - } - - void AddRefTarget(GObject target) - { - if (target != _owner.parent) - target.onPositionChanged.Add(__targetXYChanged); - target.onSizeChanged.Add(__targetSizeChanged); - _targetData.x = _target.x; - _targetData.y = _target.y; - _targetData.z = _target._width; - _targetData.w = _target._height; - } - - void ReleaseRefTarget(GObject target) - { - target.onPositionChanged.Remove(__targetXYChanged); - target.onSizeChanged.Remove(__targetSizeChanged); - } - - void __targetXYChanged(EventContext context) - { - if (_owner.relations.handling != null - || _owner.group != null && _owner.group._updating != 0) - { - _targetData.x = _target.x; - _targetData.y = _target.y; - return; - } - - _owner.relations.handling = (GObject)context.sender; - - float ox = _owner.x; - float oy = _owner.y; - float dx = _target.x - _targetData.x; - float dy = _target.y - _targetData.y; - - int cnt = _defs.Count; - for (int i = 0; i < cnt; i++) - ApplyOnXYChanged(_defs[i], dx, dy); - - _targetData.x = _target.x; - _targetData.y = _target.y; - - if (!Mathf.Approximately(ox, _owner.x) || !Mathf.Approximately(oy, _owner.y)) - { - ox = _owner.x - ox; - oy = _owner.y - oy; - - _owner.UpdateGearFromRelations(1, ox, oy); - - if (_owner.parent != null) - { - int transCount = _owner.parent._transitions.Count; - for (int i = 0; i < transCount; i++) - _owner.parent._transitions[i].UpdateFromRelations(_owner.id, ox, oy); - } - } - - _owner.relations.handling = null; - } - - void __targetSizeChanged(EventContext context) - { - if (_owner.relations.handling != null - || _owner.group != null && _owner.group._updating != 0) - { - _targetData.z = _target._width; - _targetData.w = _target._height; - return; - } - - _owner.relations.handling = (GObject)context.sender; - - float ox = _owner.x; - float oy = _owner.y; - float ow = _owner._rawWidth; - float oh = _owner._rawHeight; - - int cnt = _defs.Count; - for (int i = 0; i < cnt; i++) - ApplyOnSizeChanged(_defs[i]); - - _targetData.z = _target._width; - _targetData.w = _target._height; - - if (!Mathf.Approximately(ox, _owner.x) || !Mathf.Approximately(oy, _owner.y)) - { - ox = _owner.x - ox; - oy = _owner.y - oy; - - _owner.UpdateGearFromRelations(1, ox, oy); - - if (_owner.parent != null) - { - int transCount = _owner.parent._transitions.Count; - for (int i = 0; i < transCount; i++) - _owner.parent._transitions[i].UpdateFromRelations(_owner.id, ox, oy); - } - } - - if (!Mathf.Approximately(ow, _owner._rawWidth) || !Mathf.Approximately(oh, _owner._rawHeight)) - { - ow = _owner._rawWidth - ow; - oh = _owner._rawHeight - oh; - - _owner.UpdateGearFromRelations(2, ow, oh); - } - - _owner.relations.handling = null; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs.meta deleted file mode 100644 index e523b3f..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 859441fdd74333a498ff048e6b48798b -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs deleted file mode 100644 index 14ef2ba..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System; -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class Relations - { - GObject _owner; - List _items; - - public GObject handling; - - public Relations(GObject owner) - { - _owner = owner; - _items = new List(); - } - - /// - /// - /// - /// - /// - public void Add(GObject target, RelationType relationType) - { - Add(target, relationType, false); - } - - /// - /// - /// - /// - /// - /// - public void Add(GObject target, RelationType relationType, bool usePercent) - { - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - { - RelationItem item = _items[i]; - if (item.target == target) - { - item.Add(relationType, usePercent); - return; - } - } - RelationItem newItem = new RelationItem(_owner); - newItem.target = target; - newItem.Add(relationType, usePercent); - _items.Add(newItem); - } - - /// - /// - /// - /// - /// - public void Remove(GObject target, RelationType relationType) - { - int cnt = _items.Count; - int i = 0; - while (i < cnt) - { - RelationItem item = _items[i]; - if (item.target == target) - { - item.Remove(relationType); - if (item.isEmpty) - { - item.Dispose(); - _items.RemoveAt(i); - cnt--; - continue; - } - else - i++; - } - i++; - } - } - - /// - /// - /// - /// - /// - public bool Contains(GObject target) - { - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - { - RelationItem item = _items[i]; - if (item.target == target) - return true; - } - return false; - } - - /// - /// - /// - /// - public void ClearFor(GObject target) - { - int cnt = _items.Count; - int i = 0; - while (i < cnt) - { - RelationItem item = _items[i]; - if (item.target == target) - { - item.Dispose(); - _items.RemoveAt(i); - cnt--; - } - else - i++; - } - } - - /// - /// - /// - public void ClearAll() - { - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - { - RelationItem item = _items[i]; - item.Dispose(); - } - _items.Clear(); - } - - /// - /// - /// - /// - public void CopyFrom(Relations source) - { - ClearAll(); - - List arr = source._items; - foreach (RelationItem ri in arr) - { - RelationItem item = new RelationItem(_owner); - item.CopyFrom(ri); - _items.Add(item); - } - } - - /// - /// - /// - public void Dispose() - { - ClearAll(); - handling = null; - } - - /// - /// - /// - /// - /// - /// - public void OnOwnerSizeChanged(float dWidth, float dHeight, bool applyPivot) - { - int cnt = _items.Count; - if (cnt == 0) - return; - - for (int i = 0; i < cnt; i++) - _items[i].ApplyOnSelfSizeChanged(dWidth, dHeight, applyPivot); - } - - /// - /// - /// - public bool isEmpty - { - get - { - return _items.Count == 0; - } - } - - public void Setup(ByteBuffer buffer, bool parentToChild) - { - int cnt = buffer.ReadByte(); - GObject target; - for (int i = 0; i < cnt; i++) - { - int targetIndex = buffer.ReadShort(); - if (targetIndex == -1) - target = _owner.parent; - else if (parentToChild) - target = ((GComponent)_owner).GetChildAt(targetIndex); - else - target = _owner.parent.GetChildAt(targetIndex); - - RelationItem newItem = new RelationItem(_owner); - newItem.target = target; - _items.Add(newItem); - - int cnt2 = buffer.ReadByte(); - for (int j = 0; j < cnt2; j++) - { - RelationType rt = (RelationType)buffer.ReadByte(); - bool usePercent = buffer.ReadBool(); - newItem.InternalAdd(rt, usePercent); - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs.meta deleted file mode 100644 index 3e21e9d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 4376a9406aa478a4b82816818842d737 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs b/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs deleted file mode 100644 index c46af18..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs +++ /dev/null @@ -1,2320 +0,0 @@ -using System; -using UnityEngine; -using FairyGUI.Utils; - -namespace FairyGUI -{ - /// - /// - /// - public class ScrollPane : EventDispatcher - { - /// - /// 当前被拖拽的滚动面板。同一时间只能有一个在进行此操作。 - /// - public static ScrollPane draggingPane { get; private set; } - - ScrollType _scrollType; - float _scrollStep; - float _decelerationRate; - Margin _scrollBarMargin; - bool _bouncebackEffect; - bool _touchEffect; - bool _scrollBarDisplayAuto; - bool _vScrollNone; - bool _hScrollNone; - bool _needRefresh; - int _refreshBarAxis; - - bool _displayOnLeft; - bool _snapToItem; - internal bool _displayInDemand; - bool _mouseWheelEnabled; - bool _softnessOnTopOrLeftSide; - bool _pageMode; - Vector2 _pageSize; - bool _inertiaDisabled; - bool _maskDisabled; - bool _floating; - bool _dontClipMargin; - - float _xPos; - float _yPos; - - Vector2 _viewSize; - Vector2 _contentSize; - Vector2 _overlapSize; - Vector2 _containerPos; - Vector2 _beginTouchPos; - Vector2 _lastTouchPos; - Vector2 _lastTouchGlobalPos; - Vector2 _velocity; - float _velocityScale; - float _lastMoveTime; - bool _dragged; - bool _isHoldAreaDone; - int _aniFlag; - internal int _loop; - int _headerLockedSize; - int _footerLockedSize; - bool _hover; - - int _tweening; - Vector2 _tweenStart; - Vector2 _tweenChange; - Vector2 _tweenTime; - Vector2 _tweenDuration; - - Action _refreshDelegate; - TimerCallback _tweenUpdateDelegate; - GTweenCallback1 _hideScrollBarDelegate; - - GComponent _owner; - Container _maskContainer; - Container _container; - GScrollBar _hzScrollBar; - GScrollBar _vtScrollBar; - GComponent _header; - GComponent _footer; - Controller _pageController; - - EventListener _onScroll; - EventListener _onScrollEnd; - EventListener _onPullDownRelease; - EventListener _onPullUpRelease; - - static int _gestureFlag; - - public static float TWEEN_TIME_GO = 0.3f; //调用SetPos(ani)时使用的缓动时间 - public static float TWEEN_TIME_DEFAULT = 0.3f; //惯性滚动的最小缓动时间 - public static float PULL_RATIO = 0.5f; //下拉过顶或者上拉过底时允许超过的距离占显示区域的比例 - - public ScrollPane(GComponent owner) - { - _onScroll = new EventListener(this, "onScroll"); - _onScrollEnd = new EventListener(this, "onScrollEnd"); - - _scrollStep = UIConfig.defaultScrollStep; - _softnessOnTopOrLeftSide = UIConfig.allowSoftnessOnTopOrLeftSide; - _decelerationRate = UIConfig.defaultScrollDecelerationRate; - _touchEffect = UIConfig.defaultScrollTouchEffect; - _bouncebackEffect = UIConfig.defaultScrollBounceEffect; - _mouseWheelEnabled = true; - _pageSize = Vector2.one; - - _refreshDelegate = Refresh; - _tweenUpdateDelegate = TweenUpdate; - _hideScrollBarDelegate = __barTweenComplete; - - _owner = owner; - - _maskContainer = new Container(); - _owner.rootContainer.AddChild(_maskContainer); - - _container = _owner.container; - _container.SetXY(0, 0); - _maskContainer.AddChild(_container); - - _owner.rootContainer.onMouseWheel.Add(__mouseWheel); - _owner.rootContainer.onTouchBegin.Add(__touchBegin); - _owner.rootContainer.onTouchMove.Add(__touchMove); - _owner.rootContainer.onTouchEnd.Add(__touchEnd); - } - - public void Setup(ByteBuffer buffer) - { - _scrollType = (ScrollType)buffer.ReadByte(); - ScrollBarDisplayType scrollBarDisplay = (ScrollBarDisplayType)buffer.ReadByte(); - int flags = buffer.ReadInt(); - - if (buffer.ReadBool()) - { - _scrollBarMargin.top = buffer.ReadInt(); - _scrollBarMargin.bottom = buffer.ReadInt(); - _scrollBarMargin.left = buffer.ReadInt(); - _scrollBarMargin.right = buffer.ReadInt(); - } - - string vtScrollBarRes = buffer.ReadS(); - string hzScrollBarRes = buffer.ReadS(); - string headerRes = buffer.ReadS(); - string footerRes = buffer.ReadS(); - - _displayOnLeft = (flags & 1) != 0; - _snapToItem = (flags & 2) != 0; - _displayInDemand = (flags & 4) != 0; - _pageMode = (flags & 8) != 0; - if ((flags & 16) != 0) - _touchEffect = true; - else if ((flags & 32) != 0) - _touchEffect = false; - if ((flags & 64) != 0) - _bouncebackEffect = true; - else if ((flags & 128) != 0) - _bouncebackEffect = false; - _inertiaDisabled = (flags & 256) != 0; - _maskDisabled = (flags & 512) != 0; - _floating = (flags & 1024) != 0; - _dontClipMargin = (flags & 2048) != 0; - - if (scrollBarDisplay == ScrollBarDisplayType.Default) - { - if (Application.isMobilePlatform) - scrollBarDisplay = ScrollBarDisplayType.Auto; - else - scrollBarDisplay = UIConfig.defaultScrollBarDisplay; - } - - if (scrollBarDisplay != ScrollBarDisplayType.Hidden) - { - if (_scrollType == ScrollType.Both || _scrollType == ScrollType.Vertical) - { - string res = vtScrollBarRes != null ? vtScrollBarRes : UIConfig.verticalScrollBar; - if (!string.IsNullOrEmpty(res)) - { - _vtScrollBar = UIPackage.CreateObjectFromURL(res) as GScrollBar; - if (_vtScrollBar == null) - Debug.LogWarning("FairyGUI: cannot create scrollbar from " + res); - else - { - _vtScrollBar.SetScrollPane(this, true); - _owner.rootContainer.AddChild(_vtScrollBar.displayObject); - } - } - } - if (_scrollType == ScrollType.Both || _scrollType == ScrollType.Horizontal) - { - string res = hzScrollBarRes != null ? hzScrollBarRes : UIConfig.horizontalScrollBar; - if (!string.IsNullOrEmpty(res)) - { - _hzScrollBar = UIPackage.CreateObjectFromURL(res) as GScrollBar; - if (_hzScrollBar == null) - Debug.LogWarning("FairyGUI: cannot create scrollbar from " + res); - else - { - _hzScrollBar.SetScrollPane(this, false); - _owner.rootContainer.AddChild(_hzScrollBar.displayObject); - } - } - } - - _scrollBarDisplayAuto = scrollBarDisplay == ScrollBarDisplayType.Auto; - if (_scrollBarDisplayAuto) - { - if (_vtScrollBar != null) - _vtScrollBar.displayObject.visible = false; - if (_hzScrollBar != null) - _hzScrollBar.displayObject.visible = false; - - _owner.rootContainer.onRollOver.Add(__rollOver); - _owner.rootContainer.onRollOut.Add(__rollOut); - } - } - else - _mouseWheelEnabled = false; - - if (Application.isPlaying) - { - if (headerRes != null) - { - _header = (GComponent)UIPackage.CreateObjectFromURL(headerRes); - if (_header == null) - Debug.LogWarning("FairyGUI: cannot create scrollPane header from " + headerRes); - } - - if (footerRes != null) - { - _footer = (GComponent)UIPackage.CreateObjectFromURL(footerRes); - if (_footer == null) - Debug.LogWarning("FairyGUI: cannot create scrollPane footer from " + footerRes); - } - - if (_header != null || _footer != null) - _refreshBarAxis = (_scrollType == ScrollType.Both || _scrollType == ScrollType.Vertical) ? 1 : 0; - } - - SetSize(owner.width, owner.height); - } - - /// - /// - /// - public void Dispose() - { - RemoveEventListeners(); - - if (_tweening != 0) - Timers.inst.Remove(_tweenUpdateDelegate); - - if (draggingPane == this) - draggingPane = null; - - _pageController = null; - - if (_hzScrollBar != null) - _hzScrollBar.Dispose(); - if (_vtScrollBar != null) - _vtScrollBar.Dispose(); - if (_header != null) - _header.Dispose(); - if (_footer != null) - _footer.Dispose(); - } - - /// - /// Dispatched when scrolling. - /// 在滚动时派发该事件。 - /// - public EventListener onScroll - { - get { return _onScroll ?? (_onScroll = new EventListener(this, "onScroll")); } - } - - /// - /// 在滚动结束时派发该事件。 - /// - public EventListener onScrollEnd - { - get { return _onScrollEnd ?? (_onScrollEnd = new EventListener(this, "onScrollEnd")); } - } - - /// - /// 向下拉过上边缘后释放则派发该事件。 - /// - public EventListener onPullDownRelease - { - get { return _onPullDownRelease ?? (_onPullDownRelease = new EventListener(this, "onPullDownRelease")); } - } - - /// - /// 向上拉过下边缘后释放则派发该事件。 - /// - public EventListener onPullUpRelease - { - get { return _onPullUpRelease ?? (_onPullUpRelease = new EventListener(this, "onPullUpRelease")); } - } - - /// - /// - /// - public GComponent owner - { - get { return _owner; } - } - - /// - /// - /// - public GScrollBar hzScrollBar - { - get { return _hzScrollBar; } - } - - /// - /// - /// - public GScrollBar vtScrollBar - { - get { return _vtScrollBar; } - } - - /// - /// - /// - public GComponent header - { - get { return _header; } - } - - /// - /// - /// - public GComponent footer - { - get { return _footer; } - } - - /// - /// 滚动到达边缘时是否允许回弹效果。 - /// - public bool bouncebackEffect - { - get { return _bouncebackEffect; } - set { _bouncebackEffect = value; } - } - - /// - /// 是否允许拖拽内容区域进行滚动。 - /// - public bool touchEffect - { - get { return _touchEffect; } - set { _touchEffect = value; } - } - - /// - /// 是否允许惯性滚动。 - /// - public bool inertiaDisabled - { - get { return _inertiaDisabled; } - set { _inertiaDisabled = value; } - } - - /// - /// 是否允许在左/上边缘显示虚化效果。 - /// - public bool softnessOnTopOrLeftSide - { - get { return _softnessOnTopOrLeftSide; } - set { _softnessOnTopOrLeftSide = value; } - } - - /// - /// 当调用ScrollPane.scrollUp/Down/Left/Right时,或者点击滚动条的上下箭头时,滑动的距离。 - /// - public float scrollStep - { - get { return _scrollStep; } - set - { - _scrollStep = value; - if (_scrollStep == 0) - _scrollStep = UIConfig.defaultScrollStep; - } - } - - /// - /// 滚动位置是否保持贴近在某个元件的边缘。 - /// - public bool snapToItem - { - get { return _snapToItem; } - set { _snapToItem = value; } - } - - /// - /// 是否页面滚动模式。 - /// - public bool pageMode - { - get { return _pageMode; } - set { _pageMode = value; } - } - - /// - /// - /// - public Controller pageController - { - get { return _pageController; } - set { _pageController = value; } - } - - /// - /// 是否允许使用鼠标滚轮进行滚动。 - /// - public bool mouseWheelEnabled - { - get { return _mouseWheelEnabled; } - set { _mouseWheelEnabled = value; } - } - - /// - /// 当处于惯性滚动时减速的速率。默认值是UIConfig.defaultScrollDecelerationRate。 - /// 越接近1,减速越慢,意味着滑动的时间和距离更长。 - /// - public float decelerationRate - { - get { return _decelerationRate; } - set { _decelerationRate = value; } - } - - /// - /// - public bool isDragged - { - get { return _dragged; } - } - - /// - /// 当前X轴滚动位置百分比,0~1(包含)。 - /// - public float percX - { - get { return _overlapSize.x == 0 ? 0 : _xPos / _overlapSize.x; } - set { SetPercX(value, false); } - } - - /// - /// 设置当前X轴滚动位置百分比,0~1(包含)。 - /// - /// - /// 是否使用缓动到达目标。 - public void SetPercX(float value, bool ani) - { - _owner.EnsureBoundsCorrect(); - SetPosX(_overlapSize.x * Mathf.Clamp01(value), ani); - } - - /// - /// 当前Y轴滚动位置百分比,0~1(包含)。 - /// - public float percY - { - get { return _overlapSize.y == 0 ? 0 : _yPos / _overlapSize.y; } - set { SetPercY(value, false); } - } - - /// - /// 设置当前Y轴滚动位置百分比,0~1(包含)。 - /// - /// - /// 是否使用缓动到达目标。 - public void SetPercY(float value, bool ani) - { - _owner.EnsureBoundsCorrect(); - SetPosY(_overlapSize.y * Mathf.Clamp01(value), ani); - } - - /// - /// 当前X轴滚动位置,值范围是viewWidth与contentWidth之差。 - /// - public float posX - { - get { return _xPos; } - set { SetPosX(value, false); } - } - - /// - /// 设置当前X轴滚动位置。 - /// - /// - /// 是否使用缓动到达目标。 - public void SetPosX(float value, bool ani) - { - _owner.EnsureBoundsCorrect(); - - if (_loop == 1) - LoopCheckingNewPos(ref value, 0); - - value = Mathf.Clamp(value, 0, _overlapSize.x); - if (value != _xPos) - { - _xPos = value; - PosChanged(ani); - } - } - - /// - /// 当前Y轴滚动位置,值范围是viewHeight与contentHeight之差。 - /// - public float posY - { - get { return _yPos; } - set { SetPosY(value, false); } - } - - /// - /// 设置当前Y轴滚动位置。 - /// - /// - /// 是否使用缓动到达目标。 - public void SetPosY(float value, bool ani) - { - _owner.EnsureBoundsCorrect(); - - if (_loop == 2) - LoopCheckingNewPos(ref value, 1); - - value = Mathf.Clamp(value, 0, _overlapSize.y); - if (value != _yPos) - { - _yPos = value; - PosChanged(ani); - } - } - - /// - /// 返回当前滚动位置是否在最下边。 - /// - public bool isBottomMost - { - get { return _yPos == _overlapSize.y || _overlapSize.y == 0; } - } - - /// - /// 返回当前滚动位置是否在最右边。 - /// - public bool isRightMost - { - get { return _xPos == _overlapSize.x || _overlapSize.x == 0; } - } - - /// - /// 如果处于分页模式,返回当前在X轴的页码。 - /// - public int currentPageX - { - get - { - if (!_pageMode) - return 0; - - int page = Mathf.FloorToInt(_xPos / _pageSize.x); - if (_xPos - page * _pageSize.x > _pageSize.x * 0.5f) - page++; - - return page; - } - set - { - if (!_pageMode) - return; - - _owner.EnsureBoundsCorrect(); - - if (_overlapSize.x > 0) - this.SetPosX(value * _pageSize.x, false); - } - } - - /// - /// 如果处于分页模式,可设置X轴的页码。 - /// - /// - /// 是否使用缓动到达目标。 - public void SetCurrentPageX(int value, bool ani) - { - if (!_pageMode) - return; - - _owner.EnsureBoundsCorrect(); - - if (_overlapSize.x > 0) - this.SetPosX(value * _pageSize.x, ani); - } - - /// - /// 如果处于分页模式,返回当前在Y轴的页码。 - /// - public int currentPageY - { - get - { - if (!_pageMode) - return 0; - - int page = Mathf.FloorToInt(_yPos / _pageSize.y); - if (_yPos - page * _pageSize.y > _pageSize.y * 0.5f) - page++; - - return page; - } - set - { - if (!_pageMode) - return; - - _owner.EnsureBoundsCorrect(); - - if (_overlapSize.y > 0) - this.SetPosY(value * _pageSize.y, false); - } - } - - /// - /// 如果处于分页模式,可设置Y轴的页码。 - /// - /// - /// 是否使用缓动到达目标。 - public void SetCurrentPageY(int value, bool ani) - { - if (!_pageMode) - return; - - _owner.EnsureBoundsCorrect(); - - if (_overlapSize.y > 0) - this.SetPosY(value * _pageSize.y, ani); - } - - /// - /// 这个值与PosX不同在于,他反映的是实时位置,而PosX在有缓动过程的情况下只是终值。 - /// - public float scrollingPosX - { - get - { - return Mathf.Clamp(-_container.x, 0, _overlapSize.x); - } - } - - /// - /// 这个值与PosY不同在于,他反映的是实时位置,而PosY在有缓动过程的情况下只是终值。 - /// - public float scrollingPosY - { - get - { - return Mathf.Clamp(-_container.y, 0, _overlapSize.y); - } - } - - /// - /// 显示内容宽度。 - /// - public float contentWidth - { - get - { - return _contentSize.x; - } - } - - /// - /// 显示内容高度。 - /// - public float contentHeight - { - get - { - return _contentSize.y; - } - } - - /// - /// 显示区域宽度。 - /// - public float viewWidth - { - get { return _viewSize.x; } - set - { - value = value + _owner.margin.left + _owner.margin.right; - if (_vtScrollBar != null && !_floating) - value += _vtScrollBar.width; - _owner.width = value; - } - } - - /// - /// 显示区域高度。 - /// - public float viewHeight - { - get { return _viewSize.y; } - set - { - value = value + _owner.margin.top + _owner.margin.bottom; - if (_hzScrollBar != null && !_floating) - value += _hzScrollBar.height; - _owner.height = value; - } - } - - /// - /// - /// - public void ScrollTop() - { - ScrollTop(false); - } - - /// - /// - /// - /// - public void ScrollTop(bool ani) - { - this.SetPercY(0, ani); - } - - /// - /// - /// - public void ScrollBottom() - { - ScrollBottom(false); - } - - /// - /// - /// - /// - public void ScrollBottom(bool ani) - { - this.SetPercY(1, ani); - } - - /// - /// - /// - public void ScrollUp() - { - ScrollUp(1, false); - } - - /// - /// - /// - /// - /// - public void ScrollUp(float ratio, bool ani) - { - if (_pageMode) - SetPosY(_yPos - _pageSize.y * ratio, ani); - else - SetPosY(_yPos - _scrollStep * ratio, ani); - } - - /// - /// - /// - public void ScrollDown() - { - ScrollDown(1, false); - } - - /// - /// - /// - /// - /// - public void ScrollDown(float ratio, bool ani) - { - if (_pageMode) - SetPosY(_yPos + _pageSize.y * ratio, ani); - else - SetPosY(_yPos + _scrollStep * ratio, ani); - } - - /// - /// - /// - public void ScrollLeft() - { - ScrollLeft(1, false); - } - - /// - /// - /// - /// - /// - public void ScrollLeft(float ratio, bool ani) - { - if (_pageMode) - SetPosX(_xPos - _pageSize.x * ratio, ani); - else - SetPosX(_xPos - _scrollStep * ratio, ani); - } - - /// - /// - /// - public void ScrollRight() - { - ScrollRight(1, false); - } - - /// - /// - /// - /// - /// - public void ScrollRight(float ratio, bool ani) - { - if (_pageMode) - SetPosX(_xPos + _pageSize.x * ratio, ani); - else - SetPosX(_xPos + _scrollStep * ratio, ani); - } - - /// - /// - /// - /// obj can be any object on stage, not limited to the direct child of this container. - public void ScrollToView(GObject obj) - { - ScrollToView(obj, false); - } - - /// - /// - /// - /// obj can be any object on stage, not limited to the direct child of this container. - /// If moving to target position with animation - public void ScrollToView(GObject obj, bool ani) - { - ScrollToView(obj, ani, false); - } - - /// - /// - /// - /// obj can be any object on stage, not limited to the direct child of this container. - /// If moving to target position with animation - /// If true, scroll to make the target on the top/left; If false, scroll to make the target any position in view. - public void ScrollToView(GObject obj, bool ani, bool setFirst) - { - _owner.EnsureBoundsCorrect(); - if (_needRefresh) - Refresh(); - - Rect rect = new Rect(obj.x, obj.y, obj.width, obj.height); - if (obj.parent != _owner) - rect = obj.parent.TransformRect(rect, _owner); - ScrollToView(rect, ani, setFirst); - } - - /// - /// - /// - /// Rect in local coordinates - /// If moving to target position with animation - /// If true, scroll to make the target on the top/left; If false, scroll to make the target any position in view. - public void ScrollToView(Rect rect, bool ani, bool setFirst) - { - _owner.EnsureBoundsCorrect(); - if (_needRefresh) - Refresh(); - - if (_overlapSize.y > 0) - { - float bottom = _yPos + _viewSize.y; - if (setFirst || rect.y <= _yPos || rect.height >= _viewSize.y) - { - if (!setFirst && rect.yMax >= bottom) //if an item size is large than viewSize, dont scroll - return; - - if (_pageMode) - this.SetPosY(Mathf.Floor(rect.y / _pageSize.y) * _pageSize.y, ani); - else - SetPosY(rect.y, ani); - } - else if (rect.yMax > bottom) - { - if (_pageMode) - this.SetPosY(Mathf.Floor(rect.y / _pageSize.y) * _pageSize.y, ani); - else if (rect.height <= _viewSize.y / 2) - SetPosY(rect.y + rect.height * 2 - _viewSize.y, ani); - else - SetPosY(rect.y + Mathf.Min(rect.height - _viewSize.y, 0), ani); - } - } - if (_overlapSize.x > 0) - { - float right = _xPos + _viewSize.x; - if (setFirst || rect.x <= _xPos || rect.width >= _viewSize.x) - { - if (!setFirst && rect.xMax >= right) //if an item size is large than viewSize, dont scroll - return; - - if (_pageMode) - this.SetPosX(Mathf.Floor(rect.x / _pageSize.x) * _pageSize.x, ani); - SetPosX(rect.x, ani); - } - else if (rect.xMax > right) - { - if (_pageMode) - this.SetPosX(Mathf.Floor(rect.x / _pageSize.x) * _pageSize.x, ani); - else if (rect.width <= _viewSize.x / 2) - SetPosX(rect.x + rect.width * 2 - _viewSize.x, ani); - else - SetPosX(rect.x + Mathf.Min(rect.width - _viewSize.x, 0), ani); - } - } - - if (!ani && _needRefresh) - Refresh(); - } - - /// - /// - /// - /// obj must be the direct child of this container - /// - public bool IsChildInView(GObject obj) - { - if (_overlapSize.y > 0) - { - float dist = obj.y + _container.y; - if (dist <= -obj.height || dist >= _viewSize.y) - return false; - } - if (_overlapSize.x > 0) - { - float dist = obj.x + _container.x; - if (dist <= -obj.width || dist >= _viewSize.x) - return false; - } - - return true; - } - - /// - /// 当滚动面板处于拖拽滚动状态或即将进入拖拽状态时,可以调用此方法停止或禁止本次拖拽。 - /// - public void CancelDragging() - { - Stage.inst.RemoveTouchMonitor(_owner.rootContainer); - - if (draggingPane == this) - draggingPane = null; - - _gestureFlag = 0; - _dragged = false; - } - - /// - /// 设置Header固定显示。如果size为0,则取消固定显示。 - /// - /// Header显示的大小 - public void LockHeader(int size) - { - if (_headerLockedSize == size) - return; - - _headerLockedSize = size; - if (!isDispatching("onPullDownRelease") && _container.xy[_refreshBarAxis] >= 0) - { - _tweenStart = _container.xy; - _tweenChange = Vector2.zero; - _tweenChange[_refreshBarAxis] = _headerLockedSize - _tweenStart[_refreshBarAxis]; - _tweenDuration = new Vector2(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); - StartTween(2); - } - } - - /// - /// 设置Footer固定显示。如果size为0,则取消固定显示。 - /// - /// - public void LockFooter(int size) - { - if (_footerLockedSize == size) - return; - - _footerLockedSize = size; - if (!isDispatching("onPullUpRelease") && _container.xy[_refreshBarAxis] <= -_overlapSize[_refreshBarAxis]) - { - _tweenStart = _container.xy; - _tweenChange = Vector2.zero; - float max = _overlapSize[_refreshBarAxis]; - if (max == 0) - max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); - else - max += _footerLockedSize; - _tweenChange[_refreshBarAxis] = -max - _tweenStart[_refreshBarAxis]; - _tweenDuration = new Vector2(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); - StartTween(2); - } - } - - internal void OnOwnerSizeChanged() - { - SetSize(_owner.width, _owner.height); - PosChanged(false); - } - - internal void HandleControllerChanged(Controller c) - { - if (_pageController == c) - { - if (_scrollType == ScrollType.Horizontal) - this.SetCurrentPageX(c.selectedIndex, true); - else - this.SetCurrentPageY(c.selectedIndex, true); - } - } - - void UpdatePageController() - { - if (_pageController != null && !_pageController.changing) - { - int index; - if (_scrollType == ScrollType.Horizontal) - index = this.currentPageX; - else - index = this.currentPageY; - if (index < _pageController.pageCount) - { - Controller c = _pageController; - _pageController = null; //防止HandleControllerChanged的调用 - c.selectedIndex = index; - _pageController = c; - } - } - } - - internal void AdjustMaskContainer() - { - float mx, my; - if (_displayOnLeft && _vtScrollBar != null && !_floating) - mx = Mathf.FloorToInt(_owner.margin.left + _vtScrollBar.width); - else - mx = _owner.margin.left; - my = _owner.margin.top; - mx += _owner._alignOffset.x; - my += _owner._alignOffset.y; - - _maskContainer.SetXY(mx, my); - } - - void SetSize(float aWidth, float aHeight) - { - AdjustMaskContainer(); - - if (_hzScrollBar != null) - { - _hzScrollBar.y = aHeight - _hzScrollBar.height; - if (_vtScrollBar != null) - { - _hzScrollBar.width = aWidth - _vtScrollBar.width - _scrollBarMargin.left - _scrollBarMargin.right; - if (_displayOnLeft) - _hzScrollBar.x = _scrollBarMargin.left + _vtScrollBar.width; - else - _hzScrollBar.x = _scrollBarMargin.left; - } - else - { - _hzScrollBar.width = aWidth - _scrollBarMargin.left - _scrollBarMargin.right; - _hzScrollBar.x = _scrollBarMargin.left; - } - } - if (_vtScrollBar != null) - { - if (!_displayOnLeft) - _vtScrollBar.x = aWidth - _vtScrollBar.width; - if (_hzScrollBar != null) - _vtScrollBar.height = aHeight - _hzScrollBar.height - _scrollBarMargin.top - _scrollBarMargin.bottom; - else - _vtScrollBar.height = aHeight - _scrollBarMargin.top - _scrollBarMargin.bottom; - _vtScrollBar.y = _scrollBarMargin.top; - } - - _viewSize.x = aWidth; - _viewSize.y = aHeight; - if (_hzScrollBar != null && !_floating) - _viewSize.y -= _hzScrollBar.height; - if (_vtScrollBar != null && !_floating) - _viewSize.x -= _vtScrollBar.width; - _viewSize.x -= (_owner.margin.left + _owner.margin.right); - _viewSize.y -= (_owner.margin.top + _owner.margin.bottom); - - _viewSize.x = Mathf.Max(1, _viewSize.x); - _viewSize.y = Mathf.Max(1, _viewSize.y); - _pageSize.x = _viewSize.x; - _pageSize.y = _viewSize.y; - - HandleSizeChanged(); - } - - internal void SetContentSize(float aWidth, float aHeight) - { - if (Mathf.Approximately(_contentSize.x, aWidth) && Mathf.Approximately(_contentSize.y, aHeight)) - return; - - _contentSize.x = aWidth; - _contentSize.y = aHeight; - HandleSizeChanged(); - } - - /// - /// 内部使用。由虚拟列表调用。在滚动时修改显示内容的大小,需要进行修正,避免滚动跳跃。 - /// - /// - /// - /// - /// - internal void ChangeContentSizeOnScrolling(float deltaWidth, float deltaHeight, float deltaPosX, float deltaPosY) - { - bool isRightmost = _xPos == _overlapSize.x; - bool isBottom = _yPos == _overlapSize.y; - - _contentSize.x += deltaWidth; - _contentSize.y += deltaHeight; - HandleSizeChanged(); - - if (_tweening == 1) - { - //如果原来滚动位置是贴边,加入处理继续贴边。 - if (deltaWidth != 0 && isRightmost && _tweenChange.x < 0) - { - _xPos = _overlapSize.x; - _tweenChange.x = -_xPos - _tweenStart.x; - } - - if (deltaHeight != 0 && isBottom && _tweenChange.y < 0) - { - _yPos = _overlapSize.y; - _tweenChange.y = -_yPos - _tweenStart.y; - } - } - else if (_tweening == 2) - { - //重新调整起始位置,确保能够顺滑滚下去 - if (deltaPosX != 0) - { - _container.x -= deltaPosX; - _tweenStart.x -= deltaPosX; - _xPos = -_container.x; - } - if (deltaPosY != 0) - { - _container.y -= deltaPosY; - _tweenStart.y -= deltaPosY; - _yPos = -_container.y; - } - } - else if (_dragged) - { - if (deltaPosX != 0) - { - _container.x -= deltaPosX; - _containerPos.x -= deltaPosX; - _xPos = -_container.x; - } - if (deltaPosY != 0) - { - _container.y -= deltaPosY; - _containerPos.y -= deltaPosY; - _yPos = -_container.y; - } - } - else - { - //如果原来滚动位置是贴边,加入处理继续贴边。 - if (deltaWidth != 0 && isRightmost) - { - _xPos = _overlapSize.x; - _container.x = -_xPos; - } - - if (deltaHeight != 0 && isBottom) - { - _yPos = _overlapSize.y; - _container.y = -_yPos; - } - } - - if (_pageMode) - UpdatePageController(); - } - - void HandleSizeChanged() - { - if (_displayInDemand) - { - _vScrollNone = _contentSize.y <= _viewSize.y; - _hScrollNone = _contentSize.x <= _viewSize.x; - - if (_vtScrollBar != null && _hzScrollBar != null) - { - if (!_hScrollNone) - _vtScrollBar.height = _owner.height - _hzScrollBar.height - _scrollBarMargin.top - _scrollBarMargin.bottom; - else - _vtScrollBar.height = _owner.height - _scrollBarMargin.top - _scrollBarMargin.bottom; - - if (!_vScrollNone) - _hzScrollBar.width = _owner.width - _vtScrollBar.width - _scrollBarMargin.left - _scrollBarMargin.right; - else - _hzScrollBar.width = _owner.width - _scrollBarMargin.left - _scrollBarMargin.right; - } - } - - if (_vtScrollBar != null) - { - if (_contentSize.y == 0) - _vtScrollBar.SetDisplayPerc(0); - else - _vtScrollBar.SetDisplayPerc(Mathf.Min(1, _viewSize.y / _contentSize.y)); - } - if (_hzScrollBar != null) - { - if (_contentSize.x == 0) - _hzScrollBar.SetDisplayPerc(0); - else - _hzScrollBar.SetDisplayPerc(Mathf.Min(1, _viewSize.x / _contentSize.x)); - } - - UpdateScrollBarVisible(); - - if (!_maskDisabled) - { - Rect rect = new Rect(-_owner._alignOffset.x, -_owner._alignOffset.y, _viewSize.x, _viewSize.y); - if (_vScrollNone && _vtScrollBar != null) - rect.width += _vtScrollBar.width; - if (_hScrollNone && _hzScrollBar != null) - rect.height += _hzScrollBar.height; - if (_dontClipMargin) - { - rect.x -= _owner.margin.left; - rect.width += (_owner.margin.left + _owner.margin.right); - rect.y -= _owner.margin.top; - rect.height += (_owner.margin.top + _owner.margin.bottom); - } - - _maskContainer.clipRect = rect; - } - - if (_scrollType == ScrollType.Horizontal || _scrollType == ScrollType.Both) - _overlapSize.x = Mathf.CeilToInt(Math.Max(0, _contentSize.x - _viewSize.x)); - else - _overlapSize.x = 0; - if (_scrollType == ScrollType.Vertical || _scrollType == ScrollType.Both) - _overlapSize.y = Mathf.CeilToInt(Math.Max(0, _contentSize.y - _viewSize.y)); - else - _overlapSize.y = 0; - - //边界检查 - _xPos = Mathf.Clamp(_xPos, 0, _overlapSize.x); - _yPos = Mathf.Clamp(_yPos, 0, _overlapSize.y); - float max = _overlapSize[_refreshBarAxis]; - if (max == 0) - max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); - else - max += _footerLockedSize; - if (_refreshBarAxis == 0) - _container.SetXY(Mathf.Clamp(_container.x, -max, _headerLockedSize), Mathf.Clamp(_container.y, -_overlapSize.y, 0)); - else - _container.SetXY(Mathf.Clamp(_container.x, -_overlapSize.x, 0), Mathf.Clamp(_container.y, -max, _headerLockedSize)); - - if (_header != null) - { - if (_refreshBarAxis == 0) - _header.height = _viewSize.y; - else - _header.width = _viewSize.x; - } - - if (_footer != null) - { - if (_refreshBarAxis == 0) - _footer.height = _viewSize.y; - else - _footer.width = _viewSize.x; - } - - UpdateScrollBarPos(); - if (_pageMode) - UpdatePageController(); - } - - private void PosChanged(bool ani) - { - //只要有1处要求不要缓动,那就不缓动 - if (_aniFlag == 0) - _aniFlag = ani ? 1 : -1; - else if (_aniFlag == 1 && !ani) - _aniFlag = -1; - - _needRefresh = true; - - UpdateContext.OnBegin -= _refreshDelegate; - UpdateContext.OnBegin += _refreshDelegate; - } - - private void Refresh() - { - _needRefresh = false; - UpdateContext.OnBegin -= _refreshDelegate; - - if (_owner.displayObject == null || _owner.displayObject.isDisposed) - return; - - if (_pageMode || _snapToItem) - { - Vector2 pos = new Vector2(-_xPos, -_yPos); - AlignPosition(ref pos, false); - _xPos = -pos.x; - _yPos = -pos.y; - } - - Refresh2(); - - _onScroll.Call(); - if (_needRefresh) //在onScroll事件里开发者可能修改位置,这里再刷新一次,避免闪烁 - { - _needRefresh = false; - UpdateContext.OnBegin -= _refreshDelegate; - - Refresh2(); - } - - UpdateScrollBarPos(); - _aniFlag = 0; - } - - void Refresh2() - { - if (_aniFlag == 1 && !_dragged) - { - Vector2 pos = new Vector2(); - - if (_overlapSize.x > 0) - pos.x = -(int)_xPos; - else - { - if (_container.x != 0) - _container.x = 0; - pos.x = 0; - } - if (_overlapSize.y > 0) - pos.y = -(int)_yPos; - else - { - if (_container.y != 0) - _container.y = 0; - pos.y = 0; - } - - if (pos.x != _container.x || pos.y != _container.y) - { - _tweenDuration = new Vector2(TWEEN_TIME_GO, TWEEN_TIME_GO); - _tweenStart = _container.xy; - _tweenChange = pos - _tweenStart; - StartTween(1); - } - else if (_tweening != 0) - KillTween(); - } - else - { - if (_tweening != 0) - KillTween(); - - _container.SetXY((int)-_xPos, (int)-_yPos); - - LoopCheckingCurrent(); - } - - if (_pageMode) - UpdatePageController(); - } - - private void __touchBegin(EventContext context) - { - if (!_touchEffect) - return; - - InputEvent evt = context.inputEvent; - if (evt.button != 0) - return; - - context.CaptureTouch(); - - Vector2 pt = _owner.GlobalToLocal(evt.position); - - if (_tweening != 0) - { - KillTween(); - Stage.inst.CancelClick(evt.touchId); - - //立刻停止惯性滚动,可能位置不对齐,设定这个标志,使touchEnd时归位 - _dragged = true; - } - else - _dragged = false; - - _containerPos = _container.xy; - _beginTouchPos = _lastTouchPos = pt; - _lastTouchGlobalPos = evt.position; - _isHoldAreaDone = false; - _velocity = Vector2.zero; - _velocityScale = 1; - _lastMoveTime = Time.unscaledTime; - } - - private void __touchMove(EventContext context) - { - if (!_touchEffect || draggingPane != null && draggingPane != this || GObject.draggingObject != null) //已经有其他拖动 - return; - - InputEvent evt = context.inputEvent; - Vector2 pt = _owner.GlobalToLocal(evt.position); - if (float.IsNaN(pt.x)) - return; - - int sensitivity; - if (Stage.touchScreen) - sensitivity = UIConfig.touchScrollSensitivity; - else - sensitivity = 8; - - float diff; - bool sv = false, sh = false; - - if (_scrollType == ScrollType.Vertical) - { - if (!_isHoldAreaDone) - { - //表示正在监测垂直方向的手势 - _gestureFlag |= 1; - - diff = Mathf.Abs(_beginTouchPos.y - pt.y); - if (diff < sensitivity) - return; - - if ((_gestureFlag & 2) != 0) //已经有水平方向的手势在监测,那么我们用严格的方式检查是不是按垂直方向移动,避免冲突 - { - float diff2 = Mathf.Abs(_beginTouchPos.x - pt.x); - if (diff < diff2) //不通过则不允许滚动了 - return; - } - } - - sv = true; - } - else if (_scrollType == ScrollType.Horizontal) - { - if (!_isHoldAreaDone) - { - _gestureFlag |= 2; - - diff = Mathf.Abs(_beginTouchPos.x - pt.x); - if (diff < sensitivity) - return; - - if ((_gestureFlag & 1) != 0) - { - float diff2 = Mathf.Abs(_beginTouchPos.y - pt.y); - if (diff < diff2) - return; - } - } - - sh = true; - } - else - { - _gestureFlag = 3; - - if (!_isHoldAreaDone) - { - diff = Mathf.Abs(_beginTouchPos.y - pt.y); - if (diff < sensitivity) - { - diff = Mathf.Abs(_beginTouchPos.x - pt.x); - if (diff < sensitivity) - return; - } - } - - sv = sh = true; - } - - Vector2 newPos = _containerPos + pt - _beginTouchPos; - newPos.x = (int)newPos.x; - newPos.y = (int)newPos.y; - - if (sv) - { - if (newPos.y > 0) - { - if (!_bouncebackEffect) - _container.y = 0; - else if (_header != null && _header.maxHeight != 0) - _container.y = (int)Mathf.Min(newPos.y * 0.5f, _header.maxHeight); - else - _container.y = (int)Mathf.Min(newPos.y * 0.5f, _viewSize.y * PULL_RATIO); - } - else if (newPos.y < -_overlapSize.y) - { - if (!_bouncebackEffect) - _container.y = -_overlapSize.y; - else if (_footer != null && _footer.maxHeight > 0) - _container.y = (int)Mathf.Max((newPos.y + _overlapSize.y) * 0.5f, -_footer.maxHeight) - _overlapSize.y; - else - _container.y = (int)Mathf.Max((newPos.y + _overlapSize.y) * 0.5f, -_viewSize.y * PULL_RATIO) - _overlapSize.y; - } - else - _container.y = newPos.y; - } - - if (sh) - { - if (newPos.x > 0) - { - if (!_bouncebackEffect) - _container.x = 0; - else if (_header != null && _header.maxWidth != 0) - _container.x = (int)Mathf.Min(newPos.x * 0.5f, _header.maxWidth); - else - _container.x = (int)Mathf.Min(newPos.x * 0.5f, _viewSize.x * PULL_RATIO); - } - else if (newPos.x < 0 - _overlapSize.x) - { - if (!_bouncebackEffect) - _container.x = -_overlapSize.x; - else if (_footer != null && _footer.maxWidth > 0) - _container.x = (int)Mathf.Max((newPos.x + _overlapSize.x) * 0.5f, -_footer.maxWidth) - _overlapSize.x; - else - _container.x = (int)Mathf.Max((newPos.x + _overlapSize.x) * 0.5f, -_viewSize.x * PULL_RATIO) - _overlapSize.x; - } - else - _container.x = newPos.x; - } - - //更新速度 - float deltaTime = Time.unscaledDeltaTime; - float elapsed = (Time.unscaledTime - _lastMoveTime) * 60 - 1; - if (elapsed > 1) //速度衰减 - _velocity = _velocity * Mathf.Pow(0.833f, elapsed); - Vector2 deltaPosition = pt - _lastTouchPos; - if (!sh) - deltaPosition.x = 0; - if (!sv) - deltaPosition.y = 0; - _velocity = Vector2.Lerp(_velocity, deltaPosition / deltaTime, deltaTime * 10); - - /*速度计算使用的是本地位移,但在后续的惯性滚动判断中需要用到屏幕位移,所以这里要记录一个位移的比例。 - *后续的处理要使用这个比例但不使用坐标转换的方法的原因是,在曲面UI等异形UI中,还无法简单地进行屏幕坐标和本地坐标的转换。 - */ - Vector2 deltaGlobalPosition = _lastTouchGlobalPos - evt.position; - if (deltaPosition.x != 0) - _velocityScale = Mathf.Abs(deltaGlobalPosition.x / deltaPosition.x); - else if (deltaPosition.y != 0) - _velocityScale = Mathf.Abs(deltaGlobalPosition.y / deltaPosition.y); - - _lastTouchPos = pt; - _lastTouchGlobalPos = evt.position; - _lastMoveTime = Time.unscaledTime; - - //同步更新pos值 - if (_overlapSize.x > 0) - _xPos = Mathf.Clamp(-_container.x, 0, _overlapSize.x); - if (_overlapSize.y > 0) - _yPos = Mathf.Clamp(-_container.y, 0, _overlapSize.y); - - //循环滚动特别检查 - if (_loop != 0) - { - newPos = _container.xy; - if (LoopCheckingCurrent()) - _containerPos += _container.xy - newPos; - } - - draggingPane = this; - _isHoldAreaDone = true; - _dragged = true; - - UpdateScrollBarPos(); - UpdateScrollBarVisible(); - if (_pageMode) - UpdatePageController(); - _onScroll.Call(); - } - - private void __touchEnd(EventContext context) - { - if (draggingPane == this) - draggingPane = null; - - _gestureFlag = 0; - - if (!_dragged || !_touchEffect) - { - _dragged = false; - return; - } - - _dragged = false; - _tweenStart = _container.xy; - - Vector2 endPos = _tweenStart; - bool flag = false; - if (_container.x > 0) - { - endPos.x = 0; - flag = true; - } - else if (_container.x < -_overlapSize.x) - { - endPos.x = -_overlapSize.x; - flag = true; - } - if (_container.y > 0) - { - endPos.y = 0; - flag = true; - } - else if (_container.y < -_overlapSize.y) - { - endPos.y = -_overlapSize.y; - flag = true; - } - - if (flag) - { - _tweenChange = endPos - _tweenStart; - if (_tweenChange.x < -UIConfig.touchDragSensitivity || _tweenChange.y < -UIConfig.touchDragSensitivity) - DispatchEvent("onPullDownRelease", null); - else if (_tweenChange.x > UIConfig.touchDragSensitivity || _tweenChange.y > UIConfig.touchDragSensitivity) - DispatchEvent("onPullUpRelease", null); - - if (_headerLockedSize > 0 && endPos[_refreshBarAxis] == 0) - { - endPos[_refreshBarAxis] = _headerLockedSize; - _tweenChange = endPos - _tweenStart; - } - else if (_footerLockedSize > 0 && endPos[_refreshBarAxis] == -_overlapSize[_refreshBarAxis]) - { - float max = _overlapSize[_refreshBarAxis]; - if (max == 0) - max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); - else - max += _footerLockedSize; - endPos[_refreshBarAxis] = -max; - _tweenChange = endPos - _tweenStart; - } - - _tweenDuration.Set(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); - } - else - { - //更新速度 - if (!_inertiaDisabled) - { - float elapsed = (Time.unscaledTime - _lastMoveTime) * 60 - 1; - if (elapsed > 1) - _velocity = _velocity * Mathf.Pow(0.833f, elapsed); - - //根据速度计算目标位置和需要时间 - endPos = UpdateTargetAndDuration(_tweenStart); - } - else - _tweenDuration.Set(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); - Vector2 oldChange = endPos - _tweenStart; - - //调整目标位置 - LoopCheckingTarget(ref endPos); - if (_pageMode || _snapToItem) - AlignPosition(ref endPos, true); - - _tweenChange = endPos - _tweenStart; - if (_tweenChange.x == 0 && _tweenChange.y == 0) - { - UpdateScrollBarVisible(); - return; - } - - //如果目标位置已调整,随之调整需要时间 - if (_pageMode || _snapToItem) - { - FixDuration(0, oldChange.x); - FixDuration(1, oldChange.y); - } - } - - StartTween(2); - } - - private void __mouseWheel(EventContext context) - { - if (!_mouseWheelEnabled) - return; - - InputEvent evt = context.inputEvent; - float delta = evt.mouseWheelDelta / Stage.devicePixelRatio; - if (_snapToItem && Mathf.Abs(delta) < 1) - delta = Mathf.Sign(delta); - - if (_overlapSize.x > 0 && _overlapSize.y == 0) - { - float step = _pageMode ? _pageSize.x : _scrollStep; - SetPosX(_xPos + step * delta, false); - } - else - { - float step = _pageMode ? _pageSize.y : _scrollStep; - SetPosY(_yPos + step * delta, false); - } - } - - private void __rollOver() - { - _hover = true; - UpdateScrollBarVisible(); - } - - private void __rollOut() - { - _hover = false; - UpdateScrollBarVisible(); - } - - internal void UpdateClipSoft() - { - Vector2 softness = _owner.clipSoftness; - if (softness.x != 0 || softness.y != 0) - { - _maskContainer.clipSoftness = new Vector4( - (_container.x >= 0 || !_softnessOnTopOrLeftSide) ? 0 : softness.x, - (_container.y >= 0 || !_softnessOnTopOrLeftSide) ? 0 : softness.y, - (-_container.x - _overlapSize.x >= 0) ? 0 : softness.x, - (-_container.y - _overlapSize.y >= 0) ? 0 : softness.y); - } - else - _maskContainer.clipSoftness = null; - } - - private void UpdateScrollBarPos() - { - if (_vtScrollBar != null) - _vtScrollBar.setScrollPerc(_overlapSize.y == 0 ? 0 : Mathf.Clamp(-_container.y, 0, _overlapSize.y) / _overlapSize.y); - - if (_hzScrollBar != null) - _hzScrollBar.setScrollPerc(_overlapSize.x == 0 ? 0 : Mathf.Clamp(-_container.x, 0, _overlapSize.x) / _overlapSize.x); - - UpdateClipSoft(); - CheckRefreshBar(); - } - - public void UpdateScrollBarVisible() - { - if (_vtScrollBar != null) - { - if (_viewSize.y <= _vtScrollBar.minSize || _vScrollNone) - _vtScrollBar.displayObject.visible = false; - else - UpdateScrollBarVisible2(_vtScrollBar); - } - - if (_hzScrollBar != null) - { - if (_viewSize.x <= _hzScrollBar.minSize || _hScrollNone) - _hzScrollBar.displayObject.visible = false; - else - UpdateScrollBarVisible2(_hzScrollBar); - } - } - - private void UpdateScrollBarVisible2(GScrollBar bar) - { - if (_scrollBarDisplayAuto) - GTween.Kill(bar, TweenPropType.Alpha, false); - - if (_scrollBarDisplayAuto && !_hover && _tweening == 0 && !_dragged && !bar.gripDragging) - { - if (bar.displayObject.visible) - GTween.To(1, 0, 0.5f).SetDelay(0.5f).OnComplete(_hideScrollBarDelegate).SetTarget(bar, TweenPropType.Alpha); - } - else - { - bar.alpha = 1; - bar.displayObject.visible = true; - } - } - - private void __barTweenComplete(GTweener tweener) - { - GObject bar = (GObject)tweener.target; - bar.alpha = 1; - bar.displayObject.visible = false; - } - - float GetLoopPartSize(float division, int axis) - { - return (_contentSize[axis] + (axis == 0 ? ((GList)_owner).columnGap : ((GList)_owner).lineGap)) / division; - } - - /// - /// 对当前的滚动位置进行循环滚动边界检查。当到达边界时,回退一半内容区域(循环滚动内容大小通常是真实内容大小的偶数倍)。 - /// - /// - bool LoopCheckingCurrent() - { - bool changed = false; - if (_loop == 1 && _overlapSize.x > 0) - { - if (_xPos < 0.001f) - { - _xPos += GetLoopPartSize(2, 0); - changed = true; - } - else if (_xPos >= _overlapSize.x) - { - _xPos -= GetLoopPartSize(2, 0); - changed = true; - } - } - else if (_loop == 2 && _overlapSize.y > 0) - { - if (_yPos < 0.001f) - { - _yPos += GetLoopPartSize(2, 1); - changed = true; - } - else if (_yPos >= _overlapSize.y) - { - _yPos -= GetLoopPartSize(2, 1); - changed = true; - } - } - - if (changed) - _container.SetXY((int)-_xPos, (int)-_yPos); - - return changed; - } - - /// - /// 对目标位置进行循环滚动边界检查。当到达边界时,回退一半内容区域(循环滚动内容大小通常是真实内容大小的偶数倍)。 - /// - /// - void LoopCheckingTarget(ref Vector2 endPos) - { - if (_loop == 1) - LoopCheckingTarget(ref endPos, 0); - - if (_loop == 2) - LoopCheckingTarget(ref endPos, 1); - } - - void LoopCheckingTarget(ref Vector2 endPos, int axis) - { - if (endPos[axis] > 0) - { - float halfSize = GetLoopPartSize(2, axis); - float tmp = _tweenStart[axis] - halfSize; - if (tmp <= 0 && tmp >= -_overlapSize[axis]) - { - endPos[axis] -= halfSize; - _tweenStart[axis] = tmp; - } - } - else if (endPos[axis] < -_overlapSize[axis]) - { - float halfSize = GetLoopPartSize(2, axis); - float tmp = _tweenStart[axis] + halfSize; - if (tmp <= 0 && tmp >= -_overlapSize[axis]) - { - endPos[axis] += halfSize; - _tweenStart[axis] = tmp; - } - } - } - - void LoopCheckingNewPos(ref float value, int axis) - { - if (_overlapSize[axis] == 0) - return; - - float pos = axis == 0 ? _xPos : _yPos; - bool changed = false; - if (value < 0.001f) - { - value += GetLoopPartSize(2, axis); - if (value > pos) - { - float v = GetLoopPartSize(6, axis); - v = Mathf.CeilToInt((value - pos) / v) * v; - pos = Mathf.Clamp(pos + v, 0, _overlapSize[axis]); - changed = true; - } - } - else if (value >= _overlapSize[axis]) - { - value -= GetLoopPartSize(2, axis); - if (value < pos) - { - float v = GetLoopPartSize(6, axis); - v = Mathf.CeilToInt((pos - value) / v) * v; - pos = Mathf.Clamp(pos - v, 0, _overlapSize[axis]); - changed = true; - } - } - - if (changed) - { - if (axis == 0) - _container.x = -(int)pos; - else - _container.y = -(int)pos; - } - } - - /// - /// 从oldPos滚动至pos,调整pos位置对齐页面、对齐item等(如果需要)。 - /// - /// - /// - void AlignPosition(ref Vector2 pos, bool inertialScrolling) - { - if (_pageMode) - { - pos.x = AlignByPage(pos.x, 0, inertialScrolling); - pos.y = AlignByPage(pos.y, 1, inertialScrolling); - } - else if (_snapToItem) - { - float tmpX = -pos.x; - float tmpY = -pos.y; - float xDir = 0; - float yDir = 0; - if (inertialScrolling) - { - xDir = pos.x - _containerPos.x; - yDir = pos.y - _containerPos.y; - } - _owner.GetSnappingPositionWithDir(ref tmpX, ref tmpY, xDir, yDir); - if (pos.x < 0 && pos.x > -_overlapSize.x) - pos.x = -tmpX; - if (pos.y < 0 && pos.y > -_overlapSize.y) - pos.y = -tmpY; - } - } - - /// - /// 从oldPos滚动至pos,调整目标位置到对齐页面。 - /// - /// - /// - /// - /// - float AlignByPage(float pos, int axis, bool inertialScrolling) - { - int page; - - if (pos > 0) - page = 0; - else if (pos < -_overlapSize[axis]) - page = Mathf.CeilToInt(_contentSize[axis] / _pageSize[axis]) - 1; - else - { - page = Mathf.FloorToInt(-pos / _pageSize[axis]); - float change = inertialScrolling ? (pos - _containerPos[axis]) : (pos - _container.xy[axis]); - float testPageSize = Mathf.Min(_pageSize[axis], _contentSize[axis] - (page + 1) * _pageSize[axis]); - float delta = -pos - page * _pageSize[axis]; - - //页面吸附策略 - if (Mathf.Abs(change) > _pageSize[axis])//如果滚动距离超过1页,则需要超过页面的一半,才能到更下一页 - { - if (delta > testPageSize * 0.5f) - page++; - } - else //否则只需要页面的1/3,当然,需要考虑到左移和右移的情况 - { - if (delta > testPageSize * (change < 0 ? UIConfig.defaultScrollPagingThreshold : (1 - UIConfig.defaultScrollPagingThreshold))) - page++; - } - - //重新计算终点 - pos = -page * _pageSize[axis]; - if (pos < -_overlapSize[axis]) //最后一页未必有pageSize那么大 - pos = -_overlapSize[axis]; - } - - //惯性滚动模式下,会增加判断尽量不要滚动超过一页 - if (inertialScrolling) - { - float oldPos = _tweenStart[axis]; - int oldPage; - if (oldPos > 0) - oldPage = 0; - else if (oldPos < -_overlapSize[axis]) - oldPage = Mathf.CeilToInt(_contentSize[axis] / _pageSize[axis]) - 1; - else - oldPage = Mathf.FloorToInt(-oldPos / _pageSize[axis]); - int startPage = Mathf.FloorToInt(-_containerPos[axis] / _pageSize[axis]); - if (Mathf.Abs(page - startPage) > 1 && Mathf.Abs(oldPage - startPage) <= 1) - { - if (page > startPage) - page = startPage + 1; - else - page = startPage - 1; - pos = -page * _pageSize[axis]; - } - } - - return pos; - } - - /// - /// 根据当前速度,计算滚动的目标位置,以及到达时间。 - /// - /// - /// - Vector2 UpdateTargetAndDuration(Vector2 orignPos) - { - Vector2 ret = Vector2.zero; - ret.x = UpdateTargetAndDuration(orignPos.x, 0); - ret.y = UpdateTargetAndDuration(orignPos.y, 1); - return ret; - } - - float UpdateTargetAndDuration(float pos, int axis) - { - float v = _velocity[axis]; - float duration = 0; - - if (pos > 0) - pos = 0; - else if (pos < -_overlapSize[axis]) - pos = -_overlapSize[axis]; - else - { - //以屏幕像素为基准 - float v2 = Mathf.Abs(v) * _velocityScale; - //在移动设备上,需要对不同分辨率做一个适配,我们的速度判断以1136分辨率为基准 - if (Stage.touchScreen) - v2 *= 1136f / Mathf.Max(Screen.width, Screen.height); - //这里有一些阈值的处理,因为在低速内,不希望产生较大的滚动(甚至不滚动) - float ratio = 0; - if (_pageMode || !Stage.touchScreen) - { - if (v2 > 500) - ratio = Mathf.Pow((v2 - 500) / 500, 2); - } - else - { - if (v2 > 1000) - ratio = Mathf.Pow((v2 - 1000) / 1000, 2); - } - - if (ratio != 0) - { - if (ratio > 1) - ratio = 1; - - v2 *= ratio; - v *= ratio; - _velocity[axis] = v; - - //算法:v*(_decelerationRate的n次幂)= 60,即在n帧后速度降为60(假设每秒60帧)。 - duration = Mathf.Log(60 / v2, _decelerationRate) / 60; - - //计算距离要使用本地速度 - //理论公式貌似滚动的距离不够,改为经验公式 - //float change = (int)((v/ 60 - 1) / (1 - _decelerationRate)); - float change = (int)(v * duration * 0.4f); - pos += change; - } - } - - if (duration < TWEEN_TIME_DEFAULT) - duration = TWEEN_TIME_DEFAULT; - _tweenDuration[axis] = duration; - - return pos; - } - - /// - /// 根据修改后的tweenChange重新计算减速时间。 - /// - void FixDuration(int axis, float oldChange) - { - if (_tweenChange[axis] == 0 || Mathf.Abs(_tweenChange[axis]) >= Mathf.Abs(oldChange)) - return; - - float newDuration = Mathf.Abs(_tweenChange[axis] / oldChange) * _tweenDuration[axis]; - if (newDuration < TWEEN_TIME_DEFAULT) - newDuration = TWEEN_TIME_DEFAULT; - - _tweenDuration[axis] = newDuration; - } - - void StartTween(int type) - { - _tweenTime.Set(0, 0); - _tweening = type; - Timers.inst.AddUpdate(_tweenUpdateDelegate); - - UpdateScrollBarVisible(); - } - - void KillTween() - { - if (_tweening == 1) //取消类型为1的tween需立刻设置到终点 - { - _container.xy = _tweenStart + _tweenChange; - _onScroll.Call(); - } - - _tweening = 0; - Timers.inst.Remove(_tweenUpdateDelegate); - - UpdateScrollBarVisible(); - - _onScrollEnd.Call(); - } - - void CheckRefreshBar() - { - if (_header == null && _footer == null) - return; - - float pos = _container.xy[_refreshBarAxis]; - if (_header != null) - { - if (pos > 0) - { - if (_header.displayObject.parent == null) - _maskContainer.AddChildAt(_header.displayObject, 0); - Vector2 vec; - - vec = _header.size; - vec[_refreshBarAxis] = pos; - _header.size = vec; - } - else - { - if (_header.displayObject.parent != null) - _maskContainer.RemoveChild(_header.displayObject); - } - } - - if (_footer != null) - { - float max = _overlapSize[_refreshBarAxis]; - if (pos < -max || max == 0 && _footerLockedSize > 0) - { - if (_footer.displayObject.parent == null) - _maskContainer.AddChildAt(_footer.displayObject, 0); - - Vector2 vec; - - vec = _footer.xy; - if (max > 0) - vec[_refreshBarAxis] = pos + _contentSize[_refreshBarAxis]; - else - vec[_refreshBarAxis] = Mathf.Max(Mathf.Min(pos + _viewSize[_refreshBarAxis], _viewSize[_refreshBarAxis] - _footerLockedSize), _viewSize[_refreshBarAxis] - _contentSize[_refreshBarAxis]); - _footer.xy = vec; - - vec = _footer.size; - if (max > 0) - vec[_refreshBarAxis] = -max - pos; - else - vec[_refreshBarAxis] = _viewSize[_refreshBarAxis] - _footer.xy[_refreshBarAxis]; - _footer.size = vec; - } - else - { - if (_footer.displayObject.parent != null) - _maskContainer.RemoveChild(_footer.displayObject); - } - } - } - - void TweenUpdate(object param) - { - if (_owner.displayObject == null || _owner.displayObject.isDisposed) - { - Timers.inst.Remove(_tweenUpdateDelegate); - return; - } - - float nx = RunTween(0); - float ny = RunTween(1); - - _container.SetXY(nx, ny); - - if (_tweening == 2) - { - if (_overlapSize.x > 0) - _xPos = Mathf.Clamp(-nx, 0, _overlapSize.x); - if (_overlapSize.y > 0) - _yPos = Mathf.Clamp(-ny, 0, _overlapSize.y); - - if (_pageMode) - UpdatePageController(); - } - - if (_tweenChange.x == 0 && _tweenChange.y == 0) - { - _tweening = 0; - Timers.inst.Remove(_tweenUpdateDelegate); - - LoopCheckingCurrent(); - - UpdateScrollBarPos(); - UpdateScrollBarVisible(); - - _onScroll.Call(); - _onScrollEnd.Call(); - } - else - { - UpdateScrollBarPos(); - _onScroll.Call(); - } - } - - float RunTween(int axis) - { - float newValue; - if (_tweenChange[axis] != 0) - { - _tweenTime[axis] += Time.unscaledDeltaTime; - if (_tweenTime[axis] >= _tweenDuration[axis]) - { - newValue = _tweenStart[axis] + _tweenChange[axis]; - _tweenChange[axis] = 0; - } - else - { - float ratio = EaseFunc(_tweenTime[axis], _tweenDuration[axis]); - newValue = _tweenStart[axis] + (int)(_tweenChange[axis] * ratio); - } - - float threshold1 = 0; - float threshold2 = -_overlapSize[axis]; - if (_headerLockedSize > 0 && _refreshBarAxis == axis) - threshold1 = _headerLockedSize; - if (_footerLockedSize > 0 && _refreshBarAxis == axis) - { - float max = _overlapSize[_refreshBarAxis]; - if (max == 0) - max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); - else - max += _footerLockedSize; - threshold2 = -max; - } - - if (_tweening == 2 && _bouncebackEffect) - { - if (newValue > 20 + threshold1 && _tweenChange[axis] > 0 - || newValue > threshold1 && _tweenChange[axis] == 0)//开始回弹 - { - _tweenTime[axis] = 0; - _tweenDuration[axis] = TWEEN_TIME_DEFAULT; - _tweenChange[axis] = -newValue + threshold1; - _tweenStart[axis] = newValue; - } - else if (newValue < threshold2 - 20 && _tweenChange[axis] < 0 - || newValue < threshold2 && _tweenChange[axis] == 0)//开始回弹 - { - _tweenTime[axis] = 0; - _tweenDuration[axis] = TWEEN_TIME_DEFAULT; - _tweenChange[axis] = threshold2 - newValue; - _tweenStart[axis] = newValue; - } - } - else - { - if (newValue > threshold1) - { - newValue = threshold1; - _tweenChange[axis] = 0; - } - else if (newValue < threshold2) - { - newValue = threshold2; - _tweenChange[axis] = 0; - } - } - } - else - newValue = _container.xy[axis]; - - return newValue; - } - - static float EaseFunc(float t, float d) - { - return (t = t / d - 1) * t * t + 1;//cubicOut - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs.meta deleted file mode 100644 index 71bf47c..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e51675ea70043e1488812e46428e83aa -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs deleted file mode 100644 index faa957b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs +++ /dev/null @@ -1,1771 +0,0 @@ -using System; -using System.Collections.Generic; -using FairyGUI.Utils; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - public delegate void PlayCompleteCallback(); - - /// - /// - /// - public delegate void TransitionHook(); - - /// - /// - /// - public class Transition : ITweenListener - { - /// - /// 动效的名称。在编辑器里设定。 - /// - public string name { get; private set; } - - /// - /// 当你启动了自动合批,动效里有涉及到XY、大小、旋转等的改变,如果你观察到元件的显示深度在播放过程中有错误,可以开启这个选项。 - /// - public bool invalidateBatchingEveryFrame; - - GComponent _owner; - TransitionItem[] _items; - int _totalTimes; - int _totalTasks; - bool _playing; - bool _paused; - float _ownerBaseX; - float _ownerBaseY; - PlayCompleteCallback _onComplete; - int _options; - bool _reversed; - float _totalDuration; - bool _autoPlay; - int _autoPlayTimes; - float _autoPlayDelay; - float _timeScale; - bool _ignoreEngineTimeScale; - float _startTime; - float _endTime; - GTweenCallback _delayedCallDelegate; - GTweenCallback _checkAllDelegate; - GTweenCallback1 _delayedCallDelegate2; - - const int OPTION_IGNORE_DISPLAY_CONTROLLER = 1; - const int OPTION_AUTO_STOP_DISABLED = 2; - const int OPTION_AUTO_STOP_AT_END = 4; - - public Transition(GComponent owner) - { - _owner = owner; - _timeScale = 1; - _ignoreEngineTimeScale = true; - - _delayedCallDelegate = OnDelayedPlay; - _delayedCallDelegate2 = OnDelayedPlayItem; - _checkAllDelegate = CheckAllComplete; - } - - /// - /// - /// - public void Play() - { - _Play(1, 0, 0, -1, null, false); - } - - /// - /// - /// - /// - public void Play(PlayCompleteCallback onComplete) - { - _Play(1, 0, 0, -1, onComplete, false); - } - - /// - /// - /// - /// - /// - /// - public void Play(int times, float delay, PlayCompleteCallback onComplete) - { - _Play(times, delay, 0, -1, onComplete, false); - } - - /// - /// - /// - /// - /// - /// - /// - /// - public void Play(int times, float delay, float startTime, float endTime, PlayCompleteCallback onComplete) - { - _Play(times, delay, startTime, endTime, onComplete, false); - } - - /// - /// - /// - public void PlayReverse() - { - _Play(1, 0, 0, -1, null, true); - } - - /// - /// - /// - /// - public void PlayReverse(PlayCompleteCallback onComplete) - { - _Play(1, 0, 0, -1, onComplete, true); - } - - /// - /// - /// - /// - /// - /// - public void PlayReverse(int times, float delay, PlayCompleteCallback onComplete) - { - _Play(times, delay, 0, -1, onComplete, true); - } - - /// - /// - /// - /// - public void ChangePlayTimes(int value) - { - _totalTimes = value; - } - - /// - /// 设置动效是否自动播放。 - /// - /// - /// - /// - public void SetAutoPlay(bool autoPlay, int times, float delay) - { - if (_autoPlay != autoPlay) - { - _autoPlay = autoPlay; - _autoPlayTimes = times; - _autoPlayDelay = delay; - if (_autoPlay) - { - if (_owner.onStage) - Play(times, delay, null); - } - else - { - if (!_owner.onStage) - Stop(false, true); - } - } - } - - void _Play(int times, float delay, float startTime, float endTime, PlayCompleteCallback onComplete, bool reverse) - { - Stop(true, true); - - _totalTimes = times; - _reversed = reverse; - _startTime = startTime; - _endTime = endTime; - _playing = true; - _paused = false; - _onComplete = onComplete; - - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.target == null) - { - if (item.targetId.Length > 0) - item.target = _owner.GetChildById(item.targetId); - else - item.target = _owner; - } - else if (item.target != _owner && item.target.parent != _owner) //maybe removed - item.target = null; - - if (item.target != null && item.type == TransitionActionType.Transition) - { - TValue_Transition value = (TValue_Transition)item.value; - Transition trans = ((GComponent)item.target).GetTransition(value.transName); - if (trans == this) - trans = null; - if (trans != null) - { - if (value.playTimes == 0) //stop - { - int j; - for (j = i - 1; j >= 0; j--) - { - TransitionItem item2 = _items[j]; - if (item2.type == TransitionActionType.Transition) - { - TValue_Transition value2 = (TValue_Transition)item2.value; - if (value2.trans == trans) - { - value2.stopTime = item.time - item2.time; - break; - } - } - } - if (j < 0) - value.stopTime = 0; - else - trans = null; //no need to handle stop anymore - } - else - value.stopTime = -1; - } - value.trans = trans; - } - } - - if (delay == 0) - OnDelayedPlay(); - else - GTween.DelayedCall(delay).SetTarget(this).OnComplete(_delayedCallDelegate); - } - - /// - /// - /// - public void Stop() - { - Stop(true, false); - } - - /// - /// - /// - /// - /// - public void Stop(bool setToComplete, bool processCallback) - { - if (!_playing) - return; - - _playing = false; - _totalTasks = 0; - _totalTimes = 0; - PlayCompleteCallback func = _onComplete; - _onComplete = null; - - GTween.Kill(this);//delay start - - int cnt = _items.Length; - if (_reversed) - { - for (int i = cnt - 1; i >= 0; i--) - { - TransitionItem item = _items[i]; - if (item.target == null) - continue; - - StopItem(item, setToComplete); - } - } - else - { - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.target == null) - continue; - - StopItem(item, setToComplete); - } - } - - if (processCallback && func != null) - func(); - - } - - void StopItem(TransitionItem item, bool setToComplete) - { - if (item.displayLockToken != 0) - { - item.target.ReleaseDisplayLock(item.displayLockToken); - item.displayLockToken = 0; - } - - if (item.tweener != null) - { - item.tweener.Kill(setToComplete); - item.tweener = null; - - if (item.type == TransitionActionType.Shake && !setToComplete) //震动必须归位,否则下次就越震越远了。 - { - item.target._gearLocked = true; - item.target.SetXY(item.target.x - ((TValue_Shake)item.value).lastOffset.x, item.target.y - ((TValue_Shake)item.value).lastOffset.y); - item.target._gearLocked = false; - - _owner.InvalidateBatchingState(true); - } - } - - if (item.type == TransitionActionType.Transition) - { - TValue_Transition value = (TValue_Transition)item.value; - if (value.trans != null) - value.trans.Stop(setToComplete, false); - } - } - - /// - /// - /// - /// - public void SetPaused(bool paused) - { - if (!_playing || _paused == paused) - return; - - _paused = paused; - GTweener tweener = GTween.GetTween(this); - if (tweener != null) - tweener.SetPaused(paused); - - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.target == null) - continue; - - if (item.type == TransitionActionType.Transition) - { - if (((TValue_Transition)item.value).trans != null) - ((TValue_Transition)item.value).trans.SetPaused(paused); - } - else if (item.type == TransitionActionType.Animation) - { - if (paused) - { - ((TValue_Animation)item.value).flag = ((IAnimationGear)item.target).playing; - ((IAnimationGear)item.target).playing = false; - } - else - ((IAnimationGear)item.target).playing = ((TValue_Animation)item.value).flag; - } - - if (item.tweener != null) - item.tweener.SetPaused(paused); - } - } - - public void Dispose() - { - if (_playing) - GTween.Kill(this);//delay start - - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.tweener != null) - { - item.tweener.Kill(); - item.tweener = null; - } - - item.target = null; - item.hook = null; - if (item.tweenConfig != null) - item.tweenConfig.endHook = null; - } - - _playing = false; - _onComplete = null; - } - - /// - /// - /// - public bool playing - { - get { return _playing; } - } - - /// - /// transition's total duration, maybe zero when the transition only has one frame - /// - public float totalDuration - { - get { return _totalDuration; } - } - - /// - /// - /// - /// - /// - public void SetValue(string label, params object[] aParams) - { - int cnt = _items.Length; - object value; - bool found = false; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.label == label) - { - if (item.tweenConfig != null) - value = item.tweenConfig.startValue; - else - value = item.value; - found = true; - } - else if (item.tweenConfig != null && item.tweenConfig.endLabel == label) - { - value = item.tweenConfig.endValue; - found = true; - } - else - continue; - - switch (item.type) - { - case TransitionActionType.XY: - case TransitionActionType.Size: - case TransitionActionType.Pivot: - case TransitionActionType.Scale: - case TransitionActionType.Skew: - { - TValue tvalue = (TValue)value; - tvalue.b1 = true; - tvalue.b2 = true; - tvalue.f1 = Convert.ToSingle(aParams[0]); - tvalue.f2 = Convert.ToSingle(aParams[1]); - } - break; - - case TransitionActionType.Alpha: - ((TValue)value).f1 = Convert.ToSingle(aParams[0]); - break; - - case TransitionActionType.Rotation: - ((TValue)value).f1 = Convert.ToSingle(aParams[0]); - break; - - case TransitionActionType.Color: - ((TValue)value).color = (Color)aParams[0]; - break; - - case TransitionActionType.Animation: - { - TValue_Animation tvalue = (TValue_Animation)value; - tvalue.frame = Convert.ToInt32(aParams[0]); - if (aParams.Length > 1) - tvalue.playing = Convert.ToBoolean(aParams[1]); - if (aParams.Length > 2) - tvalue.animationName = (string)aParams[2]; - if (aParams.Length > 3) - tvalue.skinName = (string)aParams[3]; - } - break; - - case TransitionActionType.Visible: - ((TValue_Visible)value).visible = Convert.ToBoolean(aParams[0]); - break; - - case TransitionActionType.Sound: - { - TValue_Sound tvalue = (TValue_Sound)value; - tvalue.sound = (string)aParams[0]; - if (aParams.Length > 1) - tvalue.volume = Convert.ToSingle(aParams[1]); - } - break; - - case TransitionActionType.Transition: - { - TValue_Transition tvalue = (TValue_Transition)value; - tvalue.transName = (string)aParams[0]; - if (aParams.Length > 1) - tvalue.playTimes = Convert.ToInt32(aParams[1]); - } - break; - - case TransitionActionType.Shake: - { - ((TValue_Shake)value).amplitude = Convert.ToSingle(aParams[0]); - if (aParams.Length > 1) - ((TValue_Shake)value).duration = Convert.ToSingle(aParams[1]); - } - break; - - case TransitionActionType.ColorFilter: - { - TValue tvalue = (TValue)value; - tvalue.f1 = Convert.ToSingle(aParams[0]); - tvalue.f2 = Convert.ToSingle(aParams[1]); - tvalue.f3 = Convert.ToSingle(aParams[2]); - tvalue.f4 = Convert.ToSingle(aParams[3]); - } - break; - - case TransitionActionType.Text: - case TransitionActionType.Icon: - ((TValue_Text)value).text = (string)aParams[0]; - break; - } - } - - if (!found) - throw new Exception("label not exists"); - } - - /// - /// - /// - /// - /// - public void SetHook(string label, TransitionHook callback) - { - int cnt = _items.Length; - bool found = false; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.label == label) - { - item.hook = callback; - found = true; - break; - } - else if (item.tweenConfig != null && item.tweenConfig.endLabel == label) - { - item.tweenConfig.endHook = callback; - found = true; - break; - } - } - if (!found) - throw new Exception("label not exists"); - } - - /// - /// - /// - public void ClearHooks() - { - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - item.hook = null; - if (item.tweenConfig != null) - item.tweenConfig.endHook = null; - } - } - - /// - /// - /// - /// - /// - public void SetTarget(string label, GObject newTarget) - { - int cnt = _items.Length; - bool found = false; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.label == label) - { - item.targetId = (newTarget == _owner || newTarget == null) ? string.Empty : newTarget.id; - if (_playing) - { - if (item.targetId.Length > 0) - item.target = _owner.GetChildById(item.targetId); - else - item.target = _owner; - } - else - item.target = null; - found = true; - } - } - if (!found) - throw new Exception("label not exists"); - } - - /// - /// - /// - /// - /// - public void SetDuration(string label, float value) - { - int cnt = _items.Length; - bool found = false; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.tweenConfig != null && item.label == label) - { - item.tweenConfig.duration = value; - found = true; - } - } - - if (!found) - throw new Exception("label not exists or not a tween label"); - } - - /// - /// - /// - /// - /// - public float GetLabelTime(string label) - { - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.label == label) - return item.time; - else if (item.tweenConfig != null && item.tweenConfig.endLabel == label) - return item.time + item.tweenConfig.duration; - } - - return float.NaN; - } - - /// - /// - /// - public float timeScale - { - get { return _timeScale; } - set - { - if (_timeScale != value) - { - _timeScale = value; - - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.tweener != null) - item.tweener.SetTimeScale(value); - else if (item.type == TransitionActionType.Transition) - { - if (((TValue_Transition)item.value).trans != null) - ((TValue_Transition)item.value).trans.timeScale = value; - } - else if (item.type == TransitionActionType.Animation) - { - if (item.target != null) - ((IAnimationGear)item.target).timeScale = value; - } - } - } - } - } - - /// - /// - /// - public bool ignoreEngineTimeScale - { - get { return _ignoreEngineTimeScale; } - set - { - if (_ignoreEngineTimeScale != value) - { - _ignoreEngineTimeScale = value; - - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.tweener != null) - item.tweener.SetIgnoreEngineTimeScale(value); - else if (item.type == TransitionActionType.Transition) - { - if (((TValue_Transition)item.value).trans != null) - ((TValue_Transition)item.value).trans.ignoreEngineTimeScale = value; - } - else if (item.type == TransitionActionType.Animation) - { - if (item.target != null) - ((IAnimationGear)item.target).ignoreEngineTimeScale = value; - } - } - } - } - } - - internal void UpdateFromRelations(string targetId, float dx, float dy) - { - int cnt = _items.Length; - if (cnt == 0) - return; - - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.type == TransitionActionType.XY && item.targetId == targetId) - { - if (item.tweenConfig != null) - { - if (!item.tweenConfig.startValue.b3) - { - item.tweenConfig.startValue.f1 += dx; - item.tweenConfig.startValue.f2 += dy; - } - if (!item.tweenConfig.endValue.b3) - { - item.tweenConfig.endValue.f1 += dx; - item.tweenConfig.endValue.f2 += dy; - } - } - else - { - if (!((TValue)item.value).b3) - { - ((TValue)item.value).f1 += dx; - ((TValue)item.value).f2 += dy; - } - } - } - } - } - - internal void OnOwnerAddedToStage() - { - if (_autoPlay && !_playing) - Play(_autoPlayTimes, _autoPlayDelay, null); - } - - internal void OnOwnerRemovedFromStage() - { - if ((_options & OPTION_AUTO_STOP_DISABLED) == 0) - Stop((_options & OPTION_AUTO_STOP_AT_END) != 0 ? true : false, false); - } - - void OnDelayedPlay() - { - InternalPlay(); - - _playing = _totalTasks > 0; - if (_playing) - { - if ((_options & OPTION_IGNORE_DISPLAY_CONTROLLER) != 0) - { - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.target != null && item.target != _owner) - item.displayLockToken = item.target.AddDisplayLock(); - } - } - } - else if (_onComplete != null) - { - PlayCompleteCallback func = _onComplete; - _onComplete = null; - func(); - } - } - - void InternalPlay() - { - _ownerBaseX = _owner.x; - _ownerBaseY = _owner.y; - - _totalTasks = 1; //prevent to complete inside the loop - - bool needSkipAnimations = false; - int cnt = _items.Length; - if (!_reversed) - { - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.target == null) - continue; - - if (item.type == TransitionActionType.Animation && _startTime != 0 && item.time <= _startTime) - { - needSkipAnimations = true; - ((TValue_Animation)item.value).flag = false; - } - else - PlayItem(item); - } - } - else - { - for (int i = cnt - 1; i >= 0; i--) - { - TransitionItem item = _items[i]; - if (item.target == null) - continue; - - PlayItem(item); - } - } - - if (needSkipAnimations) - SkipAnimations(); - - _totalTasks--; - } - - void PlayItem(TransitionItem item) - { - float time; - if (item.tweenConfig != null) - { - if (_reversed) - time = (_totalDuration - item.time - item.tweenConfig.duration); - else - time = item.time; - - if (_endTime == -1 || time <= _endTime) - { - TValue startValue; - TValue endValue; - - if (_reversed) - { - startValue = item.tweenConfig.endValue; - endValue = item.tweenConfig.startValue; - } - else - { - startValue = item.tweenConfig.startValue; - endValue = item.tweenConfig.endValue; - } - - ((TValue)item.value).b1 = startValue.b1 || endValue.b1; - ((TValue)item.value).b2 = startValue.b2 || endValue.b2; - - switch (item.type) - { - case TransitionActionType.XY: - case TransitionActionType.Size: - case TransitionActionType.Scale: - case TransitionActionType.Skew: - item.tweener = GTween.To(startValue.vec2, endValue.vec2, item.tweenConfig.duration); - break; - - case TransitionActionType.Alpha: - case TransitionActionType.Rotation: - item.tweener = GTween.To(startValue.f1, endValue.f1, item.tweenConfig.duration); - break; - - case TransitionActionType.Color: - item.tweener = GTween.To(startValue.color, endValue.color, item.tweenConfig.duration); - break; - - case TransitionActionType.ColorFilter: - item.tweener = GTween.To(startValue.vec4, endValue.vec4, item.tweenConfig.duration); - break; - } - - item.tweener.SetDelay(time) - .SetEase(item.tweenConfig.easeType, item.tweenConfig.customEase) - .SetRepeat(item.tweenConfig.repeat, item.tweenConfig.yoyo) - .SetTimeScale(_timeScale) - .SetIgnoreEngineTimeScale(_ignoreEngineTimeScale) - .SetTarget(item) - .SetListener(this); - - if (_endTime >= 0) - item.tweener.SetBreakpoint(_endTime - time); - - _totalTasks++; - } - } - else if (item.type == TransitionActionType.Shake) - { - TValue_Shake value = (TValue_Shake)item.value; - - if (_reversed) - time = (_totalDuration - item.time - value.duration); - else - time = item.time; - - if (_endTime == -1 || time <= _endTime) - { - value.lastOffset.Set(0, 0); - value.offset.Set(0, 0); - item.tweener = GTween.Shake(Vector3.zero, value.amplitude, value.duration) - .SetDelay(time) - .SetTimeScale(_timeScale) - .SetIgnoreEngineTimeScale(_ignoreEngineTimeScale) - .SetTarget(item) - .SetListener(this); - - if (_endTime >= 0) - item.tweener.SetBreakpoint(_endTime - item.time); - - _totalTasks++; - } - } - else - { - if (_reversed) - time = (_totalDuration - item.time); - else - time = item.time; - - if (time <= _startTime) - { - ApplyValue(item); - CallHook(item, false); - } - else if (_endTime == -1 || time <= _endTime) - { - _totalTasks++; - item.tweener = GTween.DelayedCall(time) - .SetTimeScale(_timeScale) - .SetIgnoreEngineTimeScale(_ignoreEngineTimeScale) - .SetTarget(item) - .OnComplete(_delayedCallDelegate2); - } - } - - if (item.tweener != null) - item.tweener.Seek(_startTime); - } - - void SkipAnimations() - { - int frame; - float playStartTime; - float playTotalTime; - TValue_Animation value; - IAnimationGear target; - TransitionItem item; - - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - item = _items[i]; - if (item.type != TransitionActionType.Animation || item.time > _startTime) - continue; - - value = (TValue_Animation)item.value; - if (value.flag) - continue; - - target = (IAnimationGear)item.target; - frame = target.frame; - playStartTime = target.playing ? 0 : -1; - playTotalTime = 0; - - for (int j = i; j < cnt; j++) - { - item = _items[j]; - if (item.type != TransitionActionType.Animation || item.target != target || item.time > _startTime) - continue; - - value = (TValue_Animation)item.value; - value.flag = true; - - if (value.frame != -1) - { - frame = value.frame; - if (value.playing) - playStartTime = item.time; - else - playStartTime = -1; - playTotalTime = 0; - } - else - { - if (value.playing) - { - if (playStartTime < 0) - playStartTime = item.time; - } - else - { - if (playStartTime >= 0) - playTotalTime += (item.time - playStartTime); - playStartTime = -1; - } - } - - CallHook(item, false); - } - - if (playStartTime >= 0) - playTotalTime += (_startTime - playStartTime); - - target.playing = playStartTime >= 0; - target.frame = frame; - if (playTotalTime > 0) - target.Advance(playTotalTime); - } - } - - void OnDelayedPlayItem(GTweener tweener) - { - TransitionItem item = (TransitionItem)tweener.target; - item.tweener = null; - _totalTasks--; - - ApplyValue(item); - CallHook(item, false); - - CheckAllComplete(); - } - - public void OnTweenStart(GTweener tweener) - { - TransitionItem item = (TransitionItem)tweener.target; - - if (item.type == TransitionActionType.XY || item.type == TransitionActionType.Size) //位置和大小要到start才最终确认起始值 - { - TValue startValue; - TValue endValue; - - if (_reversed) - { - startValue = item.tweenConfig.endValue; - endValue = item.tweenConfig.startValue; - } - else - { - startValue = item.tweenConfig.startValue; - endValue = item.tweenConfig.endValue; - } - - if (item.type == TransitionActionType.XY) - { - if (item.target != _owner) - { - if (!startValue.b1) - tweener.startValue.x = item.target.x; - else if (startValue.b3) //percent - tweener.startValue.x = startValue.f1 * _owner.width; - - if (!startValue.b2) - tweener.startValue.y = item.target.y; - else if (startValue.b3) //percent - tweener.startValue.y = startValue.f2 * _owner.height; - - if (!endValue.b1) - tweener.endValue.x = tweener.startValue.x; - else if (endValue.b3) - tweener.endValue.x = endValue.f1 * _owner.width; - - if (!endValue.b2) - tweener.endValue.y = tweener.startValue.y; - else if (endValue.b3) - tweener.endValue.y = endValue.f2 * _owner.height; - } - else - { - if (!startValue.b1) - tweener.startValue.x = item.target.x - _ownerBaseX; - if (!startValue.b2) - tweener.startValue.y = item.target.y - _ownerBaseY; - - if (!endValue.b1) - tweener.endValue.x = tweener.startValue.x; - if (!endValue.b2) - tweener.endValue.y = tweener.startValue.y; - } - } - else - { - if (!startValue.b1) - tweener.startValue.x = item.target.width; - if (!startValue.b2) - tweener.startValue.y = item.target.height; - - if (!endValue.b1) - tweener.endValue.x = tweener.startValue.x; - if (!endValue.b2) - tweener.endValue.y = tweener.startValue.y; - } - - if (item.tweenConfig.path != null) - { - ((TValue)item.value).b1 = ((TValue)item.value).b2 = true; - tweener.SetPath(item.tweenConfig.path); - } - } - - CallHook(item, false); - } - - public void OnTweenUpdate(GTweener tweener) - { - TransitionItem item = (TransitionItem)tweener.target; - switch (item.type) - { - case TransitionActionType.XY: - case TransitionActionType.Size: - case TransitionActionType.Scale: - case TransitionActionType.Skew: - ((TValue)item.value).vec2 = tweener.value.vec2; - if (item.tweenConfig.path != null) - { - ((TValue)item.value).f1 += tweener.startValue.x; - ((TValue)item.value).f2 += tweener.startValue.y; - } - break; - - case TransitionActionType.Alpha: - case TransitionActionType.Rotation: - ((TValue)item.value).f1 = tweener.value.x; - break; - - case TransitionActionType.Color: - ((TValue)item.value).color = tweener.value.color; - break; - - case TransitionActionType.ColorFilter: - ((TValue)item.value).vec4 = tweener.value.vec4; - break; - - case TransitionActionType.Shake: - ((TValue_Shake)item.value).offset = tweener.deltaValue.vec2; - break; - } - ApplyValue(item); - } - - public void OnTweenComplete(GTweener tweener) - { - TransitionItem item = (TransitionItem)tweener.target; - item.tweener = null; - _totalTasks--; - - if (tweener.allCompleted) //当整体播放结束时间在这个tween的中间时不应该调用结尾钩子 - CallHook(item, true); - - CheckAllComplete(); - } - - void OnPlayTransCompleted(TransitionItem item) - { - _totalTasks--; - - CheckAllComplete(); - } - - void CallHook(TransitionItem item, bool tweenEnd) - { - if (tweenEnd) - { - if (item.tweenConfig != null && item.tweenConfig.endHook != null) - item.tweenConfig.endHook(); - } - else - { - if (item.time >= _startTime && item.hook != null) - item.hook(); - } - } - - void CheckAllComplete() - { - if (_playing && _totalTasks == 0) - { - if (_totalTimes < 0) - { - InternalPlay(); - if (_totalTasks == 0) - GTween.DelayedCall(0).SetTarget(this).OnComplete(_checkAllDelegate); - } - else - { - _totalTimes--; - if (_totalTimes > 0) - { - InternalPlay(); - if (_totalTasks == 0) - GTween.DelayedCall(0).SetTarget(this).OnComplete(_checkAllDelegate); - } - else - { - _playing = false; - - int cnt = _items.Length; - for (int i = 0; i < cnt; i++) - { - TransitionItem item = _items[i]; - if (item.target != null && item.displayLockToken != 0) - { - item.target.ReleaseDisplayLock(item.displayLockToken); - item.displayLockToken = 0; - } - } - - if (_onComplete != null) - { - PlayCompleteCallback func = _onComplete; - _onComplete = null; - func(); - } - } - } - } - } - - void ApplyValue(TransitionItem item) - { - item.target._gearLocked = true; - - switch (item.type) - { - case TransitionActionType.XY: - { - TValue value = (TValue)item.value; - if (item.target == _owner) - { - if (value.b1 && value.b2) - item.target.SetXY(value.f1 + _ownerBaseX, value.f2 + _ownerBaseY); - else if (value.b1) - item.target.x = value.f1 + _ownerBaseX; - else - item.target.y = value.f2 + _ownerBaseY; - } - else - { - if (value.b3) //position in percent - { - if (value.b1 && value.b2) - item.target.SetXY(value.f1 * _owner.width, value.f2 * _owner.height); - else if (value.b1) - item.target.x = value.f1 * _owner.width; - else if (value.b2) - item.target.y = value.f2 * _owner.height; - } - else - { - if (value.b1 && value.b2) - item.target.SetXY(value.f1, value.f2); - else if (value.b1) - item.target.x = value.f1; - else if (value.b2) - item.target.y = value.f2; - } - } - if (invalidateBatchingEveryFrame) - _owner.InvalidateBatchingState(true); - } - break; - - case TransitionActionType.Size: - { - TValue value = (TValue)item.value; - if (!value.b1) - value.f1 = item.target.width; - if (!value.b2) - value.f2 = item.target.height; - item.target.SetSize(value.f1, value.f2); - if (invalidateBatchingEveryFrame) - _owner.InvalidateBatchingState(true); - } - break; - - case TransitionActionType.Pivot: - item.target.SetPivot(((TValue)item.value).f1, ((TValue)item.value).f2, item.target.pivotAsAnchor); - if (invalidateBatchingEveryFrame) - _owner.InvalidateBatchingState(true); - break; - - case TransitionActionType.Alpha: - item.target.alpha = ((TValue)item.value).f1; - break; - - case TransitionActionType.Rotation: - item.target.rotation = ((TValue)item.value).f1; - if (invalidateBatchingEveryFrame) - _owner.InvalidateBatchingState(true); - break; - - case TransitionActionType.Scale: - item.target.SetScale(((TValue)item.value).f1, ((TValue)item.value).f2); - if (invalidateBatchingEveryFrame) - _owner.InvalidateBatchingState(true); - break; - - case TransitionActionType.Skew: - item.target.skew = ((TValue)item.value).vec2; - if (invalidateBatchingEveryFrame) - _owner.InvalidateBatchingState(true); - break; - - case TransitionActionType.Color: - ((IColorGear)item.target).color = ((TValue)item.value).color; - break; - - case TransitionActionType.Animation: - { - TValue_Animation value = (TValue_Animation)item.value; - if (value.frame >= 0) - ((IAnimationGear)item.target).frame = value.frame; - ((IAnimationGear)item.target).playing = value.playing; - ((IAnimationGear)item.target).timeScale = _timeScale; - ((IAnimationGear)item.target).ignoreEngineTimeScale = _ignoreEngineTimeScale; - if (value.animationName != null) - ((GLoader3D)item.target).animationName = value.animationName; - if (value.skinName != null) - ((GLoader3D)item.target).skinName = value.skinName; - } - break; - - case TransitionActionType.Visible: - item.target.visible = ((TValue_Visible)item.value).visible; - break; - - case TransitionActionType.Shake: - { - TValue_Shake value = (TValue_Shake)item.value; - item.target.SetXY(item.target.x - value.lastOffset.x + value.offset.x, item.target.y - value.lastOffset.y + value.offset.y); - value.lastOffset = value.offset; - - if (invalidateBatchingEveryFrame) - _owner.InvalidateBatchingState(true); - } - break; - - case TransitionActionType.Transition: - if (_playing) - { - TValue_Transition value = (TValue_Transition)item.value; - if (value.trans != null) - { - _totalTasks++; - - float startTime = _startTime > item.time ? (_startTime - item.time) : 0; - float endTime = _endTime >= 0 ? (_endTime - item.time) : -1; - if (value.stopTime >= 0 && (endTime < 0 || endTime > value.stopTime)) - endTime = value.stopTime; - value.trans.timeScale = _timeScale; - value.trans.ignoreEngineTimeScale = _ignoreEngineTimeScale; - value.trans._Play(value.playTimes, 0, startTime, endTime, value.playCompleteDelegate, _reversed); - } - } - break; - - case TransitionActionType.Sound: - if (_playing && item.time >= _startTime) - { - TValue_Sound value = (TValue_Sound)item.value; - if (value.audioClip == null) - { - if (UIConfig.soundLoader == null || value.sound.StartsWith(UIPackage.URL_PREFIX)) - value.audioClip = UIPackage.GetItemAssetByURL(value.sound) as NAudioClip; - else - value.audioClip = UIConfig.soundLoader(value.sound); - } - - if (value.audioClip != null && value.audioClip.nativeClip != null) - Stage.inst.PlayOneShotSound(value.audioClip.nativeClip, value.volume); - } - break; - - case TransitionActionType.ColorFilter: - { - TValue value = (TValue)item.value; - ColorFilter cf = item.target.filter as ColorFilter; - if (cf == null) - { - cf = new ColorFilter(); - item.target.filter = cf; - } - else - cf.Reset(); - - cf.AdjustBrightness(value.f1); - cf.AdjustContrast(value.f2); - cf.AdjustSaturation(value.f3); - cf.AdjustHue(value.f4); - } - break; - - case TransitionActionType.Text: - item.target.text = ((TValue_Text)item.value).text; - break; - - case TransitionActionType.Icon: - item.target.icon = ((TValue_Text)item.value).text; - break; - } - - item.target._gearLocked = false; - } - - public void Setup(ByteBuffer buffer) - { - this.name = buffer.ReadS(); - _options = buffer.ReadInt(); - _autoPlay = buffer.ReadBool(); - _autoPlayTimes = buffer.ReadInt(); - _autoPlayDelay = buffer.ReadFloat(); - - int cnt = buffer.ReadShort(); - _items = new TransitionItem[cnt]; - for (int i = 0; i < cnt; i++) - { - int dataLen = buffer.ReadShort(); - int curPos = buffer.position; - - buffer.Seek(curPos, 0); - - TransitionItem item = new TransitionItem((TransitionActionType)buffer.ReadByte()); - _items[i] = item; - - item.time = buffer.ReadFloat(); - int targetId = buffer.ReadShort(); - if (targetId < 0) - item.targetId = string.Empty; - else - item.targetId = _owner.GetChildAt(targetId).id; - item.label = buffer.ReadS(); - - if (buffer.ReadBool()) - { - buffer.Seek(curPos, 1); - - item.tweenConfig = new TweenConfig(); - item.tweenConfig.duration = buffer.ReadFloat(); - if (item.time + item.tweenConfig.duration > _totalDuration) - _totalDuration = item.time + item.tweenConfig.duration; - item.tweenConfig.easeType = (EaseType)buffer.ReadByte(); - item.tweenConfig.repeat = buffer.ReadInt(); - item.tweenConfig.yoyo = buffer.ReadBool(); - item.tweenConfig.endLabel = buffer.ReadS(); - - buffer.Seek(curPos, 2); - - DecodeValue(item, buffer, item.tweenConfig.startValue); - - buffer.Seek(curPos, 3); - - DecodeValue(item, buffer, item.tweenConfig.endValue); - - if (buffer.version >= 2) - { - var pts = buffer.ReadPath(); - if (pts.Count > 0) - { - item.tweenConfig.path = new GPath(); - item.tweenConfig.path.Create(pts); - } - } - - if (buffer.version >= 4 && item.tweenConfig.easeType == EaseType.Custom) - { - var pts = buffer.ReadPath(); - if (pts.Count > 0) - { - item.tweenConfig.customEase = new CustomEase(); - item.tweenConfig.customEase.Create(pts); - } - } - } - else - { - if (item.time > _totalDuration) - _totalDuration = item.time; - - buffer.Seek(curPos, 2); - - DecodeValue(item, buffer, item.value); - } - - buffer.position = curPos + dataLen; - } - } - - void DecodeValue(TransitionItem item, ByteBuffer buffer, object value) - { - switch (item.type) - { - case TransitionActionType.XY: - case TransitionActionType.Size: - case TransitionActionType.Pivot: - case TransitionActionType.Skew: - { - TValue tvalue = (TValue)value; - tvalue.b1 = buffer.ReadBool(); - tvalue.b2 = buffer.ReadBool(); - tvalue.f1 = buffer.ReadFloat(); - tvalue.f2 = buffer.ReadFloat(); - - if (buffer.version >= 2 && item.type == TransitionActionType.XY) - tvalue.b3 = buffer.ReadBool(); //percent - } - break; - - case TransitionActionType.Alpha: - case TransitionActionType.Rotation: - ((TValue)value).f1 = buffer.ReadFloat(); - break; - - case TransitionActionType.Scale: - ((TValue)value).f1 = buffer.ReadFloat(); - ((TValue)value).f2 = buffer.ReadFloat(); - break; - - case TransitionActionType.Color: - ((TValue)value).color = buffer.ReadColor(); - break; - - case TransitionActionType.Animation: - ((TValue_Animation)value).playing = buffer.ReadBool(); - ((TValue_Animation)value).frame = buffer.ReadInt(); - if (buffer.version >= 6) - { - ((TValue_Animation)value).animationName = buffer.ReadS(); - ((TValue_Animation)value).skinName = buffer.ReadS(); - } - break; - - case TransitionActionType.Visible: - ((TValue_Visible)value).visible = buffer.ReadBool(); - break; - - case TransitionActionType.Sound: - ((TValue_Sound)value).sound = buffer.ReadS(); - ((TValue_Sound)value).volume = buffer.ReadFloat(); - break; - - case TransitionActionType.Transition: - ((TValue_Transition)value).transName = buffer.ReadS(); - ((TValue_Transition)value).playTimes = buffer.ReadInt(); - ((TValue_Transition)value).playCompleteDelegate = () => { OnPlayTransCompleted(item); }; - break; - - case TransitionActionType.Shake: - ((TValue_Shake)value).amplitude = buffer.ReadFloat(); - ((TValue_Shake)value).duration = buffer.ReadFloat(); - break; - - case TransitionActionType.ColorFilter: - { - TValue tvalue = (TValue)value; - tvalue.f1 = buffer.ReadFloat(); - tvalue.f2 = buffer.ReadFloat(); - tvalue.f3 = buffer.ReadFloat(); - tvalue.f4 = buffer.ReadFloat(); - } - break; - - case TransitionActionType.Text: - case TransitionActionType.Icon: - ((TValue_Text)value).text = buffer.ReadS(); - break; - } - } - } - - class TransitionItem - { - public float time; - public string targetId; - public TransitionActionType type; - public TweenConfig tweenConfig; - public string label; - public object value; - public TransitionHook hook; - - //running properties - public GTweener tweener; - public GObject target; - public uint displayLockToken; - - public TransitionItem(TransitionActionType type) - { - this.type = type; - - switch (type) - { - case TransitionActionType.XY: - case TransitionActionType.Size: - case TransitionActionType.Scale: - case TransitionActionType.Pivot: - case TransitionActionType.Skew: - case TransitionActionType.Alpha: - case TransitionActionType.Rotation: - case TransitionActionType.Color: - case TransitionActionType.ColorFilter: - value = new TValue(); - break; - - case TransitionActionType.Animation: - value = new TValue_Animation(); - break; - - case TransitionActionType.Shake: - value = new TValue_Shake(); - break; - - case TransitionActionType.Sound: - value = new TValue_Sound(); - break; - - case TransitionActionType.Transition: - value = new TValue_Transition(); - break; - - case TransitionActionType.Visible: - value = new TValue_Visible(); - break; - - case TransitionActionType.Text: - case TransitionActionType.Icon: - value = new TValue_Text(); - break; - } - } - } - - class TweenConfig - { - public float duration; - public EaseType easeType; - public CustomEase customEase; - public int repeat; - public bool yoyo; - - public TValue startValue; - public TValue endValue; - - public string endLabel; - public TransitionHook endHook; - - public GPath path; - - public TweenConfig() - { - easeType = EaseType.QuadOut; - startValue = new TValue(); - endValue = new TValue(); - } - } - - class TValue_Visible - { - public bool visible; - } - - class TValue_Animation - { - public int frame; - public bool playing; - public bool flag; - public string animationName; - public string skinName; - } - - class TValue_Sound - { - public string sound; - public float volume; - public NAudioClip audioClip; - } - - class TValue_Transition - { - public string transName; - public int playTimes; - public Transition trans; - public PlayCompleteCallback playCompleteDelegate; - public float stopTime; - } - - class TValue_Shake - { - public float amplitude; - public float duration; - public Vector2 lastOffset; - public Vector2 offset; - } - - class TValue_Text - { - public string text; - } - - class TValue - { - public float f1; - public float f2; - public float f3; - public float f4; - public bool b1; - public bool b2; - public bool b3; - - public TValue() - { - b1 = true; - b2 = true; - } - - public void Copy(TValue source) - { - this.f1 = source.f1; - this.f2 = source.f2; - this.f3 = source.f3; - this.f4 = source.f4; - this.b1 = source.b1; - this.b2 = source.b2; - } - - public Vector2 vec2 - { - get { return new Vector2(f1, f2); } - set - { - f1 = value.x; - f2 = value.y; - } - } - - public Vector4 vec4 - { - get { return new Vector4(f1, f2, f3, f4); } - set - { - f1 = value.x; - f2 = value.y; - f3 = value.z; - f4 = value.w; - } - } - - public Color color - { - get { return new Color(f1, f2, f3, f4); } - set - { - f1 = value.r; - f2 = value.g; - f3 = value.b; - f4 = value.a; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs.meta deleted file mode 100644 index 05e4b3e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5b4b16745502a0a428467b2981a2a786 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs b/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs deleted file mode 100644 index 1b441fe..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs +++ /dev/null @@ -1,253 +0,0 @@ -using System.Collections.Generic; -using FairyGUI.Utils; - -namespace FairyGUI -{ - public class TranslationHelper - { - public static Dictionary> strings; - - public static void LoadFromXML(XML source) - { - strings = new Dictionary>(); - XMLList.Enumerator et = source.GetEnumerator("string"); - while (et.MoveNext()) - { - XML cxml = et.Current; - string key = cxml.GetAttribute("name"); - string text = cxml.text; - int i = key.IndexOf("-"); - if (i == -1) - continue; - - string key2 = key.Substring(0, i); - string key3 = key.Substring(i + 1); - Dictionary col; - if (!strings.TryGetValue(key2, out col)) - { - col = new Dictionary(); - strings[key2] = col; - } - col[key3] = text; - } - } - - public static void TranslateComponent(PackageItem item) - { - if (TranslationHelper.strings == null) - return; - - Dictionary strings; - if (!TranslationHelper.strings.TryGetValue(item.owner.id + item.id, out strings)) - return; - - string elementId, value; - ByteBuffer buffer = item.rawData; - - buffer.Seek(0, 2); - - int childCount = buffer.ReadShort(); - for (int i = 0; i < childCount; i++) - { - int dataLen = buffer.ReadShort(); - int curPos = buffer.position; - - buffer.Seek(curPos, 0); - - ObjectType baseType = (ObjectType)buffer.ReadByte(); - ObjectType type = baseType; - buffer.Skip(4); - elementId = buffer.ReadS(); - - if (type == ObjectType.Component) - { - if (buffer.Seek(curPos, 6)) - type = (ObjectType)buffer.ReadByte(); - } - - buffer.Seek(curPos, 1); - - if (strings.TryGetValue(elementId + "-tips", out value)) - buffer.WriteS(value); - - buffer.Seek(curPos, 2); - - int gearCnt = buffer.ReadShort(); - for (int j = 0; j < gearCnt; j++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - if (buffer.ReadByte() == 6) //gearText - { - buffer.Skip(2);//controller - int valueCnt = buffer.ReadShort(); - for (int k = 0; k < valueCnt; k++) - { - string page = buffer.ReadS(); - if (page != null) - { - if (strings.TryGetValue(elementId + "-texts_" + k, out value)) - buffer.WriteS(value); - else - buffer.Skip(2); - } - } - - if (buffer.ReadBool() && strings.TryGetValue(elementId + "-texts_def", out value)) - buffer.WriteS(value); - } - - buffer.position = nextPos; - } - - if (baseType == ObjectType.Component && buffer.version >= 2) - { - buffer.Seek(curPos, 4); - - buffer.Skip(2); //pageController - - buffer.Skip(4 * buffer.ReadShort()); - - int cpCount = buffer.ReadShort(); - for (int k = 0; k < cpCount; k++) - { - string target = buffer.ReadS(); - int propertyId = buffer.ReadShort(); - if (propertyId == 0 && strings.TryGetValue(elementId + "-cp-" + target, out value)) - buffer.WriteS(value); - else - buffer.Skip(2); - } - } - - switch (type) - { - case ObjectType.Text: - case ObjectType.RichText: - case ObjectType.InputText: - { - if (strings.TryGetValue(elementId, out value)) - { - buffer.Seek(curPos, 6); - buffer.WriteS(value); - } - if (strings.TryGetValue(elementId + "-prompt", out value)) - { - buffer.Seek(curPos, 4); - buffer.WriteS(value); - } - break; - } - - case ObjectType.List: - case ObjectType.Tree: - { - buffer.Seek(curPos, 8); - buffer.Skip(2); - int itemCount = buffer.ReadShort(); - for (int j = 0; j < itemCount; j++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - buffer.Skip(2); //url - if (type == ObjectType.Tree) - buffer.Skip(2); - - //title - if (strings.TryGetValue(elementId + "-" + j, out value)) - buffer.WriteS(value); - else - buffer.Skip(2); - - //selected title - if (strings.TryGetValue(elementId + "-" + j + "-0", out value)) - buffer.WriteS(value); - else - buffer.Skip(2); - - if (buffer.version >= 2) - { - buffer.Skip(6); - buffer.Skip(buffer.ReadShort() * 4);//controllers - - int cpCount = buffer.ReadShort(); - for (int k = 0; k < cpCount; k++) - { - string target = buffer.ReadS(); - int propertyId = buffer.ReadShort(); - if (propertyId == 0 && strings.TryGetValue(elementId + "-" + j + "-" + target, out value)) - buffer.WriteS(value); - else - buffer.Skip(2); - } - } - - buffer.position = nextPos; - } - break; - } - - case ObjectType.Label: - { - if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) - { - if (strings.TryGetValue(elementId, out value)) - buffer.WriteS(value); - else - buffer.Skip(2); - - buffer.Skip(2); - if (buffer.ReadBool()) - buffer.Skip(4); - buffer.Skip(4); - if (buffer.ReadBool() && strings.TryGetValue(elementId + "-prompt", out value)) - buffer.WriteS(value); - } - break; - } - - case ObjectType.Button: - { - if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) - { - if (strings.TryGetValue(elementId, out value)) - buffer.WriteS(value); - else - buffer.Skip(2); - if (strings.TryGetValue(elementId + "-0", out value)) - buffer.WriteS(value); - } - break; - } - - case ObjectType.ComboBox: - { - if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) - { - int itemCount = buffer.ReadShort(); - for (int j = 0; j < itemCount; j++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - if (strings.TryGetValue(elementId + "-" + j, out value)) - buffer.WriteS(value); - - buffer.position = nextPos; - } - - if (strings.TryGetValue(elementId, out value)) - buffer.WriteS(value); - } - - break; - } - } - - buffer.position = curPos + dataLen; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs.meta deleted file mode 100644 index 5f66f49..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3efa1901e4c7ea44d9573c70d21e49f5 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Tree.meta deleted file mode 100644 index a011b0b..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Tree.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4e3a2d82c02599a4f926286440678b58 -folderAsset: yes -timeCreated: 1467555752 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs deleted file mode 100644 index 686ddfd..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs +++ /dev/null @@ -1,348 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace FairyGUI -{ - /// - /// - /// - [Obsolete("Use GTree and GTreeNode instead")] - public class TreeNode - { - /// - /// - /// - public object data; - - /// - /// - /// - public TreeNode parent { get; private set; } - - /// - /// - /// - public TreeView tree { get; private set; } - - /// - /// - /// - public GComponent cell { get; internal set; } - - /// - /// - /// - public int level { get; private set; } - - private List _children; - private bool _expanded; - - /// - /// - /// - /// - public TreeNode(bool hasChild) - { - if (hasChild) - _children = new List(); - } - - /// - /// - /// - public bool expanded - { - get - { - return _expanded; - } - - set - { - if (_children == null) - return; - - if (_expanded != value) - { - _expanded = value; - if (tree != null) - { - if (_expanded) - tree.AfterExpanded(this); - else - tree.AfterCollapsed(this); - } - } - } - } - - /// - /// - /// - public bool isFolder - { - get { return _children != null; } - } - - /// - /// - /// - public string text - { - get - { - if (cell != null) - return cell.text; - else - return null; - } - } - - /// - /// - /// - /// - /// - public TreeNode AddChild(TreeNode child) - { - AddChildAt(child, _children.Count); - return child; - } - - /// - /// - /// - /// - /// - /// - public TreeNode AddChildAt(TreeNode child, int index) - { - if (child == null) - throw new Exception("child is null"); - - int numChildren = _children.Count; - - if (index >= 0 && index <= numChildren) - { - if (child.parent == this) - { - SetChildIndex(child, index); - } - else - { - if (child.parent != null) - child.parent.RemoveChild(child); - - int cnt = _children.Count; - if (index == cnt) - _children.Add(child); - else - _children.Insert(index, child); - - child.parent = this; - child.level = this.level + 1; - child.SetTree(this.tree); - if (this.cell != null && this.cell.parent != null && _expanded) - tree.AfterInserted(child); - } - - return child; - } - else - { - throw new Exception("Invalid child index"); - } - } - - /// - /// - /// - /// - /// - public TreeNode RemoveChild(TreeNode child) - { - int childIndex = _children.IndexOf(child); - if (childIndex != -1) - { - RemoveChildAt(childIndex); - } - return child; - } - - /// - /// - /// - /// - /// - public TreeNode RemoveChildAt(int index) - { - if (index >= 0 && index < numChildren) - { - TreeNode child = _children[index]; - _children.RemoveAt(index); - - child.parent = null; - if (tree != null) - { - child.SetTree(null); - tree.AfterRemoved(child); - } - - return child; - } - else - { - throw new Exception("Invalid child index"); - } - } - - /// - /// - /// - /// - /// - public void RemoveChildren(int beginIndex = 0, int endIndex = -1) - { - if (endIndex < 0 || endIndex >= numChildren) - endIndex = numChildren - 1; - - for (int i = beginIndex; i <= endIndex; ++i) - RemoveChildAt(beginIndex); - } - - /// - /// - /// - /// - /// - public TreeNode GetChildAt(int index) - { - if (index >= 0 && index < numChildren) - return _children[index]; - else - throw new Exception("Invalid child index"); - } - - /// - /// - /// - /// - /// - public int GetChildIndex(TreeNode child) - { - return _children.IndexOf(child); - } - - /// - /// - /// - /// - public TreeNode GetPrevSibling() - { - if (parent == null) - return null; - - int i = parent._children.IndexOf(this); - if (i <= 0) - return null; - - return parent._children[i - 1]; - } - - /// - /// - /// - /// - public TreeNode GetNextSibling() - { - if (parent == null) - return null; - - int i = parent._children.IndexOf(this); - if (i < 0 || i >= parent._children.Count - 1) - return null; - - return parent._children[i + 1]; - } - - /// - /// - /// - /// - /// - public void SetChildIndex(TreeNode child, int index) - { - int oldIndex = _children.IndexOf(child); - if (oldIndex == -1) - throw new Exception("Not a child of this container"); - - int cnt = _children.Count; - if (index < 0) - index = 0; - else if (index > cnt) - index = cnt; - - if (oldIndex == index) - return; - - _children.RemoveAt(oldIndex); - _children.Insert(index, child); - if (this.cell != null && this.cell.parent != null && _expanded) - tree.AfterMoved(child); - } - - /// - /// - /// - /// - /// - public void SwapChildren(TreeNode child1, TreeNode child2) - { - int index1 = _children.IndexOf(child1); - int index2 = _children.IndexOf(child2); - if (index1 == -1 || index2 == -1) - throw new Exception("Not a child of this container"); - SwapChildrenAt(index1, index2); - } - - /// - /// - /// - /// - /// - public void SwapChildrenAt(int index1, int index2) - { - TreeNode child1 = _children[index1]; - TreeNode child2 = _children[index2]; - - SetChildIndex(child1, index2); - SetChildIndex(child2, index1); - } - - /// - /// - /// - public int numChildren - { - get { return (null == _children) ? 0 : _children.Count; } - } - - internal void SetTree(TreeView value) - { - tree = value; - if (tree != null && tree.treeNodeWillExpand != null && _expanded) - tree.treeNodeWillExpand(this, true); - - if (_children != null) - { - int cnt = _children.Count; - for (int i = 0; i < cnt; i++) - { - TreeNode node = _children[i]; - node.level = level + 1; - node.SetTree(value); - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs.meta deleted file mode 100644 index 9ea2e81..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 6bfc19586c7b07e4b9193f658c390727 -timeCreated: 1467555753 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs deleted file mode 100644 index 17bdc0d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs +++ /dev/null @@ -1,490 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace FairyGUI -{ - /// - /// - /// - [Obsolete("Use GTree and GTreeNode instead")] - public class TreeView : EventDispatcher - { - /// - /// TreeView使用的List对象 - /// - public GList list { get; private set; } - - /// - /// TreeView的顶层节点,这是个虚拟节点,也就是他不会显示出来。 - /// - public TreeNode root { get; private set; } - - /// - /// TreeView每级的缩进,单位像素。 - /// - public int indent; - - public delegate GComponent TreeNodeCreateCellDelegate(TreeNode node); - public delegate void TreeNodeRenderDelegate(TreeNode node); - public delegate void TreeNodeWillExpandDelegate(TreeNode node, bool expand); - - /// - /// 当TreeNode需要创建对象的显示对象时回调 - /// - public TreeNodeCreateCellDelegate treeNodeCreateCell; - - /// - /// 当TreeNode需要更新时回调 - /// - public TreeNodeRenderDelegate treeNodeRender; - - /// - /// 当TreeNode即将展开或者收缩时回调。可以在回调中动态增加子节点。 - /// - public TreeNodeWillExpandDelegate treeNodeWillExpand; - - /// - /// 点击任意TreeNode时触发 - /// - public EventListener onClickNode { get; private set; } - - /// - /// 右键点击任意TreeNode时触发 - /// - public EventListener onRightClickNode { get; private set; } - - /// - /// - /// - /// - public TreeView(GList list) - { - this.list = list; - list.onClickItem.Add(__clickItem); - list.onRightClickItem.Add(__clickItem); - list.RemoveChildrenToPool(); - - root = new TreeNode(true); - root.SetTree(this); - root.cell = list; - root.expanded = true; - - indent = 30; - - onClickNode = new EventListener(this, "onClickNode"); - onRightClickNode = new EventListener(this, "onRightClickNode"); - } - - /// - /// - /// - /// - public TreeNode GetSelectedNode() - { - if (list.selectedIndex != -1) - return (TreeNode)list.GetChildAt(list.selectedIndex).data; - else - return null; - } - - /// - /// - /// - /// - public List GetSelection() - { - List sels = list.GetSelection(); - int cnt = sels.Count; - List ret = new List(); - for (int i = 0; i < cnt; i++) - { - TreeNode node = (TreeNode)list.GetChildAt(sels[i]).data; - ret.Add(node); - } - return ret; - } - - /// - /// - /// - /// - /// - public void AddSelection(TreeNode node, bool scrollItToView = false) - { - TreeNode parentNode = node.parent; - while (parentNode != null && parentNode != root) - { - parentNode.expanded = true; - parentNode = parentNode.parent; - } - list.AddSelection(list.GetChildIndex(node.cell), scrollItToView); - } - - /// - /// - /// - /// - public void RemoveSelection(TreeNode node) - { - list.RemoveSelection(list.GetChildIndex(node.cell)); - } - - /// - /// - /// - public void ClearSelection() - { - list.ClearSelection(); - } - - /// - /// - /// - /// - /// - public int GetNodeIndex(TreeNode node) - { - return list.GetChildIndex(node.cell); - } - - /// - /// - /// - /// - public void UpdateNode(TreeNode node) - { - if (node.cell == null) - return; - - if (treeNodeRender != null) - treeNodeRender(node); - } - - /// - /// - /// - /// - public void UpdateNodes(List nodes) - { - int cnt = nodes.Count; - for (int i = 0; i < cnt; i++) - { - TreeNode node = nodes[i]; - if (node.cell == null) - return; - - if (treeNodeRender != null) - treeNodeRender(node); - } - } - - /// - /// - /// - /// - public void ExpandAll(TreeNode folderNode) - { - folderNode.expanded = true; - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - TreeNode node = folderNode.GetChildAt(i); - if (node.isFolder) - ExpandAll(node); - } - } - - /// - /// - /// - /// - public void CollapseAll(TreeNode folderNode) - { - if (folderNode != root) - folderNode.expanded = false; - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - TreeNode node = folderNode.GetChildAt(i); - if (node.isFolder) - CollapseAll(node); - } - } - - /// - /// - /// - /// - void CreateCell(TreeNode node) - { - if (treeNodeCreateCell != null) - node.cell = treeNodeCreateCell(node); - else - node.cell = list.itemPool.GetObject(list.defaultItem) as GComponent; - if (node.cell == null) - throw new Exception("Unable to create tree cell"); - node.cell.data = node; - - GObject indentObj = node.cell.GetChild("indent"); - if (indentObj != null) - indentObj.width = (node.level - 1) * indent; - - GButton expandButton = (GButton)node.cell.GetChild("expandButton"); - if (expandButton != null) - { - if (node.isFolder) - { - expandButton.visible = true; - expandButton.onClick.Add(__clickExpandButton); - expandButton.data = node; - expandButton.selected = node.expanded; - } - else - expandButton.visible = false; - } - - if (treeNodeRender != null) - treeNodeRender(node); - } - - /// - /// - /// - /// - internal void AfterInserted(TreeNode node) - { - CreateCell(node); - - int index = GetInsertIndexForNode(node); - list.AddChildAt(node.cell, index); - if (treeNodeRender != null) - treeNodeRender(node); - - if (node.isFolder && node.expanded) - CheckChildren(node, index); - } - - /// - /// - /// - /// - /// - int GetInsertIndexForNode(TreeNode node) - { - TreeNode prevNode = node.GetPrevSibling(); - if (prevNode == null) - prevNode = node.parent; - int insertIndex = list.GetChildIndex(prevNode.cell) + 1; - int myLevel = node.level; - int cnt = list.numChildren; - for (int i = insertIndex; i < cnt; i++) - { - TreeNode testNode = (TreeNode)list.GetChildAt(i).data; - if (testNode.level <= myLevel) - break; - - insertIndex++; - } - - return insertIndex; - } - - /// - /// - /// - /// - internal void AfterRemoved(TreeNode node) - { - RemoveNode(node); - } - - /// - /// - /// - /// - internal void AfterExpanded(TreeNode node) - { - if (node != root && treeNodeWillExpand != null) - treeNodeWillExpand(node, true); - - if (node.cell == null) - return; - - if (node != root) - { - if (treeNodeRender != null) - treeNodeRender(node); - - GButton expandButton = (GButton)node.cell.GetChild("expandButton"); - if (expandButton != null) - expandButton.selected = true; - } - - if (node.cell.parent != null) - CheckChildren(node, list.GetChildIndex(node.cell)); - } - - /// - /// - /// - /// - internal void AfterCollapsed(TreeNode node) - { - if (node != root && treeNodeWillExpand != null) - treeNodeWillExpand(node, false); - - if (node.cell == null) - return; - - if (node != root) - { - if (treeNodeRender != null) - treeNodeRender(node); - - GButton expandButton = (GButton)node.cell.GetChild("expandButton"); - if (expandButton != null) - expandButton.selected = false; - } - - if (node.cell.parent != null) - HideFolderNode(node); - } - - /// - /// - /// - /// - internal void AfterMoved(TreeNode node) - { - if (!node.isFolder) - list.RemoveChild(node.cell); - else - HideFolderNode(node); - - int index = GetInsertIndexForNode(node); - list.AddChildAt(node.cell, index); - - if (node.isFolder && node.expanded) - CheckChildren(node, index); - } - - /// - /// - /// - /// - /// - /// - int CheckChildren(TreeNode folderNode, int index) - { - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - index++; - TreeNode node = folderNode.GetChildAt(i); - if (node.cell == null) - CreateCell(node); - - if (node.cell.parent == null) - list.AddChildAt(node.cell, index); - - if (node.isFolder && node.expanded) - index = CheckChildren(node, index); - } - - return index; - } - - /// - /// - /// - /// - void HideFolderNode(TreeNode folderNode) - { - int cnt = folderNode.numChildren; - for (int i = 0; i < cnt; i++) - { - TreeNode node = folderNode.GetChildAt(i); - if (node.cell != null) - { - if (node.cell.parent != null) - list.RemoveChild(node.cell); - list.itemPool.ReturnObject(node.cell); - node.cell.data = null; - node.cell = null; - } - if (node.isFolder && node.expanded) - HideFolderNode(node); - } - } - - /// - /// - /// - /// - void RemoveNode(TreeNode node) - { - if (node.cell != null) - { - if (node.cell.parent != null) - list.RemoveChild(node.cell); - list.itemPool.ReturnObject(node.cell); - node.cell.data = null; - node.cell = null; - } - - if (node.isFolder) - { - int cnt = node.numChildren; - for (int i = 0; i < cnt; i++) - { - TreeNode node2 = node.GetChildAt(i); - RemoveNode(node2); - } - } - } - - void __clickExpandButton(EventContext context) - { - context.StopPropagation(); - - GButton expandButton = (GButton)context.sender; - TreeNode node = (TreeNode)expandButton.parent.data; - if (list.scrollPane != null) - { - float posY = list.scrollPane.posY; - if (expandButton.selected) - node.expanded = true; - else - node.expanded = false; - list.scrollPane.posY = posY; - list.scrollPane.ScrollToView(node.cell); - } - else - { - if (expandButton.selected) - node.expanded = true; - else - node.expanded = false; - } - } - - void __clickItem(EventContext context) - { - float posY = 0; - if (list.scrollPane != null) - posY = list.scrollPane.posY; - - TreeNode node = (TreeNode)((GObject)context.data).data; - if (context.type == list.onRightClickItem.type) - onRightClickNode.Call(node); - else - onClickNode.Call(node); - - if (list.scrollPane != null) - { - list.scrollPane.posY = posY; - list.scrollPane.ScrollToView(node.cell); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs.meta deleted file mode 100644 index df9c2cb..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5a8a82de90eec564d9b40a4192d27f3d -timeCreated: 1467555753 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs deleted file mode 100644 index 24081f9..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs +++ /dev/null @@ -1,470 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// Global configs. These options should be set before any UI construction. - /// - [AddComponentMenu("FairyGUI/UI Config")] - public class UIConfig : MonoBehaviour - { - /// - /// Dynamic Font Support. - /// 4.x: Put the xxx.ttf into /Resources or /Resources/Fonts, and set defaultFont="xxx". - /// 5.x: set defaultFont to system font name(or names joint with comma). e.g. defaultFont="Microsoft YaHei, SimHei" - /// - public static string defaultFont = ""; - - [Obsolete("No use anymore")] - public static bool renderingTextBrighterOnDesktop = true; - - /// - /// Resource using in Window.ShowModalWait for locking the window. - /// - public static string windowModalWaiting; - - /// - /// Resource using in GRoot.ShowModalWait for locking the screen. - /// - public static string globalModalWaiting; - - /// - /// When a modal window is in front, the background becomes dark. - /// - public static Color modalLayerColor = new Color(0f, 0f, 0f, 0.4f); - - /// - /// Default button click sound. - /// - public static NAudioClip buttonSound; - - /// - /// Default button click sound volume. - /// - public static float buttonSoundVolumeScale = 1f; - - /// - /// Resource url of horizontal scrollbar - /// - public static string horizontalScrollBar; - - /// - /// Resource url of vertical scrollbar - /// - public static string verticalScrollBar; - - /// - /// Scrolling step in pixels - /// 当调用ScrollPane.scrollUp/Down/Left/Right时,或者点击滚动条的上下箭头时,滑动的距离。 - /// 鼠标滚轮触发一次滚动的距离设定为defaultScrollStep*2 - /// - public static float defaultScrollStep = 25; - - /// - /// Deceleration ratio of scrollpane when its in touch dragging. - /// 当手指拖动并释放滚动区域后,内容会滑动一定距离后停下,这个速率就是减速的速率。 - /// 越接近1,减速越慢,意味着滑动的时间和距离更长。 - /// 这个是全局设置,也可以通过ScrollPane.decelerationRate进行个性设置。 - /// - public static float defaultScrollDecelerationRate = 0.967f; - - /// - /// Scrollbar display mode. Recommended 'Auto' for mobile and 'Visible' for web. - /// - public static ScrollBarDisplayType defaultScrollBarDisplay = ScrollBarDisplayType.Default; - - /// - /// Allow dragging anywhere in container to scroll. - /// - public static bool defaultScrollTouchEffect = true; - - /// - /// The "rebound" effect in the scolling container. - /// - public static bool defaultScrollBounceEffect = true; - - /// - /// When the scrolling container is set to "snap to the item", the rolling distance threshold of which item is close to is determined. - /// - public static float defaultScrollSnappingThreshold = 0.5f; - - /// - /// When the scrolling container is set to "page mode", it determines the scrolling distance threshold to which page to turn. - /// - public static float defaultScrollPagingThreshold = 0.3f; - - /// - /// Resources url of PopupMenu. - /// - public static string popupMenu; - - /// - /// Resource url of menu seperator. - /// - public static string popupMenu_seperator; - - /// - /// In case of failure of loading content for GLoader, use this sign to indicate an error. - /// - public static string loaderErrorSign; - - /// - /// Resource url of tooltips. - /// - public static string tooltipsWin; - - /// - /// The number of visible items in ComboBox. - /// - public static int defaultComboBoxVisibleItemCount = 10; - - /// - /// Pixel offsets of finger to trigger scrolling - /// - public static int touchScrollSensitivity = 20; - - /// - /// Pixel offsets of finger to trigger dragging - /// - public static int touchDragSensitivity = 10; - - /// - /// Pixel offsets of mouse pointer to trigger dragging. - /// - public static int clickDragSensitivity = 2; - - /// - /// Allow softness on top or left side for scrollpane. - /// - public static bool allowSoftnessOnTopOrLeftSide = true; - - /// - /// When click the window, brings to front automatically. - /// - public static bool bringWindowToFrontOnClick = true; - - /// - /// - /// - public static float inputCaretSize = 1; - - /// - /// - /// - public static Color inputHighlightColor = new Color32(255, 223, 141, 128); - - /// - /// - /// - public static float frameTimeForAsyncUIConstruction = 0.002f; - - /// - /// if RenderTexture using in painting mode has depth support. - /// - public static bool depthSupportForPaintingMode = true; - - /// - /// Indicates whether to draw extra 4 or 8 times to achieve stroke effect for textfield. - /// If it is true, that is the 8 times, otherwise it is the 4 times. - /// - public static bool enhancedTextOutlineEffect = false; - - [Obsolete("No use anymore.")] - public static VertAlignType richTextRowVerticalAlign = VertAlignType.Bottom; - - /// - /// Suggest to enable it on low dpi (e.g. 96dpi) screens. - /// - public static bool makePixelPerfect = false; - - public enum ConfigKey - { - DefaultFont, - ButtonSound, - ButtonSoundVolumeScale, - HorizontalScrollBar, - VerticalScrollBar, - DefaultScrollStep, - DefaultScrollBarDisplay, - DefaultScrollTouchEffect, - DefaultScrollBounceEffect, - TouchScrollSensitivity, - WindowModalWaiting, - GlobalModalWaiting, - PopupMenu, - PopupMenu_seperator, - LoaderErrorSign, - TooltipsWin, - DefaultComboBoxVisibleItemCount, - TouchDragSensitivity, - ClickDragSensitivity, - ModalLayerColor, - RenderingTextBrighterOnDesktop, - AllowSoftnessOnTopOrLeftSide, - InputCaretSize, - InputHighlightColor, - EnhancedTextOutlineEffect, - DepthSupportForPaintingMode, - RichTextRowVerticalAlign, - Branch, - - PleaseSelect = 100 - } - - [Serializable] - public class ConfigValue - { - public bool valid; - public string s; - public int i; - public float f; - public bool b; - public Color c; - - public void Reset() - { - valid = false; - s = null; - i = 0; - f = 0; - b = false; - c = Color.black; - } - } - - public List Items = new List(); - public List PreloadPackages = new List(); - - void Awake() - { - if (Application.isPlaying) - { - foreach (string packagePath in PreloadPackages) - { - UIPackage.AddPackage(packagePath); - } - - Load(); - } - } - - public void Load() - { - int cnt = Items.Count; - for (int i = 0; i < cnt; i++) - { - ConfigValue value = Items[i]; - if (!value.valid) - continue; - - switch ((UIConfig.ConfigKey)i) - { - case ConfigKey.ButtonSound: - if (Application.isPlaying) - UIConfig.buttonSound = UIPackage.GetItemAssetByURL(value.s) as NAudioClip; - break; - - case ConfigKey.ButtonSoundVolumeScale: - UIConfig.buttonSoundVolumeScale = value.f; - break; - - case ConfigKey.ClickDragSensitivity: - UIConfig.clickDragSensitivity = value.i; - break; - - case ConfigKey.DefaultComboBoxVisibleItemCount: - UIConfig.defaultComboBoxVisibleItemCount = value.i; - break; - - case ConfigKey.DefaultFont: - UIConfig.defaultFont = value.s; - break; - - case ConfigKey.DefaultScrollBarDisplay: - UIConfig.defaultScrollBarDisplay = (ScrollBarDisplayType)value.i; - break; - - case ConfigKey.DefaultScrollBounceEffect: - UIConfig.defaultScrollBounceEffect = value.b; - break; - - case ConfigKey.DefaultScrollStep: - UIConfig.defaultScrollStep = value.i; - break; - - case ConfigKey.DefaultScrollTouchEffect: - UIConfig.defaultScrollTouchEffect = value.b; - break; - - case ConfigKey.GlobalModalWaiting: - UIConfig.globalModalWaiting = value.s; - break; - - case ConfigKey.HorizontalScrollBar: - UIConfig.horizontalScrollBar = value.s; - break; - - case ConfigKey.LoaderErrorSign: - UIConfig.loaderErrorSign = value.s; - break; - - case ConfigKey.ModalLayerColor: - UIConfig.modalLayerColor = value.c; - break; - - case ConfigKey.PopupMenu: - UIConfig.popupMenu = value.s; - break; - - case ConfigKey.PopupMenu_seperator: - UIConfig.popupMenu_seperator = value.s; - break; - - case ConfigKey.TooltipsWin: - UIConfig.tooltipsWin = value.s; - break; - - case ConfigKey.TouchDragSensitivity: - UIConfig.touchDragSensitivity = value.i; - break; - - case ConfigKey.TouchScrollSensitivity: - UIConfig.touchScrollSensitivity = value.i; - break; - - case ConfigKey.VerticalScrollBar: - UIConfig.verticalScrollBar = value.s; - break; - - case ConfigKey.WindowModalWaiting: - UIConfig.windowModalWaiting = value.s; - break; - - case ConfigKey.AllowSoftnessOnTopOrLeftSide: - UIConfig.allowSoftnessOnTopOrLeftSide = value.b; - break; - - case ConfigKey.InputCaretSize: - UIConfig.inputCaretSize = value.i; - break; - - case ConfigKey.InputHighlightColor: - UIConfig.inputHighlightColor = value.c; - break; - - case ConfigKey.DepthSupportForPaintingMode: - UIConfig.depthSupportForPaintingMode = value.b; - break; - - case ConfigKey.EnhancedTextOutlineEffect: - UIConfig.enhancedTextOutlineEffect = value.b; - break; - - case ConfigKey.Branch: - UIPackage.branch = value.s; - break; - } - } - } - - public static void SetDefaultValue(ConfigKey key, ConfigValue value) - { - switch (key) - { - case ConfigKey.ButtonSoundVolumeScale: - value.f = 1; - break; - - case ConfigKey.ClickDragSensitivity: - value.i = 2; - break; - - case ConfigKey.DefaultComboBoxVisibleItemCount: - value.i = 10; - break; - - case ConfigKey.DefaultScrollBarDisplay: - value.i = (int)ScrollBarDisplayType.Default; - break; - - case ConfigKey.DefaultScrollBounceEffect: - case ConfigKey.DefaultScrollTouchEffect: - value.b = true; - break; - - case ConfigKey.DefaultScrollStep: - value.i = 25; - break; - - case ConfigKey.ModalLayerColor: - value.c = new Color(0f, 0f, 0f, 0.4f); - break; - - case ConfigKey.RenderingTextBrighterOnDesktop: - value.b = true; - break; - - case ConfigKey.TouchDragSensitivity: - value.i = 10; - break; - - case ConfigKey.TouchScrollSensitivity: - value.i = 20; - break; - - case ConfigKey.InputCaretSize: - value.i = 1; - break; - - case ConfigKey.InputHighlightColor: - value.c = new Color32(255, 223, 141, 128); - break; - - case ConfigKey.DepthSupportForPaintingMode: - value.b = false; - break; - - case ConfigKey.Branch: - value.s = ""; - break; - } - } - - public static void ClearResourceRefs() - { - UIConfig.defaultFont = ""; - UIConfig.buttonSound = null; - UIConfig.globalModalWaiting = null; - UIConfig.horizontalScrollBar = null; - UIConfig.loaderErrorSign = null; - UIConfig.popupMenu = null; - UIConfig.popupMenu_seperator = null; - UIConfig.tooltipsWin = null; - UIConfig.verticalScrollBar = null; - UIConfig.windowModalWaiting = null; - UIConfig.soundLoader = null; - } - - public void ApplyModifiedProperties() - { - EMRenderSupport.Reload(); - } - - public delegate NAudioClip SoundLoader(string url); - - /// - /// - /// - public static SoundLoader soundLoader = null; - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - ClearResourceRefs(); - } -#endif - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs.meta deleted file mode 100644 index bffb217..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ace51c3cbb5309547a7029cadaaa20ca -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs deleted file mode 100644 index 1daebb1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs +++ /dev/null @@ -1,217 +0,0 @@ -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - [ExecuteInEditMode] - [AddComponentMenu("FairyGUI/UI Content Scaler")] - public class UIContentScaler : MonoBehaviour - { - /// - /// - /// - public enum ScaleMode - { - ConstantPixelSize, - ScaleWithScreenSize, - ConstantPhysicalSize - } - - /// - /// - /// - public enum ScreenMatchMode - { - MatchWidthOrHeight, - MatchWidth, - MatchHeight - } - - /// - /// - /// - public ScaleMode scaleMode; - - /// - /// - /// - public ScreenMatchMode screenMatchMode; - - /// - /// - /// - public int designResolutionX; - - /// - /// - /// - public int designResolutionY; - - /// - /// - /// - public int fallbackScreenDPI = 96; - - /// - /// - /// - public int defaultSpriteDPI = 96; - - /// - /// - /// - public float constantScaleFactor = 1; - - /// - /// 当false时,计算比例时会考虑designResolutionX/Y的设置是针对横屏还是竖屏。否则不考虑。 - /// - public bool ignoreOrientation = false; - - [System.NonSerialized] - public static float scaleFactor = 1; - - [System.NonSerialized] - public static int scaleLevel = 0; - - [System.NonSerialized] - bool _changed; - - void OnEnable() - { - if (Application.isPlaying) - { - //播放模式下都是通过Stage自带的UIContentScaler实现调整的,所以这里只是把参数传过去 - UIContentScaler scaler = Stage.inst.gameObject.GetComponent(); - if (scaler != this) - { - scaler.scaleMode = scaleMode; - if (scaleMode == ScaleMode.ScaleWithScreenSize) - { - scaler.designResolutionX = designResolutionX; - scaler.designResolutionY = designResolutionY; - scaler.screenMatchMode = screenMatchMode; - scaler.ignoreOrientation = ignoreOrientation; - } - else if (scaleMode == ScaleMode.ConstantPhysicalSize) - { - scaler.fallbackScreenDPI = fallbackScreenDPI; - scaler.defaultSpriteDPI = defaultSpriteDPI; - } - else - { - scaler.constantScaleFactor = constantScaleFactor; - } - scaler.ApplyChange(); - GRoot.inst.ApplyContentScaleFactor(); - } - } - else //Screen width/height is not reliable in OnEnable in editmode - _changed = true; - } - - void Update() - { - if (_changed) - { - _changed = false; - ApplyChange(); - } - } - - void OnDestroy() - { - if (!Application.isPlaying) - { - scaleFactor = 1; - scaleLevel = 0; - } - } - - //For UIContentScalerEditor Only, as the Screen.width/height is not correct in OnInspectorGUI - /// - /// - /// - public void ApplyModifiedProperties() - { - _changed = true; - } - - /// - /// - /// - public void ApplyChange() - { - float screenWidth; - float screenHeight; - - if (Application.isPlaying) //In case of multi display, we keep using the display which Stage object resides. - { - screenWidth = Stage.inst.width; - screenHeight = Stage.inst.height; - } - else - { - screenWidth = Screen.width; - screenHeight = Screen.height; - } - if (scaleMode == ScaleMode.ScaleWithScreenSize) - { - if (designResolutionX == 0 || designResolutionY == 0) - return; - - int dx = designResolutionX; - int dy = designResolutionY; - if (!ignoreOrientation && (screenWidth > screenHeight && dx < dy || screenWidth < screenHeight && dx > dy)) - { - //scale should not change when orientation change - int tmp = dx; - dx = dy; - dy = tmp; - } - - if (screenMatchMode == ScreenMatchMode.MatchWidthOrHeight) - { - float s1 = (float)screenWidth / dx; - float s2 = (float)screenHeight / dy; - scaleFactor = Mathf.Min(s1, s2); - } - else if (screenMatchMode == ScreenMatchMode.MatchWidth) - scaleFactor = (float)screenWidth / dx; - else - scaleFactor = (float)screenHeight / dy; - } - else if (scaleMode == ScaleMode.ConstantPhysicalSize) - { - float dpi = Screen.dpi; - if (dpi == 0) - dpi = fallbackScreenDPI; - if (dpi == 0) - dpi = 96; - scaleFactor = dpi / (defaultSpriteDPI == 0 ? 96 : defaultSpriteDPI); - } - else - scaleFactor = constantScaleFactor; - - if (scaleFactor > 10) - scaleFactor = 10; - - UpdateScaleLevel(); - - StageCamera.screenSizeVer++; - } - - void UpdateScaleLevel() - { - if (scaleFactor > 3) - scaleLevel = 3; //x4 - else if (scaleFactor > 2) - scaleLevel = 2; //x3 - else if (scaleFactor > 1) - scaleLevel = 1; //x2 - else - scaleLevel = 0; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs.meta deleted file mode 100644 index 4607798..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a723f7fd716aac049aa24e9186f18685 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs deleted file mode 100644 index a849323..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs +++ /dev/null @@ -1,211 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -#if FAIRYGUI_TOLUA -using LuaInterface; -#endif - -namespace FairyGUI -{ - /// - /// - /// - public class UIObjectFactory - { - public delegate GComponent GComponentCreator(); - public delegate GLoader GLoaderCreator(); - - static Dictionary packageItemExtensions = new Dictionary(); - static GLoaderCreator loaderCreator; - - /// - /// - /// - /// - /// - public static void SetPackageItemExtension(string url, System.Type type) - { - SetPackageItemExtension(url, () => { return (GComponent)Activator.CreateInstance(type); }); - } - - /// - /// - /// - /// - /// - public static void SetPackageItemExtension(string url, GComponentCreator creator) - { - if (url == null) - throw new Exception("Invaild url: " + url); - - PackageItem pi = UIPackage.GetItemByURL(url); - if (pi != null) - pi.extensionCreator = creator; - - packageItemExtensions[url] = creator; - } - -#if FAIRYGUI_TOLUA - public static void SetExtension(string url, System.Type baseType, LuaFunction extendFunction) - { - SetPackageItemExtension(url, () => - { - GComponent gcom = (GComponent)Activator.CreateInstance(baseType); - - extendFunction.BeginPCall(); - extendFunction.Push(gcom); - extendFunction.PCall(); - gcom.SetLuaPeer(extendFunction.CheckLuaTable()); - extendFunction.EndPCall(); - - return gcom; - }); - } -#endif - - /// - /// - /// - /// - public static void SetLoaderExtension(System.Type type) - { - loaderCreator = () => { return (GLoader)Activator.CreateInstance(type); }; - } - - /// - /// - /// - /// - public static void SetLoaderExtension(GLoaderCreator creator) - { - loaderCreator = creator; - } - - internal static void ResolvePackageItemExtension(PackageItem pi) - { - if (!packageItemExtensions.TryGetValue(UIPackage.URL_PREFIX + pi.owner.id + pi.id, out pi.extensionCreator) - && !packageItemExtensions.TryGetValue(UIPackage.URL_PREFIX + pi.owner.name + "/" + pi.name, out pi.extensionCreator)) - pi.extensionCreator = null; - } - - public static void Clear() - { - packageItemExtensions.Clear(); - loaderCreator = null; - } - - /// - /// - /// - /// - /// - /// - public static GObject NewObject(PackageItem pi, System.Type userClass = null) - { - GObject obj; - if (pi.type == PackageItemType.Component) - { - if (userClass != null) - { - Stats.LatestObjectCreation++; - obj = (GComponent)Activator.CreateInstance(userClass); - } - else if (pi.extensionCreator != null) - { - Stats.LatestObjectCreation++; - obj = pi.extensionCreator(); - } - else - obj = NewObject(pi.objectType); - } - else - obj = NewObject(pi.objectType); - - if (obj != null) - obj.packageItem = pi; - - return obj; - } - - /// - /// - /// - /// - /// - public static GObject NewObject(ObjectType type) - { - Stats.LatestObjectCreation++; - - switch (type) - { - case ObjectType.Image: - return new GImage(); - - case ObjectType.MovieClip: - return new GMovieClip(); - - case ObjectType.Component: - return new GComponent(); - - case ObjectType.Text: - return new GTextField(); - - case ObjectType.RichText: - return new GRichTextField(); - - case ObjectType.InputText: - return new GTextInput(); - - case ObjectType.Group: - return new GGroup(); - - case ObjectType.List: - return new GList(); - - case ObjectType.Graph: - return new GGraph(); - - case ObjectType.Loader: - if (loaderCreator != null) - return loaderCreator(); - else - return new GLoader(); - - case ObjectType.Button: - return new GButton(); - - case ObjectType.Label: - return new GLabel(); - - case ObjectType.ProgressBar: - return new GProgressBar(); - - case ObjectType.Slider: - return new GSlider(); - - case ObjectType.ScrollBar: - return new GScrollBar(); - - case ObjectType.ComboBox: - return new GComboBox(); - - case ObjectType.Tree: - return new GTree(); - - case ObjectType.Loader3D: - return new GLoader3D(); - - default: - return null; - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - Clear(); - } -#endif - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs.meta deleted file mode 100644 index 06bceef..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 461feec05183bbf4f908aa1455325715 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs deleted file mode 100644 index e45a341..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs +++ /dev/null @@ -1,1692 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using FairyGUI.Utils; -#if UNITY_EDITOR -using UnityEditor; -#endif - -namespace FairyGUI -{ - /// - /// A UI Package contains a description file and some texture, sound assets. - /// - public class UIPackage - { - /// - /// Unload UIAssetBundle by FairyGUI system. - /// if use AssetBundlesManager set value to false - /// then unload UIAssetBundle by AssetBundlesManager - /// - public static bool unloadBundleByFGUI = true; - - /// - /// The event is triggered when all reference to this package item dropped. - /// - public static event Action onReleaseResource; - - /// - /// Package id. It is generated by the Editor. - /// - public string id { get; private set; } - - /// - /// Package name. - /// - public string name { get; private set; } - - /// - /// Use this callback to provide resources to the package. - /// - /// Resource name without extension. - /// Resource extension. e.g. '.png' '.wav' - /// Resource type. e.g. 'Texture' 'AudioClip' - /// How to destroy this resource. - /// - public delegate object LoadResource(string name, string extension, System.Type type, out DestroyMethod destroyMethod); - - /// - /// A async load resource callback. After loaded, you should call item.owner.SetItemAsset. - /// - /// Resource name without extension. - /// Resource extension. e.g. '.png' '.wav' - /// Resource type. e.g. 'Texture' 'AudioClip' - /// Resource item object. - /// - public delegate void LoadResourceAsync(string name, string extension, System.Type type, PackageItem item); - - /// - /// - /// - /// - public delegate void CreateObjectCallback(GObject result); - - List _items; - Dictionary _itemsById; - Dictionary _itemsByName; - Dictionary[] _dependencies; - string _assetPath; - string[] _branches; - internal int _branchIndex; - AssetBundle _resBundle; - string _customId; - bool _fromBundle; - LoadResource _loadFunc; - LoadResourceAsync _loadAsyncFunc; - - class AtlasSprite - { - public PackageItem atlas; - public Rect rect = new Rect(); - public Vector2 offset = new Vector2(); - public Vector2 originalSize = new Vector2(); - public bool rotated; - } - Dictionary _sprites; - - static Dictionary _packageInstById = new Dictionary(); - static Dictionary _packageInstByName = new Dictionary(); - static List _packageList = new List(); - static string _branch; - static Dictionary _vars = new Dictionary(); - - internal static int _constructing; - - public const string URL_PREFIX = "ui://"; - -#if UNITY_EDITOR - static LoadResource _loadFromAssetsPath = (string name, string extension, System.Type type, out DestroyMethod destroyMethod) => - { - destroyMethod = DestroyMethod.Unload; - return AssetDatabase.LoadAssetAtPath(name + extension, type); - }; -#endif - - static LoadResource _loadFromResourcesPath = (string name, string extension, System.Type type, out DestroyMethod destroyMethod) => - { - destroyMethod = DestroyMethod.Unload; - return Resources.Load(name, type); - }; - - public UIPackage() - { - _items = new List(); - _itemsById = new Dictionary(); - _itemsByName = new Dictionary(); - _sprites = new Dictionary(); - - _branchIndex = -1; - } - - /// - /// - /// - public static string branch - { - get { return _branch; } - set - { - _branch = value; - bool empty = string.IsNullOrEmpty(_branch); - var iter = _packageInstById.GetEnumerator(); - while (iter.MoveNext()) - { - UIPackage pkg = iter.Current.Value; - if (empty) - pkg._branchIndex = -1; - else if (pkg._branches != null) - pkg._branchIndex = Array.IndexOf(pkg._branches, value); - } - iter.Dispose(); - } - } - - /// - /// - /// - public static string GetVar(string key) - { - string value; - if (_vars.TryGetValue(key, out value)) - return value; - else - return null; - } - - /// - /// - /// - public static void SetVar(string key, string value) - { - if (value == null) - _vars.Remove(key); - else - _vars[key] = value; - } - - /// - /// Return a UIPackage with a certain id. - /// - /// ID of the package. - /// UIPackage - public static UIPackage GetById(string id) - { - UIPackage pkg; - if (_packageInstById.TryGetValue(id, out pkg)) - return pkg; - else - return null; - } - - /// - /// Return a UIPackage with a certain name. - /// - /// Name of the package. - /// UIPackage - public static UIPackage GetByName(string name) - { - UIPackage pkg; - if (_packageInstByName.TryGetValue(name, out pkg)) - return pkg; - else - return null; - } - - /// - /// Add a UI package from assetbundle. - /// - /// A assetbundle. - /// UIPackage - public static UIPackage AddPackage(AssetBundle bundle) - { - return AddPackage(bundle, bundle, null); - } - - /// - /// Add a UI package from two assetbundles. desc and res can be same. - /// - /// A assetbunble contains description file. - /// A assetbundle contains resources. - /// UIPackage - public static UIPackage AddPackage(AssetBundle desc, AssetBundle res) - { - return AddPackage(desc, res, null); - } - - /// - /// Add a UI package from two assetbundles with a optional main asset name. - /// - /// A assetbunble contains description file. - /// A assetbundle contains resources. - /// Main asset name. e.g. Basics_fui - /// UIPackage - public static UIPackage AddPackage(AssetBundle desc, AssetBundle res, string mainAssetName) - { - byte[] source = null; - if (!string.IsNullOrEmpty(mainAssetName)) - { - TextAsset ta = desc.LoadAsset(mainAssetName); - if (ta != null) - source = ta.bytes; - } - else - { - string[] names = desc.GetAllAssetNames(); - string searchPattern = "_fui"; - foreach (string n in names) - { - if (n.IndexOf(searchPattern) != -1) - { - TextAsset ta = desc.LoadAsset(n); - if (ta != null) - { - source = ta.bytes; - mainAssetName = Path.GetFileNameWithoutExtension(n); - break; - } - } - } - } - - if (source == null) - throw new Exception("FairyGUI: no package found in this bundle."); - - if (unloadBundleByFGUI && desc != res) - desc.Unload(true); - - ByteBuffer buffer = new ByteBuffer(source); - - UIPackage pkg = new UIPackage(); - pkg._resBundle = res; - pkg._fromBundle = true; - int pos = mainAssetName.IndexOf("_fui"); - if (pos != -1) - mainAssetName = mainAssetName.Substring(0, pos); - if (!pkg.LoadPackage(buffer, mainAssetName)) - return null; - - _packageInstById[pkg.id] = pkg; - _packageInstByName[pkg.name] = pkg; - _packageList.Add(pkg); - - return pkg; - } - - /// - /// Add a UI package from a path relative to Unity Resources path. - /// - /// Path relative to Unity Resources path. - /// UIPackage - public static UIPackage AddPackage(string descFilePath) - { - if (descFilePath.StartsWith("Assets/")) - { -#if UNITY_EDITOR - return AddPackage(descFilePath, _loadFromAssetsPath); -#else - - Debug.LogWarning("FairyGUI: failed to load package in '" + descFilePath + "'"); - return null; -#endif - } - else - return AddPackage(descFilePath, _loadFromResourcesPath); - } - - /// - /// 使用自定义的加载方式载入一个包。 - /// - /// 包资源路径。 - /// 载入函数 - /// - public static UIPackage AddPackage(string assetPath, LoadResource loadFunc) - { - if (_packageInstById.ContainsKey(assetPath)) - return _packageInstById[assetPath]; - - DestroyMethod dm; - TextAsset asset = (TextAsset)loadFunc(assetPath + "_fui", ".bytes", typeof(TextAsset), out dm); - if (asset == null) - { - if (Application.isPlaying) - throw new Exception("FairyGUI: Cannot load ui package in '" + assetPath + "'"); - else - Debug.LogWarning("FairyGUI: Cannot load ui package in '" + assetPath + "'"); - } - - ByteBuffer buffer = new ByteBuffer(asset.bytes); - - UIPackage pkg = new UIPackage(); - pkg._loadFunc = loadFunc; - pkg._assetPath = assetPath; - if (!pkg.LoadPackage(buffer, assetPath)) - return null; - - _packageInstById[pkg.id] = pkg; - _packageInstByName[pkg.name] = pkg; - _packageInstById[assetPath] = pkg; - _packageList.Add(pkg); - return pkg; - } - - /// - /// Load Package by custom load method. - /// - /// Description file data - /// Prefix of the resource file name. The file name would be in format of 'assetNamePrefix_resFileName'. It can be empty. - /// Load method - /// - public static UIPackage AddPackage(byte[] descData, string assetNamePrefix, LoadResource loadFunc) - { - ByteBuffer buffer = new ByteBuffer(descData); - - UIPackage pkg = new UIPackage(); - pkg._loadFunc = loadFunc; - if (!pkg.LoadPackage(buffer, assetNamePrefix)) - return null; - - _packageInstById[pkg.id] = pkg; - _packageInstByName[pkg.name] = pkg; - _packageList.Add(pkg); - - return pkg; - } - - /// - /// Load Package async by custom load method. - /// - /// Description file data - /// refix of the resource file name. The file name would be in format of 'assetNamePrefix_resFileName'. It can be empty. - /// Load method - /// - public static UIPackage AddPackage(byte[] descData, string assetNamePrefix, LoadResourceAsync loadFunc) - { - ByteBuffer buffer = new ByteBuffer(descData); - - UIPackage pkg = new UIPackage(); - pkg._loadAsyncFunc = loadFunc; - if (!pkg.LoadPackage(buffer, assetNamePrefix)) - return null; - - _packageInstById[pkg.id] = pkg; - _packageInstByName[pkg.name] = pkg; - _packageList.Add(pkg); - - return pkg; - } - - /// - /// Remove a package. All resources in this package will be disposed. - /// - /// - public static void RemovePackage(string packageIdOrName) - { - UIPackage pkg = null; - if (!_packageInstById.TryGetValue(packageIdOrName, out pkg)) - { - if (!_packageInstByName.TryGetValue(packageIdOrName, out pkg)) - throw new Exception("FairyGUI: '" + packageIdOrName + "' is not a valid package id or name."); - } - pkg.Dispose(); - _packageInstById.Remove(pkg.id); - if (pkg._customId != null) - _packageInstById.Remove(pkg._customId); - if (pkg._assetPath != null) - _packageInstById.Remove(pkg._assetPath); - _packageInstByName.Remove(pkg.name); - _packageList.Remove(pkg); - } - - /// - /// - /// - public static void RemoveAllPackages() - { - if (_packageInstById.Count > 0) - { - UIPackage[] pkgs = _packageList.ToArray(); - - foreach (UIPackage pkg in pkgs) - { - pkg.Dispose(); - } - } - _packageList.Clear(); - _packageInstById.Clear(); - _packageInstByName.Clear(); - } - - /// - /// - /// - /// - public static List GetPackages() - { - return _packageList; - } - - /// - /// Create a UI object. - /// - /// Package name. - /// Resource name. - /// A UI object. - public static GObject CreateObject(string pkgName, string resName) - { - UIPackage pkg = GetByName(pkgName); - if (pkg != null) - return pkg.CreateObject(resName); - else - return null; - } - - /// - /// Create a UI object. - /// - /// Package name. - /// Resource name. - /// Custom implementation of this object. - /// A UI object. - public static GObject CreateObject(string pkgName, string resName, System.Type userClass) - { - UIPackage pkg = GetByName(pkgName); - if (pkg != null) - return pkg.CreateObject(resName, userClass); - else - return null; - } - - /// - /// Create a UI object. - /// - /// Resource url. - /// A UI object. - public static GObject CreateObjectFromURL(string url) - { - PackageItem pi = GetItemByURL(url); - if (pi != null) - return pi.owner.CreateObject(pi, null); - else - return null; - } - - /// - /// Create a UI object. - /// - /// Resource url. - /// Custom implementation of this object. - /// A UI object. - public static GObject CreateObjectFromURL(string url, System.Type userClass) - { - PackageItem pi = GetItemByURL(url); - if (pi != null) - return pi.owner.CreateObject(pi, userClass); - else - return null; - } - - public static void CreateObjectAsync(string pkgName, string resName, CreateObjectCallback callback) - { - UIPackage pkg = GetByName(pkgName); - if (pkg != null) - pkg.CreateObjectAsync(resName, callback); - else - Debug.LogError("FairyGUI: package not found - " + pkgName); - } - - public static void CreateObjectFromURL(string url, CreateObjectCallback callback) - { - PackageItem pi = GetItemByURL(url); - if (pi != null) - AsyncCreationHelper.CreateObject(pi, callback); - else - Debug.LogError("FairyGUI: resource not found - " + url); - } - - /// - /// Get a asset with a certain name. - /// - /// Package name. - /// Resource name. - /// If resource is atlas, returns NTexture; If resource is sound, returns AudioClip. - public static object GetItemAsset(string pkgName, string resName) - { - UIPackage pkg = GetByName(pkgName); - if (pkg != null) - return pkg.GetItemAsset(resName); - else - return null; - } - - /// - /// Get a asset with a certain name. - /// - /// Resource url. - /// If resource is atlas, returns NTexture; If resource is sound, returns AudioClip. - public static object GetItemAssetByURL(string url) - { - PackageItem item = GetItemByURL(url); - if (item == null) - return null; - - return item.owner.GetItemAsset(item); - } - - /// - /// Get url of an item in package. - /// - /// Package name. - /// Resource name. - /// Url. - public static string GetItemURL(string pkgName, string resName) - { - UIPackage pkg = GetByName(pkgName); - if (pkg == null) - return null; - - PackageItem pi; - if (!pkg._itemsByName.TryGetValue(resName, out pi)) - return null; - - return URL_PREFIX + pkg.id + pi.id; - } - - public static PackageItem GetItemByURL(string url) - { - if (url == null) - return null; - - int pos1 = url.IndexOf("//"); - if (pos1 == -1) - return null; - - int pos2 = url.IndexOf('/', pos1 + 2); - if (pos2 == -1) - { - if (url.Length > 13) - { - string pkgId = url.Substring(5, 8); - UIPackage pkg = GetById(pkgId); - if (pkg != null) - { - string srcId = url.Substring(13); - return pkg.GetItem(srcId); - } - } - } - else - { - string pkgName = url.Substring(pos1 + 2, pos2 - pos1 - 2); - UIPackage pkg = GetByName(pkgName); - if (pkg != null) - { - string srcName = url.Substring(pos2 + 1); - return pkg.GetItemByName(srcName); - } - } - - return null; - } - - /// - /// 将'ui://包名/组件名'转换为以内部id表达的url格式。如果传入的url本身就是内部id格式,则直接返回。 - /// 同时这个方法还带格式检测,如果传入不正确的url,会返回null。 - /// - /// - /// - public static string NormalizeURL(string url) - { - if (url == null) - return null; - - int pos1 = url.IndexOf("//"); - if (pos1 == -1) - return null; - - int pos2 = url.IndexOf('/', pos1 + 2); - if (pos2 == -1) - return url; - else - { - string pkgName = url.Substring(pos1 + 2, pos2 - pos1 - 2); - string srcName = url.Substring(pos2 + 1); - return GetItemURL(pkgName, srcName); - } - } - - /// - /// Set strings source. - /// - /// - public static void SetStringsSource(XML source) - { - TranslationHelper.LoadFromXML(source); - } - - /// - /// - /// - public string assetPath - { - get { return _assetPath; } - } - - /// - /// Set a custom id for package, then you can use it in GetById. - /// - public string customId - { - get { return _customId; } - set - { - if (_customId != null) - _packageInstById.Remove(_customId); - _customId = value; - if (_customId != null) - _packageInstById[_customId] = this; - } - } - - /// - /// - /// - public AssetBundle resBundle - { - get { return _resBundle; } - } - - /// - /// 获得本包依赖的包的id列表 - /// - public Dictionary[] dependencies - { - get { return _dependencies; } - } - - bool LoadPackage(ByteBuffer buffer, string assetNamePrefix) - { - if (buffer.ReadUint() != 0x46475549) - { - if (Application.isPlaying) - throw new Exception("FairyGUI: old package format found in '" + assetNamePrefix + "'"); - else - { - Debug.LogWarning("FairyGUI: old package format found in '" + assetNamePrefix + "'"); - return false; - } - } - - buffer.version = buffer.ReadInt(); - bool ver2 = buffer.version >= 2; - buffer.ReadBool(); //compressed - id = buffer.ReadString(); - name = buffer.ReadString(); - - UIPackage existingPkg; - if (_packageInstById.TryGetValue(id, out existingPkg)) - { - if (name != existingPkg.name) - Debug.LogWarning("FairyGUI: Package conflicts, '" + name + "' and '" + existingPkg.name + "'"); - -#if UNITY_EDITOR - //maybe multiple pkgs in different folder, pefer the one in resources - if (Application.isEditor) - { - if (existingPkg._loadFunc == _loadFromAssetsPath) //old one is outside resources path - existingPkg.Dispose(); //replace the existing - else if (existingPkg._loadFunc == _loadFromResourcesPath && _loadFunc == _loadFromResourcesPath - && _assetPath.Length < existingPkg._assetPath.Length) //both in resources path, pefer short path - existingPkg.Dispose(); //replace the existing - else //keep the existing - return false; - } -#endif - } - - buffer.Skip(20); - int indexTablePos = buffer.position; - int cnt; - - buffer.Seek(indexTablePos, 4); - - cnt = buffer.ReadInt(); - string[] stringTable = new string[cnt]; - for (int i = 0; i < cnt; i++) - stringTable[i] = buffer.ReadString(); - buffer.stringTable = stringTable; - - if (buffer.Seek(indexTablePos, 5)) - { - cnt = buffer.ReadInt(); - for (int i = 0; i < cnt; i++) - { - int index = buffer.ReadUshort(); - int len = buffer.ReadInt(); - stringTable[index] = buffer.ReadString(len); - } - } - - buffer.Seek(indexTablePos, 0); - - cnt = buffer.ReadShort(); - _dependencies = new Dictionary[cnt]; - for (int i = 0; i < cnt; i++) - { - Dictionary kv = new Dictionary(); - kv.Add("id", buffer.ReadS()); - kv.Add("name", buffer.ReadS()); - _dependencies[i] = kv; - } - - bool branchIncluded = false; - if (ver2) - { - cnt = buffer.ReadShort(); - if (cnt > 0) - { - _branches = buffer.ReadSArray(cnt); - if (!string.IsNullOrEmpty(_branch)) - _branchIndex = Array.IndexOf(_branches, _branch); - } - - branchIncluded = cnt > 0; - } - - buffer.Seek(indexTablePos, 1); - - PackageItem pi; - string assetPath; - if (assetNamePrefix.Length > 0) - { - assetPath = Path.GetDirectoryName(assetNamePrefix); - if (assetPath.Length > 0) - assetPath += "/"; - assetNamePrefix = assetNamePrefix + "_"; - } - else - assetPath = string.Empty; - - cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - int nextPos = buffer.ReadInt(); - nextPos += buffer.position; - - pi = new PackageItem(); - pi.owner = this; - pi.type = (PackageItemType)buffer.ReadByte(); - pi.id = buffer.ReadS(); - pi.name = buffer.ReadS(); - buffer.ReadS(); //path - pi.file = buffer.ReadS(); - pi.exported = buffer.ReadBool(); - pi.width = buffer.ReadInt(); - pi.height = buffer.ReadInt(); - - switch (pi.type) - { - case PackageItemType.Image: - { - pi.objectType = ObjectType.Image; - int scaleOption = buffer.ReadByte(); - if (scaleOption == 1) - { - Rect rect = new Rect(); - rect.x = buffer.ReadInt(); - rect.y = buffer.ReadInt(); - rect.width = buffer.ReadInt(); - rect.height = buffer.ReadInt(); - pi.scale9Grid = rect; - - pi.tileGridIndice = buffer.ReadInt(); - } - else if (scaleOption == 2) - pi.scaleByTile = true; - - buffer.ReadBool(); //smoothing - break; - } - - case PackageItemType.MovieClip: - { - buffer.ReadBool(); //smoothing - pi.objectType = ObjectType.MovieClip; - pi.rawData = buffer.ReadBuffer(); - break; - } - - case PackageItemType.Font: - { - pi.rawData = buffer.ReadBuffer(); - break; - } - - case PackageItemType.Component: - { - int extension = buffer.ReadByte(); - if (extension > 0) - pi.objectType = (ObjectType)extension; - else - pi.objectType = ObjectType.Component; - pi.rawData = buffer.ReadBuffer(); - - UIObjectFactory.ResolvePackageItemExtension(pi); - break; - } - - case PackageItemType.Atlas: - case PackageItemType.Sound: - case PackageItemType.Misc: - { - pi.file = assetNamePrefix + pi.file; - break; - } - - case PackageItemType.Spine: - case PackageItemType.DragoneBones: - { - pi.file = assetPath + pi.file; - pi.skeletonAnchor.x = buffer.ReadFloat(); - pi.skeletonAnchor.y = buffer.ReadFloat(); - pi.skeletonLoaders = new HashSet(); - break; - } - } - - if (ver2) - { - string str = buffer.ReadS();//branch - if (str != null) - pi.name = str + "/" + pi.name; - - int branchCnt = buffer.ReadByte(); - if (branchCnt > 0) - { - if (branchIncluded) - pi.branches = buffer.ReadSArray(branchCnt); - else - _itemsById[buffer.ReadS()] = pi; - } - - int highResCnt = buffer.ReadByte(); - if (highResCnt > 0) - pi.highResolution = buffer.ReadSArray(highResCnt); - } - - _items.Add(pi); - _itemsById[pi.id] = pi; - if (pi.name != null) - _itemsByName[pi.name] = pi; - - buffer.position = nextPos; - } - - buffer.Seek(indexTablePos, 2); - - cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - string itemId = buffer.ReadS(); - pi = _itemsById[buffer.ReadS()]; - - AtlasSprite sprite = new AtlasSprite(); - sprite.atlas = pi; - sprite.rect.x = buffer.ReadInt(); - sprite.rect.y = buffer.ReadInt(); - sprite.rect.width = buffer.ReadInt(); - sprite.rect.height = buffer.ReadInt(); - sprite.rotated = buffer.ReadBool(); - if (ver2 && buffer.ReadBool()) - { - sprite.offset.x = buffer.ReadInt(); - sprite.offset.y = buffer.ReadInt(); - sprite.originalSize.x = buffer.ReadInt(); - sprite.originalSize.y = buffer.ReadInt(); - } - else if (sprite.rotated) - { - sprite.originalSize.x = sprite.rect.height; - sprite.originalSize.y = sprite.rect.width; - } - else - { - sprite.originalSize.x = sprite.rect.width; - sprite.originalSize.y = sprite.rect.height; - } - - _sprites[itemId] = sprite; - - buffer.position = nextPos; - } - - if (buffer.Seek(indexTablePos, 3)) - { - cnt = buffer.ReadShort(); - for (int i = 0; i < cnt; i++) - { - int nextPos = buffer.ReadInt(); - nextPos += buffer.position; - - if (_itemsById.TryGetValue(buffer.ReadS(), out pi)) - { - if (pi.type == PackageItemType.Image) - { - pi.pixelHitTestData = new PixelHitTestData(); - pi.pixelHitTestData.Load(buffer); - } - } - - buffer.position = nextPos; - } - } - - if (!Application.isPlaying) - _items.Sort(ComparePackageItem); - - return true; - } - - static int ComparePackageItem(PackageItem p1, PackageItem p2) - { - if (p1.name != null && p2.name != null) - return p1.name.CompareTo(p2.name); - else - return 0; - } - - /// - /// - /// - public void LoadAllAssets() - { - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - GetItemAsset(_items[i]); - } - - /// - /// - /// - public void UnloadAssets() - { - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - { - PackageItem pi = _items[i]; - if (pi.type == PackageItemType.Atlas) - { - if (pi.texture != null) - pi.texture.Unload(); - } - else if (pi.type == PackageItemType.Sound) - { - if (pi.audioClip != null) - pi.audioClip.Unload(); - } - } - - if (unloadBundleByFGUI && - _resBundle != null) - { - _resBundle.Unload(true); - _resBundle = null; - } - } - - /// - /// - /// - public void ReloadAssets() - { - if (_fromBundle) - throw new Exception("FairyGUI: new bundle must be passed to this function"); - - ReloadAssets(null); - } - - /// - /// - /// - public void ReloadAssets(AssetBundle resBundle) - { - _resBundle = resBundle; - _fromBundle = _resBundle != null; - - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - { - PackageItem pi = _items[i]; - if (pi.type == PackageItemType.Atlas) - { - if (pi.texture != null && pi.texture.nativeTexture == null) - LoadAtlas(pi); - } - else if (pi.type == PackageItemType.Sound) - { - if (pi.audioClip != null && pi.audioClip.nativeClip == null) - LoadSound(pi); - } - } - } - - void Dispose() - { - int cnt = _items.Count; - for (int i = 0; i < cnt; i++) - { - PackageItem pi = _items[i]; - if (pi.type == PackageItemType.Atlas) - { - if (pi.texture != null) - { - pi.texture.Dispose(); - pi.texture = null; - } - } - else if (pi.type == PackageItemType.Sound) - { - if (pi.audioClip != null) - { - pi.audioClip.Unload(); - pi.audioClip = null; - } - } - } - _items.Clear(); - - if (unloadBundleByFGUI && - _resBundle != null) - { - _resBundle.Unload(true); - _resBundle = null; - } - } - - /// - /// - /// - /// - /// - public GObject CreateObject(string resName) - { - PackageItem pi; - if (!_itemsByName.TryGetValue(resName, out pi)) - { - Debug.LogError("FairyGUI: resource not found - " + resName + " in " + this.name); - return null; - } - - return CreateObject(pi, null); - } - - /// - /// - /// - /// - /// - /// - public GObject CreateObject(string resName, System.Type userClass) - { - PackageItem pi; - if (!_itemsByName.TryGetValue(resName, out pi)) - { - Debug.LogError("FairyGUI: resource not found - " + resName + " in " + this.name); - return null; - } - - return CreateObject(pi, userClass); - } - - public void CreateObjectAsync(string resName, CreateObjectCallback callback) - { - PackageItem pi; - if (!_itemsByName.TryGetValue(resName, out pi)) - { - Debug.LogError("FairyGUI: resource not found - " + resName + " in " + this.name); - return; - } - - AsyncCreationHelper.CreateObject(pi, callback); - } - - GObject CreateObject(PackageItem item, System.Type userClass) - { - Stats.LatestObjectCreation = 0; - Stats.LatestGraphicsCreation = 0; - - GetItemAsset(item); - - GObject g = UIObjectFactory.NewObject(item, userClass); - if (g == null) - return null; - - _constructing++; - g.ConstructFromResource(); - _constructing--; - - return g; - } - - - /// - /// - /// - /// - /// - public object GetItemAsset(string resName) - { - PackageItem pi; - if (!_itemsByName.TryGetValue(resName, out pi)) - { - Debug.LogError("FairyGUI: Resource not found - " + resName + " in " + this.name); - return null; - } - - return GetItemAsset(pi); - } - - public List GetItems() - { - return _items; - } - - public PackageItem GetItem(string itemId) - { - PackageItem pi; - if (_itemsById.TryGetValue(itemId, out pi)) - return pi; - else - return null; - } - - public PackageItem GetItemByName(string itemName) - { - PackageItem pi; - if (_itemsByName.TryGetValue(itemName, out pi)) - return pi; - else - return null; - } - - public object GetItemAsset(PackageItem item) - { - switch (item.type) - { - case PackageItemType.Image: - if (item.texture == null) - LoadImage(item); - return item.texture; - - case PackageItemType.Atlas: - if (item.texture == null) - LoadAtlas(item); - return item.texture; - - case PackageItemType.Sound: - if (item.audioClip == null) - LoadSound(item); - return item.audioClip; - - case PackageItemType.Font: - if (item.bitmapFont == null) - LoadFont(item); - - return item.bitmapFont; - - case PackageItemType.MovieClip: - if (item.frames == null) - LoadMovieClip(item); - - return item.frames; - - case PackageItemType.Component: - return item.rawData; - - case PackageItemType.Misc: - return LoadBinary(item); - - case PackageItemType.Spine: - if (item.skeletonAsset == null) - LoadSpine(item); - return item.skeletonAsset; - - case PackageItemType.DragoneBones: - if (item.skeletonAsset == null) - LoadDragonBones(item); - return item.skeletonAsset; - - default: - return null; - } - } - - /// - /// - /// - /// - /// - /// - public void SetItemAsset(PackageItem item, object asset, DestroyMethod destroyMethod) - { - switch (item.type) - { - case PackageItemType.Atlas: - if (item.texture == null) - item.texture = new NTexture(null, new Rect(0, 0, item.width, item.height)); - item.texture.Reload((Texture)asset, null); - item.texture.destroyMethod = destroyMethod; - break; - - case PackageItemType.Sound: - if (item.audioClip == null) - item.audioClip = new NAudioClip(null); - item.audioClip.Reload((AudioClip)asset); - item.audioClip.destroyMethod = destroyMethod; - break; - - case PackageItemType.Spine: -#if FAIRYGUI_SPINE - item.skeletonAsset = (Spine.Unity.SkeletonDataAsset)asset; - foreach (var gLoader3D in item.skeletonLoaders) - { - if(!gLoader3D.isDisposed) - gLoader3D.SetSpine((Spine.Unity.SkeletonDataAsset) item.skeletonAsset); - } - item.skeletonLoaders.Clear(); -#endif - break; - - case PackageItemType.DragoneBones: -#if FAIRYGUI_DRAGONBONES - item.skeletonAsset = (DragonBones.UnityDragonBonesData)asset; -#endif - break; - } - } - - void LoadAtlas(PackageItem item) - { - string ext = Path.GetExtension(item.file); - string fileName = item.file.Substring(0, item.file.Length - ext.Length); - - if (_loadAsyncFunc != null) - { - _loadAsyncFunc(fileName, ext, typeof(Texture), item); - if (item.texture == null) - item.texture = new NTexture(null, new Rect(0, 0, item.width, item.height)); - item.texture.destroyMethod = DestroyMethod.None; - } - else - { - Texture tex = null; - Texture alphaTex = null; - DestroyMethod dm; - - if (_fromBundle) - { - if (_resBundle != null) - tex = _resBundle.LoadAsset(fileName); - else - Debug.LogWarning("FairyGUI: bundle already unloaded."); - - dm = DestroyMethod.None; - } - else - tex = (Texture)_loadFunc(fileName, ext, typeof(Texture), out dm); - - if (tex == null) - Debug.LogWarning("FairyGUI: texture '" + item.file + "' not found in " + this.name); - - else if (!(tex is Texture2D)) - { - Debug.LogWarning("FairyGUI: settings for '" + item.file + "' is wrong! Correct values are: (Texture Type=Default, Texture Shape=2D)"); - tex = null; - } - else - { - if (((Texture2D)tex).mipmapCount > 1) - Debug.LogWarning("FairyGUI: settings for '" + item.file + "' is wrong! Correct values are: (Generate Mip Maps=unchecked)"); - } - -#if FAIRYGUI_USE_ALPHA_TEXTURE - if (tex != null) - { - fileName = fileName + "!a"; - if (_fromBundle) - { - if (_resBundle != null) - alphaTex = _resBundle.LoadAsset(fileName); - } - else - alphaTex = (Texture2D)_loadFunc(fileName, ext, typeof(Texture2D), out dm); - } -#endif - - if (tex == null) - { - tex = NTexture.CreateEmptyTexture(); - dm = DestroyMethod.Destroy; - } - - if (item.texture == null) - { - item.texture = new NTexture(tex, alphaTex, (float)tex.width / item.width, (float)tex.height / item.height); - item.texture.onRelease += (NTexture t) => - { - if (onReleaseResource != null) - onReleaseResource(item); - }; - } - else - item.texture.Reload(tex, alphaTex); - item.texture.destroyMethod = dm; - } - } - - void LoadImage(PackageItem item) - { - AtlasSprite sprite; - if (_sprites.TryGetValue(item.id, out sprite)) - { - NTexture atlas = (NTexture)GetItemAsset(sprite.atlas); - if (atlas.width == sprite.rect.width && atlas.height == sprite.rect.height) - item.texture = atlas; - else - item.texture = new NTexture(atlas, sprite.rect, sprite.rotated, sprite.originalSize, sprite.offset); - } - else - item.texture = NTexture.Empty; - } - - void LoadSound(PackageItem item) - { - string ext = Path.GetExtension(item.file); - string fileName = item.file.Substring(0, item.file.Length - ext.Length); - - if (_loadAsyncFunc != null) - { - _loadAsyncFunc(fileName, ext, typeof(AudioClip), item); - if (item.audioClip == null) - item.audioClip = new NAudioClip(null); - item.audioClip.destroyMethod = DestroyMethod.None; - } - else - { - AudioClip audioClip = null; - DestroyMethod dm; - - if (_fromBundle) - { - if (_resBundle != null) - audioClip = _resBundle.LoadAsset(fileName); - dm = DestroyMethod.None; - } - else - { - audioClip = (AudioClip)_loadFunc(fileName, ext, typeof(AudioClip), out dm); - } - - if (item.audioClip == null) - item.audioClip = new NAudioClip(audioClip); - else - item.audioClip.Reload(audioClip); - item.audioClip.destroyMethod = dm; - } - } - - byte[] LoadBinary(PackageItem item) - { - string ext = Path.GetExtension(item.file); - string fileName = item.file.Substring(0, item.file.Length - ext.Length); - - TextAsset ta; - if (_resBundle != null) - { - ta = _resBundle.LoadAsset(fileName); - if (ta != null) - return ta.bytes; - else - return null; - } - else - { - DestroyMethod dm; - object ret = _loadFunc(fileName, ext, typeof(TextAsset), out dm); - if (ret == null) - return null; - if (ret is byte[]) - return (byte[])ret; - else - return ((TextAsset)ret).bytes; - } - } - - void LoadMovieClip(PackageItem item) - { - ByteBuffer buffer = item.rawData; - - buffer.Seek(0, 0); - - item.interval = buffer.ReadInt() / 1000f; - item.swing = buffer.ReadBool(); - item.repeatDelay = buffer.ReadInt() / 1000f; - - buffer.Seek(0, 1); - - int frameCount = buffer.ReadShort(); - item.frames = new MovieClip.Frame[frameCount]; - - string spriteId; - MovieClip.Frame frame; - AtlasSprite sprite; - Rect frameRect = new Rect(); - - for (int i = 0; i < frameCount; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - frame = new MovieClip.Frame(); - frameRect.x = buffer.ReadInt(); - frameRect.y = buffer.ReadInt(); - frameRect.width = buffer.ReadInt(); - frameRect.height = buffer.ReadInt(); - frame.addDelay = buffer.ReadInt() / 1000f; - spriteId = buffer.ReadS(); - - if (spriteId != null && _sprites.TryGetValue(spriteId, out sprite)) - { - frame.texture = new NTexture((NTexture)GetItemAsset(sprite.atlas), sprite.rect, sprite.rotated, - new Vector2(item.width, item.height), frameRect.position); - } - item.frames[i] = frame; - - buffer.position = nextPos; - } - } - - void LoadFont(PackageItem item) - { - BitmapFont font = new BitmapFont(); - font.name = URL_PREFIX + this.id + item.id; - item.bitmapFont = font; - ByteBuffer buffer = item.rawData; - - buffer.Seek(0, 0); - - bool ttf = buffer.ReadBool(); - font.canTint = buffer.ReadBool(); - font.resizable = buffer.ReadBool(); - font.hasChannel = buffer.ReadBool(); - int fontSize = buffer.ReadInt(); - int xadvance = buffer.ReadInt(); - int lineHeight = buffer.ReadInt(); - - float texScaleX = 1; - float texScaleY = 1; - int bgX; - int bgY; - int bgWidth; - int bgHeight; - - NTexture mainTexture = null; - AtlasSprite mainSprite = null; - if (ttf && _sprites.TryGetValue(item.id, out mainSprite)) - { - mainTexture = (NTexture)GetItemAsset(mainSprite.atlas); - texScaleX = mainTexture.root.uvRect.width / mainTexture.width; - texScaleY = mainTexture.root.uvRect.height / mainTexture.height; - } - - buffer.Seek(0, 1); - - BitmapFont.BMGlyph bg; - int cnt = buffer.ReadInt(); - for (int i = 0; i < cnt; i++) - { - int nextPos = buffer.ReadUshort(); - nextPos += buffer.position; - - bg = new BitmapFont.BMGlyph(); - char ch = buffer.ReadChar(); - font.AddChar(ch, bg); - - string img = buffer.ReadS(); - int bx = buffer.ReadInt(); - int by = buffer.ReadInt(); - bgX = buffer.ReadInt(); - bgY = buffer.ReadInt(); - bgWidth = buffer.ReadInt(); - bgHeight = buffer.ReadInt(); - bg.advance = buffer.ReadInt(); - bg.channel = buffer.ReadByte(); - //The texture channel where the character image is found (1 = blue, 2 = green, 4 = red, 8 = alpha, 15-all). - if (bg.channel == 1) - bg.channel = 2; - else if (bg.channel == 2) - bg.channel = 1; - else if (bg.channel == 4) - bg.channel = 0; - else if (bg.channel == 8) - bg.channel = 3; - - if (ttf) - { - if (mainSprite.rotated) - { - bg.uv[0] = new Vector2((float)(by + bgHeight + mainSprite.rect.x) * texScaleX, - 1 - (float)(mainSprite.rect.yMax - bx) * texScaleY); - bg.uv[1] = new Vector2(bg.uv[0].x - (float)bgHeight * texScaleX, bg.uv[0].y); - bg.uv[2] = new Vector2(bg.uv[1].x, bg.uv[0].y + (float)bgWidth * texScaleY); - bg.uv[3] = new Vector2(bg.uv[0].x, bg.uv[2].y); - } - else - { - bg.uv[0] = new Vector2((float)(bx + mainSprite.rect.x) * texScaleX, - 1 - (float)(by + bgHeight + mainSprite.rect.y) * texScaleY); - bg.uv[1] = new Vector2(bg.uv[0].x, bg.uv[0].y + (float)bgHeight * texScaleY); - bg.uv[2] = new Vector2(bg.uv[0].x + (float)bgWidth * texScaleX, bg.uv[1].y); - bg.uv[3] = new Vector2(bg.uv[2].x, bg.uv[0].y); - } - - bg.lineHeight = lineHeight; - bg.x = bgX; - bg.y = bgY; - bg.width = bgWidth; - bg.height = bgHeight; - } - else - { - PackageItem charImg; - if (_itemsById.TryGetValue(img, out charImg)) - { - charImg = charImg.getBranch(); - bgWidth = charImg.width; - bgHeight = charImg.height; - charImg = charImg.getHighResolution(); - GetItemAsset(charImg); - charImg.texture.GetUV(bg.uv); - - texScaleX = (float)bgWidth / charImg.width; - texScaleY = (float)bgHeight / charImg.height; - - bg.x = bgX + charImg.texture.offset.x * texScaleX; - bg.y = bgY + charImg.texture.offset.y * texScaleY; - bg.width = charImg.texture.width * texScaleX; - bg.height = charImg.texture.height * texScaleY; - - if (mainTexture == null) - mainTexture = charImg.texture.root; - } - - if (fontSize == 0) - fontSize = bgHeight; - - if (bg.advance == 0) - { - if (xadvance == 0) - bg.advance = bgX + bgWidth; - else - bg.advance = xadvance; - } - - bg.lineHeight = bgY < 0 ? bgHeight : (bgY + bgHeight); - if (bg.lineHeight < fontSize) - bg.lineHeight = fontSize; - } - - buffer.position = nextPos; - } - - font.size = fontSize; - font.mainTexture = mainTexture; - if (!font.hasChannel) - font.shader = ShaderConfig.imageShader; - } - - void LoadSpine(PackageItem item) - { - string ext = Path.GetExtension(item.file); - string fileName = item.file.Substring(0, item.file.Length - ext.Length); - int index = fileName.LastIndexOf(".skel"); - if (index > 0) - fileName = fileName.Substring(0, index); - -#if FAIRYGUI_SPINE - if (_loadAsyncFunc != null) - { - _loadAsyncFunc(fileName + "_SkeletonData", ".asset", typeof(Spine.Unity.SkeletonDataAsset), item); - } - else - { - Spine.Unity.SkeletonDataAsset asset; - if (_resBundle != null) - asset = _resBundle.LoadAsset(fileName); - else - { - DestroyMethod dm; - asset = (Spine.Unity.SkeletonDataAsset)_loadFunc(fileName + "_SkeletonData", ".asset", typeof(Spine.Unity.SkeletonDataAsset), out dm); - } - if (asset == null) - Debug.LogWarning("FairyGUI: Failed to load " + fileName); - item.skeletonAsset = asset; - } -#else - Debug.LogWarning("To enable Spine support, add script define symbol: FAIRYGUI_SPINE"); -#endif - } - - void LoadDragonBones(PackageItem item) - { -#if FAIRYGUI_DRAGONBONES - string ext = Path.GetExtension(item.file); - string fileName = item.file.Substring(0, item.file.Length - ext.Length); - int index = fileName.LastIndexOf("_ske"); - if (index > 0) - fileName = fileName.Substring(0, index); - index = fileName.LastIndexOf(".dbbin"); - if (index > 0) - fileName = fileName.Substring(0, index); - - DragonBones.UnityDragonBonesData asset; - if (_resBundle != null) - asset = _resBundle.LoadAsset(fileName + "_Data"); - else - { - DestroyMethod dm; - asset = (DragonBones.UnityDragonBonesData)_loadFunc(fileName + "_Data", ".asset", typeof(DragonBones.UnityDragonBonesData), out dm); - } - if (asset != null) - { - foreach (var atlas in asset.textureAtlas) - { - if (atlas.material == null) - { - atlas.material = new Material(ShaderConfig.GetShader(ShaderConfig.imageShader)); - atlas.material.mainTexture = atlas.texture; - } - } - item.skeletonAsset = DragonBones.UnityFactory.factory.LoadData(asset); - } - else - Debug.LogWarning("FairyGUI: Failed to load " + fileName); -#else - Debug.LogWarning("To enable DragonBones support, add script define symbol: FAIRYGUI_DRAGONBONES"); -#endif - } - - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - RemoveAllPackages(); - UIPackage.branch = null; - } -#endif - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs.meta deleted file mode 100644 index 92e40a4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7177aa7a57b8cc0439fde7785099f11c -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs deleted file mode 100644 index d7e9130..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs +++ /dev/null @@ -1,335 +0,0 @@ -using System; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// - /// - [ExecuteInEditMode] - [AddComponentMenu("FairyGUI/UI Painter")] - [RequireComponent(typeof(MeshCollider), typeof(MeshRenderer))] - public class UIPainter : MonoBehaviour, EMRenderTarget - { - /// - /// - /// - public Container container { get; private set; } - - /// - /// - /// - public string packageName; - - /// - /// - /// - public string componentName; - - /// - /// - /// - public int sortingOrder; - - [SerializeField] - string packagePath; - [SerializeField] - Camera renderCamera = null; - [SerializeField] - bool fairyBatching = false; - [SerializeField] - bool touchDisabled = false; - - GComponent _ui; - [NonSerialized] - bool _created; - [NonSerialized] - bool _captured; - [NonSerialized] - Renderer _renderer; - - [NonSerialized] - RenderTexture _texture; - - Action _captureDelegate; - - void OnEnable() - { - if (Application.isPlaying) - { - if (this.container == null) - { - CreateContainer(); - - if (!string.IsNullOrEmpty(packagePath) && UIPackage.GetByName(packageName) == null) - UIPackage.AddPackage(packagePath); - } - } - else - { - EMRenderSupport.Add(this); - } - } - - void OnDisable() - { - if (!Application.isPlaying) - EMRenderSupport.Remove(this); - } - - void OnGUI() - { - if (!Application.isPlaying) - EM_BeforeUpdate(); - } - - void Start() - { - useGUILayout = false; - - if (!_created && Application.isPlaying) - CreateUI(); - } - - void OnDestroy() - { - if (Application.isPlaying) - { - if (_ui != null) - { - _ui.Dispose(); - _ui = null; - } - - container.Dispose(); - container = null; - } - else - { - EMRenderSupport.Remove(this); - } - - DestroyTexture(); - } - - void CreateContainer() - { - this.container = new Container("UIPainter"); - this.container.renderMode = RenderMode.WorldSpace; - this.container.renderCamera = renderCamera; - this.container.touchable = !touchDisabled; - this.container.fairyBatching = fairyBatching; - this.container._panelOrder = sortingOrder; - this.container.hitArea = new MeshColliderHitTest(this.gameObject.GetComponent()); - SetSortingOrder(this.sortingOrder, true); - this.container.layer = CaptureCamera.hiddenLayer; - } - - /// - /// Change the sorting order of the panel in runtime. - /// - /// sorting order value - /// false if you dont want the default sorting behavior. - public void SetSortingOrder(int value, bool apply) - { - this.sortingOrder = value; - container._panelOrder = value; - - if (apply) - Stage.inst.ApplyPanelOrder(container); - } - - /// - /// - /// - public GComponent ui - { - get - { - if (!_created && Application.isPlaying) - CreateUI(); - - return _ui; - } - } - - /// - /// - /// - public void CreateUI() - { - if (_ui != null) - { - _ui.Dispose(); - _ui = null; - DestroyTexture(); - } - - _created = true; - - if (string.IsNullOrEmpty(packageName) || string.IsNullOrEmpty(componentName)) - return; - - _ui = (GComponent)UIPackage.CreateObject(packageName, componentName); - if (_ui != null) - { - this.container.AddChild(_ui.displayObject); - this.container.size = _ui.size; - _texture = CaptureCamera.CreateRenderTexture(Mathf.RoundToInt(_ui.width), Mathf.RoundToInt(_ui.height), UIConfig.depthSupportForPaintingMode); - _renderer = this.GetComponent(); - if (_renderer != null) - { - _renderer.sharedMaterial.mainTexture = _texture; - _captureDelegate = Capture; - if (_renderer.sharedMaterial.renderQueue == 3000) //Set in transpare queue only - { - this.container.onUpdate += () => - { - UpdateContext.OnEnd += _captureDelegate; - }; - } - } - } - else - Debug.LogError("Create " + componentName + "@" + packageName + " failed!"); - } - - void Capture() - { - CaptureCamera.Capture(this.container, _texture, this.container.size.y, Vector2.zero); - if (_renderer != null) - _renderer.sortingOrder = container.renderingOrder; - } - - void DestroyTexture() - { - if (_texture != null) - { - if (Application.isPlaying) - RenderTexture.Destroy(_texture); - else - RenderTexture.DestroyImmediate(_texture); - _texture = null; - - if (_renderer != null) - _renderer.sharedMaterial.mainTexture = null; - } - } - - #region edit mode functions - - void CaptureInEditMode() - { - if (!EMRenderSupport.packageListReady || UIPackage.GetByName(packageName) == null) - return; - - _captured = true; - - DisplayObject.hideFlags = HideFlags.DontSaveInEditor; - GComponent view = (GComponent)UIPackage.CreateObject(packageName, componentName); - - if (view != null) - { - DestroyTexture(); - - _texture = CaptureCamera.CreateRenderTexture(Mathf.RoundToInt(view.width), Mathf.RoundToInt(view.height), false); - - Container root = (Container)view.displayObject; - root.layer = CaptureCamera.layer; - root.gameObject.hideFlags = HideFlags.None; - root.gameObject.SetActive(true); - - GameObject cameraObject = new GameObject("Temp Capture Camera"); - Camera camera = cameraObject.AddComponent(); - camera.depth = 0; - camera.cullingMask = 1 << CaptureCamera.layer; - camera.clearFlags = CameraClearFlags.Depth; - camera.orthographic = true; - camera.nearClipPlane = -30; - camera.farClipPlane = 30; - camera.enabled = false; - camera.targetTexture = _texture; - - float halfHeight = (float)_texture.height / 2; - camera.orthographicSize = halfHeight; - cameraObject.transform.localPosition = root.cachedTransform.TransformPoint(halfHeight * camera.aspect, -halfHeight, 0); - - UpdateContext context = new UpdateContext(); - //run two times - context.Begin(); - view.displayObject.Update(context); - context.End(); - - context.Begin(); - view.displayObject.Update(context); - context.End(); - - RenderTexture old = RenderTexture.active; - RenderTexture.active = _texture; - GL.Clear(true, true, Color.clear); - camera.Render(); - RenderTexture.active = old; - - camera.targetTexture = null; - view.Dispose(); - GameObject.DestroyImmediate(cameraObject); - - if (_renderer != null) - _renderer.sharedMaterial.mainTexture = _texture; - } - } - - public void ApplyModifiedProperties(bool sortingOrderChanged) - { - if (sortingOrderChanged) - { - if (Application.isPlaying) - SetSortingOrder(sortingOrder, true); - else - EMRenderSupport.orderChanged = true; - } - } - - public void OnUpdateSource(object[] data) - { - if (Application.isPlaying) - return; - - this.packageName = (string)data[0]; - this.packagePath = (string)data[1]; - this.componentName = (string)data[2]; - - if ((bool)data[3]) - _captured = false; - } - - public int EM_sortingOrder - { - get { return sortingOrder; } - } - - public void EM_BeforeUpdate() - { - if (_renderer == null) - _renderer = this.GetComponent(); - if (_renderer != null && _renderer.sharedMaterial.mainTexture != _texture) - _renderer.sharedMaterial.mainTexture = _texture; - - if (packageName != null && componentName != null && !_captured) - CaptureInEditMode(); - } - - public void EM_Update(UpdateContext context) - { - if (_renderer != null) - _renderer.sortingOrder = context.renderingOrder++; - } - - public void EM_Reload() - { - _captured = false; - } - - #endregion - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs.meta deleted file mode 100644 index df36846..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 2ca66c39de4dce2499306801170a139f -timeCreated: 1461566422 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs deleted file mode 100644 index ce29190..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs +++ /dev/null @@ -1,622 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -#if UNITY_EDITOR -using UnityEditor; -#endif - -namespace FairyGUI -{ - /// - /// - /// - public enum FitScreen - { - None, - FitSize, - FitWidthAndSetMiddle, - FitHeightAndSetCenter - } - - /// - /// - /// - [ExecuteInEditMode] - [AddComponentMenu("FairyGUI/UI Panel")] - public class UIPanel : MonoBehaviour, EMRenderTarget - { - /// - /// - /// - public Container container { get; private set; } - - /// - /// - /// - public string packageName; - - /// - /// - /// - public string componentName; - - /// - /// - /// - public FitScreen fitScreen; - - /// - /// - /// - public int sortingOrder; - - [SerializeField] - string packagePath; - [SerializeField] - RenderMode renderMode = RenderMode.ScreenSpaceOverlay; - [SerializeField] - Camera renderCamera = null; - [SerializeField] - Vector3 position; - [SerializeField] - Vector3 scale = new Vector3(1, 1, 1); - [SerializeField] - Vector3 rotation = new Vector3(0, 0, 0); - [SerializeField] - bool fairyBatching = false; - [SerializeField] - bool touchDisabled = false; - [SerializeField] - Vector2 cachedUISize; - [SerializeField] - HitTestMode hitTestMode = HitTestMode.Default; - [SerializeField] - bool setNativeChildrenOrder = false; - - [System.NonSerialized] - int screenSizeVer; - [System.NonSerialized] - Rect uiBounds; //Track bounds even when UI is not created, edit mode - - GComponent _ui; - [NonSerialized] - bool _created; - - List _renders; - - void OnEnable() - { - if (Application.isPlaying) - { - if (this.container == null) - { - CreateContainer(); - - if (!string.IsNullOrEmpty(packagePath) && UIPackage.GetByName(packageName) == null) - UIPackage.AddPackage(packagePath); - } - } - else - { - //不在播放状态时我们不在OnEnable创建,因为Prefab也会调用OnEnable,延迟到Update里创建(Prefab不调用Update) - //每次播放前都会disable/enable一次。。。 - if (container != null)//如果不为null,可能是因为Prefab revert, 而不是因为Assembly reload, - OnDestroy(); - - EMRenderSupport.Add(this); - screenSizeVer = 0; - uiBounds.position = position; - uiBounds.size = cachedUISize; - if (uiBounds.size == Vector2.zero) - uiBounds.size = new Vector2(30, 30); - } - } - - void OnDisable() - { - if (!Application.isPlaying) - EMRenderSupport.Remove(this); - } - - void Start() - { - if (!_created && Application.isPlaying) - CreateUI_PlayMode(); - } - - void Update() - { - if (screenSizeVer != StageCamera.screenSizeVer) - HandleScreenSizeChanged(); - } - - void OnDestroy() - { - if (container != null) - { - if (!Application.isPlaying) - EMRenderSupport.Remove(this); - - if (_ui != null) - { - _ui.Dispose(); - _ui = null; - } - - container.Dispose(); - container = null; - } - - _renders = null; - } - - void CreateContainer() - { - if (!Application.isPlaying) - { - Transform t = this.transform; - int cnt = t.childCount; - while (cnt > 0) - { - GameObject go = t.GetChild(cnt - 1).gameObject; - if (go.name == "UI(AutoGenerated)") - { -#if (UNITY_2018_3_OR_NEWER && UNITY_EDITOR) - if (PrefabUtility.IsPartOfPrefabInstance(go)) - PrefabUtility.UnpackPrefabInstance(PrefabUtility.GetOutermostPrefabInstanceRoot(gameObject), PrefabUnpackMode.Completely, InteractionMode.AutomatedAction); -#endif - UnityEngine.Object.DestroyImmediate(go); - } - cnt--; - } - } - - this.container = new Container(this.gameObject); - this.container.renderMode = renderMode; - this.container.renderCamera = renderCamera; - this.container.touchable = !touchDisabled; - this.container._panelOrder = sortingOrder; - this.container.fairyBatching = fairyBatching; - if (Application.isPlaying) - { - SetSortingOrder(this.sortingOrder, true); - if (this.hitTestMode == HitTestMode.Raycast) - { - ColliderHitTest hitArea = new ColliderHitTest(); - hitArea.collider = this.gameObject.AddComponent(); - this.container.hitArea = hitArea; - } - - if (setNativeChildrenOrder) - { - CacheNativeChildrenRenderers(); - - this.container.onUpdate += () => - { - int cnt = _renders.Count; - int sv = UpdateContext.current.renderingOrder++; - for (int i = 0; i < cnt; i++) - { - Renderer r = _renders[i]; - if (r != null) - _renders[i].sortingOrder = sv; - } - }; - } - } - } - - /// - /// - /// - public GComponent ui - { - get - { - if (!_created && Application.isPlaying) - { - if (!string.IsNullOrEmpty(packagePath) && UIPackage.GetByName(packageName) == null) - UIPackage.AddPackage(packagePath); - - CreateUI_PlayMode(); - } - - return _ui; - } - } - - /// - /// - /// - public void CreateUI() - { - if (_ui != null) - { - _ui.Dispose(); - _ui = null; - } - - CreateUI_PlayMode(); - } - - /// - /// Change the sorting order of the panel in runtime. - /// - /// sorting order value - /// false if you dont want the default sorting behavior. e.g. call Stage.SortWorldSpacePanelsByZOrder later. - public void SetSortingOrder(int value, bool apply) - { - this.sortingOrder = value; - container._panelOrder = value; - - if (apply) - Stage.inst.ApplyPanelOrder(container); - } - - /// - /// - /// - /// - public void SetHitTestMode(HitTestMode value) - { - if (this.hitTestMode != value) - { - this.hitTestMode = value; - BoxCollider collider = this.gameObject.GetComponent(); - if (this.hitTestMode == HitTestMode.Raycast) - { - if (collider == null) - collider = this.gameObject.AddComponent(); - ColliderHitTest hitArea = new ColliderHitTest(); - hitArea.collider = collider; - this.container.hitArea = hitArea; - if (_ui != null) - UpdateHitArea(); - } - else - { - this.container.hitArea = null; - if (collider != null) - Component.Destroy(collider); - } - } - } - - /// - /// - /// - public void CacheNativeChildrenRenderers() - { - if (_renders == null) - _renders = new List(); - else - _renders.Clear(); - - Transform t = this.container.cachedTransform; - int cnt = t.childCount; - for (int i = 0; i < cnt; i++) - { - GameObject go = t.GetChild(i).gameObject; - if (go.name != "GComponent") - _renders.AddRange(go.GetComponentsInChildren(true)); - } - - cnt = _renders.Count; - for (int i = 0; i < cnt; i++) - { - Renderer r = _renders[i]; - if ((r is SkinnedMeshRenderer) || (r is MeshRenderer)) - { - //Set the object rendering in Transparent Queue as UI objects - if (r.sharedMaterial != null) - r.sharedMaterial.renderQueue = 3000; - } - } - } - - void CreateUI_PlayMode() - { - _created = true; - - if (string.IsNullOrEmpty(packageName) || string.IsNullOrEmpty(componentName)) - return; - - _ui = (GComponent)UIPackage.CreateObject(packageName, componentName); - if (_ui != null) - { - _ui.position = position; - if (scale.x != 0 && scale.y != 0) - _ui.scale = scale; - _ui.rotationX = rotation.x; - _ui.rotationY = rotation.y; - _ui.rotation = rotation.z; - if (this.container.hitArea != null) - { - UpdateHitArea(); - _ui.onSizeChanged.Add(UpdateHitArea); - _ui.onPositionChanged.Add(UpdateHitArea); - } - this.container.AddChildAt(_ui.displayObject, 0); - - HandleScreenSizeChanged(); - } - else - Debug.LogError("Create " + packageName + "/" + componentName + " failed!"); - } - - void UpdateHitArea() - { - ColliderHitTest hitArea = this.container.hitArea as ColliderHitTest; - if (hitArea != null) - { - ((BoxCollider)hitArea.collider).center = new Vector3(_ui.xMin + _ui.width / 2, -_ui.yMin - _ui.height / 2); - ((BoxCollider)hitArea.collider).size = _ui.size; - } - } - - void CreateUI_EditMode() - { - if (!EMRenderSupport.packageListReady || UIPackage.GetByName(packageName) == null) - return; - - - DisplayObject.hideFlags = HideFlags.DontSaveInEditor; - GObject obj = UIPackage.CreateObject(packageName, componentName); - if (obj != null && !(obj is GComponent)) - { - obj.Dispose(); - Debug.LogWarning("Not a GComponnet: " + packageName + "/" + componentName); - return; - } - _ui = (GComponent)obj; - - if (_ui != null) - { - _ui.displayObject.gameObject.hideFlags |= HideFlags.HideInHierarchy; - _ui.gameObjectName = "UI(AutoGenerated)"; - - _ui.position = position; - if (scale.x != 0 && scale.y != 0) - _ui.scale = scale; - _ui.rotationX = rotation.x; - _ui.rotationY = rotation.y; - _ui.rotation = rotation.z; - this.container.AddChildAt(_ui.displayObject, 0); - - cachedUISize = _ui.size; - uiBounds.size = cachedUISize; - HandleScreenSizeChanged(); - } - } - - void HandleScreenSizeChanged() - { - if (!Application.isPlaying) - DisplayObject.hideFlags = HideFlags.DontSaveInEditor; - - screenSizeVer = StageCamera.screenSizeVer; - - int width = Screen.width; - int height = Screen.height; - if (this.container != null) - { - Camera cam = container.GetRenderCamera(); - if (cam.targetDisplay != 0 && cam.targetDisplay < Display.displays.Length) - { - width = Display.displays[cam.targetDisplay].renderingWidth; - height = Display.displays[cam.targetDisplay].renderingHeight; - } - - if (this.container.renderMode != RenderMode.WorldSpace) - { - StageCamera sc = cam.GetComponent(); - if (sc == null) - sc = StageCamera.main.GetComponent(); - this.container.scale = new Vector2(sc.unitsPerPixel * UIContentScaler.scaleFactor, sc.unitsPerPixel * UIContentScaler.scaleFactor); - } - } - - width = Mathf.CeilToInt(width / UIContentScaler.scaleFactor); - height = Mathf.CeilToInt(height / UIContentScaler.scaleFactor); - if (_ui != null) - { - switch (fitScreen) - { - case FitScreen.FitSize: - _ui.SetSize(width, height); - _ui.SetXY(0, 0, true); - break; - - case FitScreen.FitWidthAndSetMiddle: - _ui.SetSize(width, _ui.sourceHeight); - _ui.SetXY(0, (int)((height - _ui.sourceHeight) / 2), true); - break; - - case FitScreen.FitHeightAndSetCenter: - _ui.SetSize(_ui.sourceWidth, height); - _ui.SetXY((int)((width - _ui.sourceWidth) / 2), 0, true); - break; - } - - UpdateHitArea(); - } - else - { - switch (fitScreen) - { - case FitScreen.FitSize: - uiBounds.position = new Vector2(0, 0); - uiBounds.size = new Vector2(width, height); - break; - - case FitScreen.FitWidthAndSetMiddle: - uiBounds.position = new Vector2(0, (int)((height - cachedUISize.y) / 2)); - uiBounds.size = new Vector2(width, cachedUISize.y); - break; - - case FitScreen.FitHeightAndSetCenter: - uiBounds.position = new Vector2((int)((width - cachedUISize.x) / 2), 0); - uiBounds.size = new Vector2(cachedUISize.x, height); - break; - } - } - } - - #region edit mode functions - - void OnUpdateSource(object[] data) - { - if (Application.isPlaying) - return; - - this.packageName = (string)data[0]; - this.packagePath = (string)data[1]; - this.componentName = (string)data[2]; - - if ((bool)data[3]) - { - if (container == null) - return; - - if (_ui != null) - { - _ui.Dispose(); - _ui = null; - } - } - } - - public void ApplyModifiedProperties(bool sortingOrderChanged, bool fitScreenChanged) - { - if (container != null) - { - container.renderMode = renderMode; - container.renderCamera = renderCamera; - if (sortingOrderChanged) - { - container._panelOrder = sortingOrder; - if (Application.isPlaying) - SetSortingOrder(sortingOrder, true); - else - EMRenderSupport.orderChanged = true; - } - container.fairyBatching = fairyBatching; - } - - if (_ui != null) - { - if (fitScreen == FitScreen.None) - _ui.position = position; - if (scale.x != 0 && scale.y != 0) - _ui.scale = scale; - _ui.rotationX = rotation.x; - _ui.rotationY = rotation.y; - _ui.rotation = rotation.z; - } - if (fitScreen == FitScreen.None) - uiBounds.position = position; - screenSizeVer = 0;//force HandleScreenSizeChanged be called - - if (fitScreenChanged && this.fitScreen == FitScreen.None) - { - if (_ui != null) - _ui.SetSize(_ui.sourceWidth, _ui.sourceHeight); - uiBounds.size = cachedUISize; - } - } - - public void MoveUI(Vector3 delta) - { - if (fitScreen != FitScreen.None) - return; - - this.position += delta; - if (_ui != null) - _ui.position = position; - uiBounds.position = position; - } - - public Vector3 GetUIWorldPosition() - { - if (_ui != null) - return _ui.displayObject.cachedTransform.position; - else - return this.container.cachedTransform.TransformPoint(uiBounds.position); - } - - void OnDrawGizmos() - { - if (Application.isPlaying || this.container == null) - return; - - Vector3 pos, size; - if (_ui != null) - { - Gizmos.matrix = _ui.displayObject.cachedTransform.localToWorldMatrix; - pos = new Vector3(_ui.width / 2, -_ui.height / 2, 0); - size = new Vector3(_ui.width, _ui.height, 0); - } - else - { - Gizmos.matrix = this.container.cachedTransform.localToWorldMatrix; - pos = new Vector3(uiBounds.x + uiBounds.width / 2, -uiBounds.y - uiBounds.height / 2, 0); - size = new Vector3(uiBounds.width, uiBounds.height, 0); - } - - Gizmos.color = new Color(0, 0, 0, 0); - Gizmos.DrawCube(pos, size); - - Gizmos.color = Color.white; - Gizmos.DrawWireCube(pos, size); - } - - public int EM_sortingOrder - { - get { return sortingOrder; } - } - - public void EM_BeforeUpdate() - { - if (container == null) - CreateContainer(); - - if (packageName != null && componentName != null && _ui == null) - CreateUI_EditMode(); - - if (screenSizeVer != StageCamera.screenSizeVer) - HandleScreenSizeChanged(); - } - - public void EM_Update(UpdateContext context) - { - DisplayObject.hideFlags = HideFlags.DontSaveInEditor; - - container.Update(context); - - if (setNativeChildrenOrder) - { - CacheNativeChildrenRenderers(); - - int cnt = _renders.Count; - int sv = context.renderingOrder++; - for (int i = 0; i < cnt; i++) - { - Renderer r = _renders[i]; - if (r != null) - r.sortingOrder = sv; - } - } - } - - public void EM_Reload() - { - if (_ui != null) - { - _ui.Dispose(); - _ui = null; - } - } - - #endregion - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs.meta deleted file mode 100644 index 69e2778..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 024553ecf96a65649b929ee08c9214fd -timeCreated: 1460480287 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs deleted file mode 100644 index 8a4b6e6..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs +++ /dev/null @@ -1,555 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI -{ - /// - /// Window class. - /// 窗口使用前首先要设置窗口中需要显示的内容,这通常是在编辑器里制作好的,可以直接使用Window.contentPane进行设置。 - /// 建议把设置contentPane等初始化操作放置到Window.onInit方法中。 - /// 另外,FairyGUI还提供了一套机制用于窗口动态创建。动态创建是指初始时仅指定窗口需要使用的资源,等窗口需要显示时才实际开始构建窗口的内容。 - /// 首先需要在窗口的构造函数中调用Window.addUISource。这个方法需要一个IUISource类型的参数,而IUISource是一个接口, - /// 用户需要自行实现载入相关UI包的逻辑。当窗口第一次显示之前,IUISource的加载方法将会被调用,并等待载入完成后才返回执行Window.OnInit,然后窗口才会显示。 - /// - /// 如果你需要窗口显示时播放动画效果,那么覆盖doShowAnimation编写你的动画代码,并且在动画结束后调用onShown。覆盖onShown编写其他需要在窗口显示时处理的业务逻辑。 - /// 如果你需要窗口隐藏时播放动画效果,那么覆盖doHideAnimation编写你的动画代码,并且在动画结束时调用Window.hideImmediately(注意不是直接调用onHide!)。覆盖onHide编写其他需要在窗口隐藏时处理的业务逻辑。 - /// - public class Window : GComponent - { - /// - /// - /// - public bool bringToFontOnClick; - - GComponent _frame; - GComponent _contentPane; - GObject _modalWaitPane; - GObject _closeButton; - GObject _dragArea; - GObject _contentArea; - bool _modal; - - List _uiSources; - bool _inited; - bool _loading; - - protected int _requestingCmd; - -#if FAIRYGUI_PUERTS - public Action __onInit; - public Action __onShown; - public Action __onHide; - public Action __doShowAnimation; - public Action __doHideAnimation; -#endif - - public Window() - : base() - { - _uiSources = new List(); - this.tabStopChildren = true; - bringToFontOnClick = UIConfig.bringWindowToFrontOnClick; - - displayObject.onAddedToStage.Add(__addedToStage); - displayObject.onRemovedFromStage.Add(__removeFromStage); - displayObject.onTouchBegin.AddCapture(__touchBegin); - - this.gameObjectName = "Window"; - SetHome(GRoot.inst); - } - - /// - /// Set a UISource to this window. It must call before the window is shown. When the window is first time to show, - /// UISource.Load is called. Only after all UISource is loaded, the window will continue to init. - /// 为窗口添加一个源。这个方法建议在构造函数调用。当窗口第一次显示前,UISource的Load方法将被调用,然后只有所有的UISource - /// 都ready后,窗口才会继续初始化和显示。 - /// - /// - public void AddUISource(IUISource source) - { - _uiSources.Add(source); - } - - /// - /// - /// - public GComponent contentPane - { - set - { - if (_contentPane != value) - { - if (_contentPane != null) - RemoveChild(_contentPane); - _contentPane = value; - if (_contentPane != null) - { - this.gameObjectName = "Window - " + _contentPane.gameObjectName; - _contentPane.gameObjectName = "ContentPane"; - - AddChild(_contentPane); - this.SetSize(_contentPane.width, _contentPane.height); - _contentPane.AddRelation(this, RelationType.Size); - _contentPane.fairyBatching = true; - _frame = _contentPane.GetChild("frame") as GComponent; - if (_frame != null) - { - this.closeButton = _frame.GetChild("closeButton"); - this.dragArea = _frame.GetChild("dragArea"); - this.contentArea = _frame.GetChild("contentArea"); - } - } - else - { - _frame = null; - this.gameObjectName = "Window"; - } - } - } - get - { - return _contentPane; - } - } - - /// - /// - /// - public GComponent frame - { - get { return _frame; } - } - - /// - /// - /// - public GObject closeButton - { - get { return _closeButton; } - set - { - if (_closeButton != null) - _closeButton.onClick.Remove(closeEventHandler); - _closeButton = value; - if (_closeButton != null) - _closeButton.onClick.Add(closeEventHandler); - } - } - - /// - /// - /// - public GObject dragArea - { - get { return _dragArea; } - set - { - if (_dragArea != value) - { - if (_dragArea != null) - { - _dragArea.draggable = false; - _dragArea.onDragStart.Remove(__dragStart); - } - - _dragArea = value; - if (_dragArea != null) - { - GGraph graph = _dragArea as GGraph; - if (graph != null && graph.shape.isEmpty) - graph.DrawRect(_dragArea.width, _dragArea.height, 0, Color.clear, Color.clear); - _dragArea.draggable = true; - _dragArea.onDragStart.Add(__dragStart); - } - } - } - } - - /// - /// - /// - public GObject contentArea - { - get { return _contentArea; } - set { _contentArea = value; } - } - - /// - /// - /// - public GObject modalWaitingPane - { - get { return _modalWaitPane; } - } - - /// - /// - /// - public void Show() - { - GRoot.inst.ShowWindow(this); - } - - /// - /// - /// - /// - public void ShowOn(GRoot r) - { - r.ShowWindow(this); - } - - /// - /// - /// - public void Hide() - { - if (this.isShowing) - DoHideAnimation(); - } - - /// - /// Hide window immediately, no OnHide will be called. - /// - public void HideImmediately() - { - this.root.HideWindowImmediately(this); - } - - /// - /// Make the window be center of the screen. - /// - /// - /// Add relations to ensure keeping center on screen size changed. - public void CenterOn(GRoot r, bool restraint) - { - this.SetXY((int)((r.width - this.width) / 2), (int)((r.height - this.height) / 2)); - if (restraint) - { - this.AddRelation(r, RelationType.Center_Center); - this.AddRelation(r, RelationType.Middle_Middle); - } - } - - /// - /// Switch show and hide status. - /// - public void ToggleStatus() - { - if (isTop) - Hide(); - else - Show(); - } - - /// - /// - /// - public bool isShowing - { - get { return parent != null; } - } - - /// - /// - /// - public bool isTop - { - get { return parent != null && parent.GetChildIndex(this) == parent.numChildren - 1; } - } - - /// - /// - /// - public bool modal - { - get { return _modal; } - set { _modal = value; } - } - - /// - /// - /// - public void BringToFront() - { - this.root.BringToFront(this); - } - - /// - /// - /// - public void ShowModalWait() - { - ShowModalWait(0); - } - - /// - /// Display a modal waiting sign in the front. - /// 显示一个等待标志在最前面。等待标志的资源可以通过UIConfig.windowModalWaiting。等待标志组件会设置为屏幕大小,请内部做好关联。 - /// 还可以设定一个requestingCmd作为等待的命令字,在CloseModalWait里传入相同的命令字ModalWait将结束,否则CloseModalWait无效。 - /// - /// - public void ShowModalWait(int requestingCmd) - { - if (requestingCmd != 0) - _requestingCmd = requestingCmd; - - if (UIConfig.windowModalWaiting != null) - { - if (_modalWaitPane == null) - { - _modalWaitPane = UIPackage.CreateObjectFromURL(UIConfig.windowModalWaiting); - _modalWaitPane.SetHome(this); - } - - LayoutModalWaitPane(); - - AddChild(_modalWaitPane); - } - } - - virtual protected void LayoutModalWaitPane() - { - if (_contentArea != null) - { - Vector2 pt = _frame.LocalToGlobal(Vector2.zero); - pt = this.GlobalToLocal(pt); - _modalWaitPane.SetXY((int)pt.x + _contentArea.x, (int)pt.y + _contentArea.y); - _modalWaitPane.SetSize(_contentArea.width, _contentArea.height); - } - else - _modalWaitPane.SetSize(this.width, this.height); - } - - /// - /// - /// - /// - public bool CloseModalWait() - { - return CloseModalWait(0); - } - - /// - /// Close modal waiting. If rquestingCmd is equal to the value you transfer in ShowModalWait, mowal wait will be closed. - /// Otherwise, this function has no effect. - /// 关闭模式等待。如果requestingCmd和ShowModalWait传入的不相同,则这个函数没有任何动作,立即返回。 - /// - /// - /// - public bool CloseModalWait(int requestingCmd) - { - if (requestingCmd != 0) - { - if (_requestingCmd != requestingCmd) - return false; - } - _requestingCmd = 0; - - if (_modalWaitPane != null && _modalWaitPane.parent != null) - RemoveChild(_modalWaitPane); - - return true; - } - - /// - /// - /// - public bool modalWaiting - { - get { return (_modalWaitPane != null) && _modalWaitPane.inContainer; } - } - - /// - /// - /// - public void Init() - { - if (_inited || _loading) - return; - - if (_uiSources.Count > 0) - { - _loading = false; - int cnt = _uiSources.Count; - for (int i = 0; i < cnt; i++) - { - IUISource lib = _uiSources[i]; - if (!lib.loaded) - { - lib.Load(__uiLoadComplete); - _loading = true; - } - } - - if (!_loading) - _init(); - } - else - _init(); - } - - /// - /// - /// - virtual protected void OnInit() - { -#if FAIRYGUI_TOLUA - CallLua("OnInit"); -#endif -#if FAIRYGUI_PUERTS - if (__onInit != null) - __onInit(); -#endif - } - - /// - /// - /// - virtual protected void OnShown() - { -#if FAIRYGUI_TOLUA - CallLua("OnShown"); -#endif -#if FAIRYGUI_PUERTS - if (__onShown != null) - __onShown(); -#endif - } - - /// - /// - /// - virtual protected void OnHide() - { -#if FAIRYGUI_TOLUA - CallLua("OnHide"); -#endif -#if FAIRYGUI_PUERTS - if (__onHide != null) - __onHide(); -#endif - } - - /// - /// - /// - virtual protected void DoShowAnimation() - { -#if FAIRYGUI_TOLUA - if (!CallLua("DoShowAnimation")) - OnShown(); -#elif FAIRYGUI_PUERTS - if (__doShowAnimation != null) - __doShowAnimation(); - else - OnShown(); -#else - OnShown(); -#endif - } - - /// - /// - /// - virtual protected void DoHideAnimation() - { -#if FAIRYGUI_TOLUA - if (!CallLua("DoHideAnimation")) - HideImmediately(); -#elif FAIRYGUI_PUERTS - if (__doHideAnimation != null) - __doHideAnimation(); - else - HideImmediately(); -#else - HideImmediately(); -#endif - } - - void __uiLoadComplete() - { - int cnt = _uiSources.Count; - for (int i = 0; i < cnt; i++) - { - IUISource lib = _uiSources[i]; - if (!lib.loaded) - return; - } - - _loading = false; - _init(); - } - - void _init() - { - _inited = true; - OnInit(); - - if (this.isShowing) - DoShowAnimation(); - } - - override public void Dispose() - { - if (_modalWaitPane != null && _modalWaitPane.parent == null) - _modalWaitPane.Dispose(); - - - //正在加载资源的异步过程中发生意外关闭 应该取消正在加载的load - if (_loading) - { - for (int i = 0; i < _uiSources.Count; ++i) - { - _uiSources[i].Cancel(); - } - } - - -#if FAIRYGUI_PUERTS - __onInit = null; - __onShown = null; - __onHide = null; - __doShowAnimation = null; - __doHideAnimation = null; -#endif - - base.Dispose(); - } - - virtual protected void closeEventHandler(EventContext context) - { - Hide(); - } - - void __addedToStage() - { - if (!_inited) - Init(); - else - DoShowAnimation(); - } - - void __removeFromStage() - { - CloseModalWait(); - OnHide(); - } - - private void __touchBegin(EventContext context) - { - if (this.isShowing && bringToFontOnClick) - { - BringToFront(); - } - } - - private void __dragStart(EventContext context) - { - context.PreventDefault(); - - this.StartDrag((int)context.data); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs.meta deleted file mode 100644 index edaec09..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c454632cb96595b4cbeeee678a5d9f0b -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils.meta b/Assets/Plugins/FairyGUI/Scripts/Utils.meta deleted file mode 100644 index 5cfdaaa..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d78e1a4b8ac1336498bfbbe945d16276 -folderAsset: yes -timeCreated: 1460480287 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs deleted file mode 100644 index 878be22..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs +++ /dev/null @@ -1,455 +0,0 @@ -using System; -using System.Text; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class ByteBuffer - { - /// - /// - /// - public bool littleEndian; - - /// - /// - /// - public string[] stringTable; - - /// - /// - /// - public int version; - - int _pointer; - int _offset; - int _length; - byte[] _data; - - static byte[] temp = new byte[8]; - - /// - /// - /// - /// - /// - /// - public ByteBuffer(byte[] data, int offset = 0, int length = -1) - { - _data = data; - _pointer = 0; - _offset = offset; - if (length < 0) - _length = data.Length - offset; - else - _length = length; - littleEndian = false; - } - - /// - /// - /// - public int position - { - get { return _pointer; } - set { _pointer = value; } - } - - /// - /// - /// - public int length - { - get { return _length; } - } - - /// - /// - /// - public bool bytesAvailable - { - get { return _pointer < _length; } - } - - /// - /// - /// - public byte[] buffer - { - get { return _data; } - set - { - _data = value; - _pointer = 0; - _offset = 0; - _length = _data.Length; - } - } - - /// - /// - /// - /// - /// - public int Skip(int count) - { - _pointer += count; - return _pointer; - } - - /// - /// - /// - /// - public byte ReadByte() - { - return _data[_offset + _pointer++]; - } - - /// - /// - /// - /// - /// - /// - /// - public byte[] ReadBytes(byte[] output, int destIndex, int count) - { - if (count > _length - _pointer) - throw new ArgumentOutOfRangeException(); - - Array.Copy(_data, _offset + _pointer, output, destIndex, count); - _pointer += count; - return output; - } - - /// - /// - /// - /// - /// - public byte[] ReadBytes(int count) - { - if (count > _length - _pointer) - throw new ArgumentOutOfRangeException(); - - byte[] result = new byte[count]; - Array.Copy(_data, _offset + _pointer, result, 0, count); - _pointer += count; - return result; - } - - /// - /// - /// - /// - public ByteBuffer ReadBuffer() - { - int count = ReadInt(); - ByteBuffer ba = new ByteBuffer(_data, _pointer, count); - ba.stringTable = stringTable; - ba.version = version; - _pointer += count; - return ba; - } - - /// - /// - /// - /// - public char ReadChar() - { - return (char)ReadShort(); - } - - /// - /// - /// - /// - public bool ReadBool() - { - bool result = _data[_offset + _pointer] == 1; - _pointer++; - return result; - } - - /// - /// - /// - /// - public short ReadShort() - { - int startIndex = _offset + _pointer; - _pointer += 2; - if (littleEndian) - return (short)(_data[startIndex] | (_data[startIndex + 1] << 8)); - else - return (short)((_data[startIndex] << 8) | _data[startIndex + 1]); - } - - /// - /// - /// - /// - public ushort ReadUshort() - { - return (ushort)ReadShort(); - } - - /// - /// - /// - /// - public int ReadInt() - { - int startIndex = _offset + _pointer; - _pointer += 4; - if (littleEndian) - return (_data[startIndex]) | (_data[startIndex + 1] << 8) | (_data[startIndex + 2] << 16) | (_data[startIndex + 3] << 24); - else - return (_data[startIndex] << 24) | (_data[startIndex + 1] << 16) | (_data[startIndex + 2] << 8) | (_data[startIndex + 3]); - } - - /// - /// - /// - /// - public uint ReadUint() - { - return (uint)ReadInt(); - } - - /// - /// - /// - /// - public float ReadFloat() - { - int startIndex = _offset + _pointer; - _pointer += 4; - if (littleEndian == BitConverter.IsLittleEndian) - return BitConverter.ToSingle(_data, startIndex); - else - { - temp[3] = _data[startIndex]; - temp[2] = _data[startIndex + 1]; - temp[1] = _data[startIndex + 2]; - temp[0] = _data[startIndex + 3]; - return BitConverter.ToSingle(temp, 0); - } - } - - /// - /// - /// - /// - public long ReadLong() - { - int startIndex = _offset + _pointer; - _pointer += 8; - if (littleEndian) - { - int i1 = (_data[startIndex]) | (_data[startIndex + 1] << 8) | (_data[startIndex + 2] << 16) | (_data[startIndex + 3] << 24); - int i2 = (_data[startIndex + 4]) | (_data[startIndex + 5] << 8) | (_data[startIndex + 6] << 16) | (_data[startIndex + 7] << 24); - return (uint)i1 | ((long)i2 << 32); - } - else - { - int i1 = (_data[startIndex] << 24) | (_data[startIndex + 1] << 16) | (_data[startIndex + 2] << 8) | (_data[startIndex + 3]); - int i2 = (_data[startIndex + 4] << 24) | (_data[startIndex + 5] << 16) | (_data[startIndex + 6] << 8) | (_data[startIndex + 7]); - return (uint)i2 | ((long)i1 << 32); - } - } - - /// - /// - /// - /// - public double ReadDouble() - { - int startIndex = _offset + _pointer; - _pointer += 8; - if (littleEndian == BitConverter.IsLittleEndian) - return BitConverter.ToDouble(_data, startIndex); - else - { - temp[7] = _data[startIndex]; - temp[6] = _data[startIndex + 1]; - temp[5] = _data[startIndex + 2]; - temp[4] = _data[startIndex + 3]; - temp[3] = _data[startIndex + 4]; - temp[2] = _data[startIndex + 5]; - temp[1] = _data[startIndex + 6]; - temp[0] = _data[startIndex + 7]; - return BitConverter.ToSingle(temp, 0); - } - } - - /// - /// - /// - /// - public string ReadString() - { - ushort len = ReadUshort(); - string result = Encoding.UTF8.GetString(_data, _offset + _pointer, len); - _pointer += len; - return result; - } - - /// - /// - /// - /// - /// - public string ReadString(int len) - { - string result = Encoding.UTF8.GetString(_data, _offset + _pointer, len); - _pointer += len; - return result; - } - - /// - /// - /// - /// - public string ReadS() - { - int index = ReadUshort(); - if (index == 65534) //null - return null; - else if (index == 65533) - return string.Empty; - else - return stringTable[index]; - } - - /// - /// - /// - /// - /// - public string[] ReadSArray(int cnt) - { - string[] ret = new string[cnt]; - for (int i = 0; i < cnt; i++) - ret[i] = ReadS(); - - return ret; - } - - private static List helperPoints = new List(); - - /// - /// - /// - /// - public List ReadPath() - { - helperPoints.Clear(); - - int len = ReadInt(); - if (len == 0) - return helperPoints; - - for (int i = 0; i < len; i++) - { - GPathPoint.CurveType curveType = (GPathPoint.CurveType)ReadByte(); - switch (curveType) - { - case GPathPoint.CurveType.Bezier: - helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0), - new Vector3(ReadFloat(), ReadFloat(), 0))); - break; - - case GPathPoint.CurveType.CubicBezier: - helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0), - new Vector3(ReadFloat(), ReadFloat(), 0), - new Vector3(ReadFloat(), ReadFloat(), 0))); - break; - - default: - helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0), curveType)); - break; - } - } - - return helperPoints; - } - - /// - /// - /// - /// - public void WriteS(string value) - { - int index = ReadUshort(); - if (index != 65534 && index != 65533) - stringTable[index] = value; - } - - /// - /// - /// - /// - public Color ReadColor() - { - int startIndex = _offset + _pointer; - byte r = _data[startIndex]; - byte g = _data[startIndex + 1]; - byte b = _data[startIndex + 2]; - byte a = _data[startIndex + 3]; - _pointer += 4; - - return new Color32(r, g, b, a); - } - - /// - /// - /// - /// - /// - /// - public bool Seek(int indexTablePos, int blockIndex) - { - int tmp = _pointer; - _pointer = indexTablePos; - int segCount = _data[_offset + _pointer++]; - if (blockIndex < segCount) - { - bool useShort = _data[_offset + _pointer++] == 1; - int newPos; - if (useShort) - { - _pointer += 2 * blockIndex; - newPos = ReadShort(); - } - else - { - _pointer += 4 * blockIndex; - newPos = ReadInt(); - } - - if (newPos > 0) - { - _pointer = indexTablePos + newPos; - return true; - } - else - { - _pointer = tmp; - return false; - } - } - else - { - _pointer = tmp; - return false; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs.meta deleted file mode 100644 index 66dbc09..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: f72828fa75e491f4d95f92a46b01956a -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html.meta deleted file mode 100644 index b1f96a7..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: da6063debdf749748bac0a0029b709e5 -folderAsset: yes -timeCreated: 1461773298 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs deleted file mode 100644 index ad0c90c..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlButton : IHtmlObject - { - public GComponent button { get; private set; } - - public const string CLICK_EVENT = "OnHtmlButtonClick"; - - public static string resource; - - RichTextField _owner; - HtmlElement _element; - EventCallback1 _clickHandler; - - public HtmlButton() - { - button = UIPackage.CreateObjectFromURL(resource).asCom; - _clickHandler = (EventContext context) => - { - _owner.DispatchEvent(CLICK_EVENT, context.data, this); - }; - } - - public DisplayObject displayObject - { - get { return button != null ? button.displayObject : null; } - } - - public HtmlElement element - { - get { return _element; } - } - - public float width - { - get { return button != null ? button.width : 0; } - } - - public float height - { - get { return button != null ? button.height : 0; } - } - - public void Create(RichTextField owner, HtmlElement element) - { - _owner = owner; - _element = element; - - if (button == null) - return; - - button.onClick.Add(_clickHandler); - int width = element.GetInt("width", button.sourceWidth); - int height = element.GetInt("height", button.sourceHeight); - button.SetSize(width, height); - button.text = element.GetString("value"); - } - - public void SetPosition(float x, float y) - { - if (button != null) - button.SetXY(x, y); - } - - public void Add() - { - if (button != null) - _owner.AddChild(button.displayObject); - } - - public void Remove() - { - if (button != null && button.displayObject.parent != null) - _owner.RemoveChild(button.displayObject); - } - - public void Release() - { - if (button != null) - button.RemoveEventListeners(); - - _owner = null; - _element = null; - } - - public void Dispose() - { - if (button != null) - button.Dispose(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs.meta deleted file mode 100644 index d46ad3a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 268c2d7ad77b66449b4e0e39a6d0ca15 -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs deleted file mode 100644 index cd1d8ed..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs +++ /dev/null @@ -1,215 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public enum HtmlElementType - { - Text, - Link, - Image, - Input, - Select, - Object, - - //internal - LinkEnd, - } - - /// - /// - /// - public class HtmlElement - { - public HtmlElementType type; - public string name; - public string text; - public TextFormat format; - public int charIndex; - - public IHtmlObject htmlObject; - public int status; //1 hidden 2 clipped 4 added - public int space; - public Vector2 position; - - Hashtable attributes; - - public HtmlElement() - { - format = new TextFormat(); - } - - public object Get(string attrName) - { - if (attributes == null) - return null; - - return attributes[attrName]; - } - - public void Set(string attrName, object attrValue) - { - if (attributes == null) - attributes = new Hashtable(); - - attributes[attrName] = attrValue; - } - - public string GetString(string attrName) - { - return GetString(attrName, null); - } - - public string GetString(string attrName, string defValue) - { - if (attributes == null) - return defValue; - - object ret = attributes[attrName]; - if (ret != null) - return ret.ToString(); - else - return defValue; - } - - public int GetInt(string attrName) - { - return GetInt(attrName, 0); - } - - public int GetInt(string attrName, int defValue) - { - string value = GetString(attrName); - if (value == null || value.Length == 0) - return defValue; - - if (value[value.Length - 1] == '%') - { - int ret; - if (int.TryParse(value.Substring(0, value.Length - 1), out ret)) - return Mathf.CeilToInt(ret / 100.0f * defValue); - else - return defValue; - } - else - { - int ret; - if (int.TryParse(value, out ret)) - return ret; - else - return defValue; - } - } - - public float GetFloat(string attrName) - { - return GetFloat(attrName, 0); - } - - public float GetFloat(string attrName, float defValue) - { - string value = GetString(attrName); - if (value == null || value.Length == 0) - return defValue; - - float ret; - if (float.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public bool GetBool(string attrName) - { - return GetBool(attrName, false); - } - - public bool GetBool(string attrName, bool defValue) - { - string value = GetString(attrName); - if (value == null || value.Length == 0) - return defValue; - - bool ret; - if (bool.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public Color GetColor(string attrName, Color defValue) - { - string value = GetString(attrName); - if (value == null || value.Length == 0) - return defValue; - - return ToolSet.ConvertFromHtmlColor(value); - } - - public void FetchAttributes() - { - attributes = XMLIterator.GetAttributes(attributes); - } - - - public bool isEntity - { - get { return type == HtmlElementType.Image || type == HtmlElementType.Select || type == HtmlElementType.Input || type == HtmlElementType.Object; } - } - - #region Pool Support - - static Stack elementPool = new Stack(); - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - elementPool.Clear(); - } -#endif - - public static HtmlElement GetElement(HtmlElementType type) - { - HtmlElement ret; - if (elementPool.Count > 0) - ret = elementPool.Pop(); - else - ret = new HtmlElement(); - ret.type = type; - - if (type != HtmlElementType.Text && ret.attributes == null) - ret.attributes = new Hashtable(); - - return ret; - } - - public static void ReturnElement(HtmlElement element) - { - element.name = null; - element.text = null; - element.htmlObject = null; - element.status = 0; - if (element.attributes != null) - element.attributes.Clear(); - elementPool.Push(element); - } - - public static void ReturnElements(List elements) - { - int count = elements.Count; - for (int i = 0; i < count; i++) - { - HtmlElement element = elements[i]; - ReturnElement(element); - } - elements.Clear(); - } - - #endregion - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs.meta deleted file mode 100644 index 5a0bc4e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7d92c6025bf750145af0e456a7fd3f33 -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs deleted file mode 100644 index 1882480..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlImage : IHtmlObject - { - public GLoader loader { get; private set; } - - RichTextField _owner; - HtmlElement _element; - bool _externalTexture; - - public HtmlImage() - { - loader = (GLoader)UIObjectFactory.NewObject(ObjectType.Loader); - loader.gameObjectName = "HtmlImage"; - loader.fill = FillType.ScaleFree; - loader.touchable = false; - } - - public DisplayObject displayObject - { - get { return loader.displayObject; } - } - - public HtmlElement element - { - get { return _element; } - } - - public float width - { - get { return loader.width; } - } - - public float height - { - get { return loader.height; } - } - - public void Create(RichTextField owner, HtmlElement element) - { - _owner = owner; - _element = element; - - int sourceWidth = 0; - int sourceHeight = 0; - NTexture texture = owner.htmlPageContext.GetImageTexture(this); - if (texture != null) - { - sourceWidth = texture.width; - sourceHeight = texture.height; - - loader.texture = texture; - _externalTexture = true; - } - else - { - string src = element.GetString("src"); - if (src != null) - { - PackageItem pi = UIPackage.GetItemByURL(src); - if (pi != null) - { - sourceWidth = pi.width; - sourceHeight = pi.height; - } - } - - loader.url = src; - _externalTexture = false; - } - - int width = element.GetInt("width", sourceWidth); - int height = element.GetInt("height", sourceHeight); - - if (width == 0) - width = 5; - if (height == 0) - height = 10; - loader.SetSize(width, height); - } - - public void SetPosition(float x, float y) - { - loader.SetXY(x, y); - } - - public void Add() - { - _owner.AddChild(loader.displayObject); - } - - public void Remove() - { - if (loader.displayObject.parent != null) - _owner.RemoveChild(loader.displayObject); - } - - public void Release() - { - loader.RemoveEventListeners(); - if (_externalTexture) - { - _owner.htmlPageContext.FreeImageTexture(this, loader.texture); - _externalTexture = false; - } - - loader.url = null; - _owner = null; - _element = null; - } - - public void Dispose() - { - if (_externalTexture) - _owner.htmlPageContext.FreeImageTexture(this, loader.texture); - loader.Dispose(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs.meta deleted file mode 100644 index d8b725d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 81871e13cb458ab4da28358d5634e082 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs deleted file mode 100644 index dcd6b78..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs +++ /dev/null @@ -1,117 +0,0 @@ -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlInput : IHtmlObject - { - public GTextInput textInput { get; private set; } - - RichTextField _owner; - HtmlElement _element; - bool _hidden; - - public static int defaultBorderSize = 2; - public static Color defaultBorderColor = ToolSet.ColorFromRGB(0xA9A9A9); - public static Color defaultBackgroundColor = Color.clear; - - public HtmlInput() - { - textInput = (GTextInput)UIObjectFactory.NewObject(ObjectType.InputText); - textInput.gameObjectName = "HtmlInput"; - textInput.verticalAlign = VertAlignType.Middle; - } - - public DisplayObject displayObject - { - get { return textInput.displayObject; } - } - - public HtmlElement element - { - get { return _element; } - } - - public float width - { - get { return _hidden ? 0 : textInput.width; } - } - - public float height - { - get { return _hidden ? 0 : textInput.height; } - } - - public void Create(RichTextField owner, HtmlElement element) - { - _owner = owner; - _element = element; - - string type = element.GetString("type"); - if (type != null) - type = type.ToLower(); - - _hidden = type == "hidden"; - if (!_hidden) - { - int width = element.GetInt("width", 0); - int height = element.GetInt("height", 0); - int borderSize = element.GetInt("border", defaultBorderSize); - Color borderColor = element.GetColor("border-color", defaultBorderColor); - Color backgroundColor = element.GetColor("background-color", defaultBackgroundColor); - - if (width == 0) - { - width = element.space; - if (width > _owner.width / 2 || width < 100) - width = (int)_owner.width / 2; - } - if (height == 0) - height = element.format.size + 10; - - textInput.textFormat = element.format; - textInput.displayAsPassword = type == "password"; - textInput.maxLength = element.GetInt("maxlength", int.MaxValue); - textInput.border = borderSize; - textInput.borderColor = borderColor; - textInput.backgroundColor = backgroundColor; - textInput.SetSize(width, height); - } - textInput.text = element.GetString("value"); - } - - public void SetPosition(float x, float y) - { - if (!_hidden) - textInput.SetXY(x, y); - } - - public void Add() - { - if (!_hidden) - _owner.AddChild(textInput.displayObject); - } - - public void Remove() - { - if (!_hidden && textInput.displayObject.parent != null) - _owner.RemoveChild(textInput.displayObject); - } - - public void Release() - { - textInput.RemoveEventListeners(); - textInput.text = null; - - _owner = null; - _element = null; - } - - public void Dispose() - { - textInput.Dispose(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs.meta deleted file mode 100644 index ac74a30..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e1c8ffa51408aef45839b1d00198b819 -timeCreated: 1535374215 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs deleted file mode 100644 index 6875fab..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs +++ /dev/null @@ -1,113 +0,0 @@ - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlLink : IHtmlObject - { - RichTextField _owner; - HtmlElement _element; - SelectionShape _shape; - - EventCallback1 _clickHandler; - EventCallback1 _rolloverHandler; - EventCallback0 _rolloutHandler; - - public HtmlLink() - { - _shape = new SelectionShape(); - _shape.gameObject.name = "HtmlLink"; - _shape.cursor = "text-link"; - - _clickHandler = (EventContext context) => - { - _owner.BubbleEvent("onClickLink", _element.GetString("href")); - }; - _rolloverHandler = (EventContext context) => - { - if (_owner.htmlParseOptions.linkHoverBgColor.a > 0) - _shape.color = _owner.htmlParseOptions.linkHoverBgColor; - }; - _rolloutHandler = () => - { - if (_owner.htmlParseOptions.linkHoverBgColor.a > 0) - _shape.color = _owner.htmlParseOptions.linkBgColor; - }; - } - - public DisplayObject displayObject - { - get { return _shape; } - } - - public HtmlElement element - { - get { return _element; } - } - - public float width - { - get { return 0; } - } - - public float height - { - get { return 0; } - } - - public void Create(RichTextField owner, HtmlElement element) - { - _owner = owner; - _element = element; - _shape.onClick.Add(_clickHandler); - _shape.onRollOver.Add(_rolloverHandler); - _shape.onRollOut.Add(_rolloutHandler); - _shape.color = _owner.htmlParseOptions.linkBgColor; - } - - public void SetArea(int startLine, float startCharX, int endLine, float endCharX) - { - if (startLine == endLine && startCharX > endCharX) - { - float tmp = startCharX; - startCharX = endCharX; - endCharX = tmp; - } - _shape.rects.Clear(); - _owner.textField.GetLinesShape(startLine, startCharX, endLine, endCharX, true, _shape.rects); - _shape.Refresh(); - } - - public void SetPosition(float x, float y) - { - _shape.SetXY(x, y); - } - - public void Add() - { - //add below _shape - _owner.AddChildAt(_shape, 0); - } - - public void Remove() - { - if (_shape.parent != null) - _owner.RemoveChild(_shape); - } - - public void Release() - { - _shape.RemoveEventListeners(); - - _owner = null; - _element = null; - } - - public void Dispose() - { - _shape.Dispose(); - _shape = null; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs.meta deleted file mode 100644 index 5378e14..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b2132a66ecae9cc4c99c6fbe37051723 -timeCreated: 1470116309 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs deleted file mode 100644 index b21840e..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs +++ /dev/null @@ -1,179 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlPageContext : IHtmlPageContext - { - Stack _imagePool; - Stack _inputPool; - Stack _buttonPool; - Stack _selectPool; - Stack _linkPool; - - static HtmlPageContext _inst; - - public static HtmlPageContext inst - { - get - { - if (_inst == null) - _inst = new HtmlPageContext(); - return _inst; - } - } - - static Transform _poolManager; - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - _inst = null; - _poolManager = null; - } -#endif - - public HtmlPageContext() - { - _imagePool = new Stack(); - _inputPool = new Stack(); - _buttonPool = new Stack(); - _selectPool = new Stack(); - _linkPool = new Stack(); - - if (Application.isPlaying && _poolManager == null) - _poolManager = Stage.inst.CreatePoolManager("HtmlObjectPool"); - } - - virtual public IHtmlObject CreateObject(RichTextField owner, HtmlElement element) - { - IHtmlObject ret = null; - bool fromPool = false; - if (element.type == HtmlElementType.Image) - { - if (_imagePool.Count > 0 && _poolManager != null) - { - ret = _imagePool.Pop(); - fromPool = true; - } - else - ret = new HtmlImage(); - } - else if (element.type == HtmlElementType.Link) - { - if (_linkPool.Count > 0 && _poolManager != null) - { - ret = _linkPool.Pop(); - fromPool = true; - } - else - ret = new HtmlLink(); - } - else if (element.type == HtmlElementType.Input) - { - string type = element.GetString("type"); - if (type != null) - type = type.ToLower(); - if (type == "button" || type == "submit") - { - if (_buttonPool.Count > 0 && _poolManager != null) - { - ret = _buttonPool.Pop(); - fromPool = true; - } - else - { - if (HtmlButton.resource != null) - ret = new HtmlButton(); - else - Debug.LogWarning("FairyGUI: Set HtmlButton.resource first"); - } - } - else - { - if (_inputPool.Count > 0 && _poolManager != null) - { - ret = _inputPool.Pop(); - fromPool = true; - } - else - ret = new HtmlInput(); - } - } - else if (element.type == HtmlElementType.Select) - { - if (_selectPool.Count > 0 && _poolManager != null) - { - ret = _selectPool.Pop(); - fromPool = true; - } - else - { - if (HtmlSelect.resource != null) - ret = new HtmlSelect(); - else - Debug.LogWarning("FairyGUI: Set HtmlSelect.resource first"); - } - } - - //Debug.Log("from=" + fromPool); - if (ret != null) - { - //可能已经被GameObject tree deleted了,不再使用 - if (fromPool && ret.displayObject != null && ret.displayObject.isDisposed) - { - ret.Dispose(); - return CreateObject(owner, element); - - } - ret.Create(owner, element); - if (ret.displayObject != null) - ret.displayObject.home = owner.cachedTransform; - } - - return ret; - } - - virtual public void FreeObject(IHtmlObject obj) - { - if (_poolManager == null) - { - obj.Dispose(); - return; - } - - //可能已经被GameObject tree deleted了,不再回收 - if (obj.displayObject != null && obj.displayObject.isDisposed) - { - obj.Dispose(); - return; - } - - obj.Release(); - if (obj is HtmlImage) - _imagePool.Push(obj); - else if (obj is HtmlInput) - _inputPool.Push(obj); - else if (obj is HtmlButton) - _buttonPool.Push(obj); - else if (obj is HtmlLink) - _linkPool.Push(obj); - - if (obj.displayObject != null) - obj.displayObject.cachedTransform.SetParent(_poolManager, false); - } - - virtual public NTexture GetImageTexture(HtmlImage image) - { - return null; - } - - virtual public void FreeImageTexture(HtmlImage image, NTexture texture) - { - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs.meta deleted file mode 100644 index 0b75b19..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5454bca8f43f9094ea66614837a2c0be -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs deleted file mode 100644 index 3c378a3..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlParseOptions - { - /// - /// - /// - public bool linkUnderline; - - /// - /// - /// - public Color linkColor; - - /// - /// - /// - public Color linkBgColor; - - /// - /// - /// - public Color linkHoverBgColor; - - /// - /// - /// - public bool ignoreWhiteSpace; - - /// - /// - /// - public static bool DefaultLinkUnderline = true; - - /// - /// - /// - public static Color DefaultLinkColor = new Color32(0x3A, 0x67, 0xCC, 0xFF); - - /// - /// - /// - public static Color DefaultLinkBgColor = Color.clear; - - /// - /// - /// - public static Color DefaultLinkHoverBgColor = Color.clear; - - public HtmlParseOptions() - { - linkUnderline = DefaultLinkUnderline; - linkColor = DefaultLinkColor; - linkBgColor = DefaultLinkBgColor; - linkHoverBgColor = DefaultLinkHoverBgColor; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs.meta deleted file mode 100644 index f81921d..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8e3e6e98345b46a43a4181a0790d4f30 -timeCreated: 1470231110 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs deleted file mode 100644 index cdd3ec1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs +++ /dev/null @@ -1,395 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlParser - { - public static HtmlParser inst = new HtmlParser(); - - protected class TextFormat2 : TextFormat - { - public bool colorChanged; - } - - protected List _textFormatStack; - protected int _textFormatStackTop; - protected TextFormat2 _format; - protected List _elements; - protected HtmlParseOptions _defaultOptions; - - static List sHelperList1 = new List(); - static List sHelperList2 = new List(); - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - inst = new HtmlParser(); - } -#endif - - public HtmlParser() - { - _textFormatStack = new List(); - _format = new TextFormat2(); - _defaultOptions = new HtmlParseOptions(); - } - - virtual public void Parse(string aSource, TextFormat defaultFormat, List elements, HtmlParseOptions parseOptions) - { - if (parseOptions == null) - parseOptions = _defaultOptions; - - _elements = elements; - _textFormatStackTop = 0; - _format.CopyFrom(defaultFormat); - _format.colorChanged = false; - int skipText = 0; - bool ignoreWhiteSpace = parseOptions.ignoreWhiteSpace; - bool skipNextCR = false; - string text; - - XMLIterator.Begin(aSource, true); - while (XMLIterator.NextTag()) - { - if (skipText == 0) - { - text = XMLIterator.GetText(ignoreWhiteSpace); - if (text.Length > 0) - { - if (skipNextCR && text[0] == '\n') - text = text.Substring(1); - AppendText(text); - } - } - - skipNextCR = false; - switch (XMLIterator.tagName) - { - case "b": - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - _format.bold = true; - } - else - PopTextFormat(); - break; - - case "i": - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - _format.italic = true; - } - else - PopTextFormat(); - break; - - case "u": - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - _format.underline = true; - } - else - PopTextFormat(); - break; - - case "strike": - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - _format.strikethrough = true; - } - else - PopTextFormat(); - break; - - case "sub": - { - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - _format.specialStyle = TextFormat.SpecialStyle.Subscript; - } - else - PopTextFormat(); - } - break; - - case "sup": - { - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - _format.specialStyle = TextFormat.SpecialStyle.Superscript; - } - else - PopTextFormat(); - } - break; - - case "font": - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - - _format.size = XMLIterator.GetAttributeInt("size", _format.size); - string color = XMLIterator.GetAttribute("color"); - if (color != null) - { - string[] parts = color.Split(','); - if (parts.Length == 1) - { - _format.color = ToolSet.ConvertFromHtmlColor(color); - _format.gradientColor = null; - _format.colorChanged = true; - } - else - { - if (_format.gradientColor == null) - _format.gradientColor = new Color32[4]; - _format.gradientColor[0] = ToolSet.ConvertFromHtmlColor(parts[0]); - _format.gradientColor[1] = ToolSet.ConvertFromHtmlColor(parts[1]); - if (parts.Length > 2) - { - _format.gradientColor[2] = ToolSet.ConvertFromHtmlColor(parts[2]); - if (parts.Length > 3) - _format.gradientColor[3] = ToolSet.ConvertFromHtmlColor(parts[3]); - else - _format.gradientColor[3] = _format.gradientColor[2]; - } - else - { - _format.gradientColor[2] = _format.gradientColor[0]; - _format.gradientColor[3] = _format.gradientColor[1]; - } - } - } - } - else if (XMLIterator.tagType == XMLTagType.End) - PopTextFormat(); - break; - - case "br": - AppendText("\n"); - break; - - case "img": - if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) - { - HtmlElement element = HtmlElement.GetElement(HtmlElementType.Image); - element.FetchAttributes(); - element.name = element.GetString("name"); - element.format.align = _format.align; - _elements.Add(element); - } - break; - - case "a": - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - - _format.underline = _format.underline || parseOptions.linkUnderline; - if (!_format.colorChanged && parseOptions.linkColor.a != 0) - _format.color = parseOptions.linkColor; - - HtmlElement element = HtmlElement.GetElement(HtmlElementType.Link); - element.FetchAttributes(); - element.name = element.GetString("name"); - element.format.align = _format.align; - _elements.Add(element); - } - else if (XMLIterator.tagType == XMLTagType.End) - { - PopTextFormat(); - - HtmlElement element = HtmlElement.GetElement(HtmlElementType.LinkEnd); - _elements.Add(element); - } - break; - - case "input": - { - HtmlElement element = HtmlElement.GetElement(HtmlElementType.Input); - element.FetchAttributes(); - element.name = element.GetString("name"); - element.format.CopyFrom(_format); - _elements.Add(element); - } - break; - - case "select": - { - if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) - { - HtmlElement element = HtmlElement.GetElement(HtmlElementType.Select); - element.FetchAttributes(); - if (XMLIterator.tagType == XMLTagType.Start) - { - sHelperList1.Clear(); - sHelperList2.Clear(); - while (XMLIterator.NextTag()) - { - if (XMLIterator.tagName == "select") - break; - - if (XMLIterator.tagName == "option") - { - if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) - sHelperList2.Add(XMLIterator.GetAttribute("value", string.Empty)); - else - sHelperList1.Add(XMLIterator.GetText()); - } - } - element.Set("items", sHelperList1.ToArray()); - element.Set("values", sHelperList2.ToArray()); - } - element.name = element.GetString("name"); - element.format.CopyFrom(_format); - _elements.Add(element); - } - } - break; - - case "p": - if (XMLIterator.tagType == XMLTagType.Start) - { - PushTextFormat(); - string align = XMLIterator.GetAttribute("align"); - switch (align) - { - case "center": - _format.align = AlignType.Center; - break; - case "right": - _format.align = AlignType.Right; - break; - } - if (!IsNewLine()) - AppendText("\n"); - } - else if (XMLIterator.tagType == XMLTagType.End) - { - AppendText("\n"); - skipNextCR = true; - - PopTextFormat(); - } - break; - - case "ui": - case "div": - case "li": - if (XMLIterator.tagType == XMLTagType.Start) - { - if (!IsNewLine()) - AppendText("\n"); - } - else - { - AppendText("\n"); - skipNextCR = true; - } - break; - - case "html": - case "body": - //full html - ignoreWhiteSpace = true; - break; - - case "head": - case "style": - case "script": - case "form": - if (XMLIterator.tagType == XMLTagType.Start) - skipText++; - else if (XMLIterator.tagType == XMLTagType.End) - skipText--; - break; - } - } - - if (skipText == 0) - { - text = XMLIterator.GetText(ignoreWhiteSpace); - if (text.Length > 0) - { - if (skipNextCR && text[0] == '\n') - text = text.Substring(1); - AppendText(text); - } - } - - _elements = null; - } - - protected void PushTextFormat() - { - TextFormat2 tf; - if (_textFormatStack.Count <= _textFormatStackTop) - { - tf = new TextFormat2(); - _textFormatStack.Add(tf); - } - else - tf = _textFormatStack[_textFormatStackTop]; - tf.CopyFrom(_format); - tf.colorChanged = _format.colorChanged; - _textFormatStackTop++; - } - - protected void PopTextFormat() - { - if (_textFormatStackTop > 0) - { - TextFormat2 tf = _textFormatStack[_textFormatStackTop - 1]; - _format.CopyFrom(tf); - _format.colorChanged = tf.colorChanged; - _textFormatStackTop--; - } - } - - protected bool IsNewLine() - { - if (_elements.Count > 0) - { - HtmlElement element = _elements[_elements.Count - 1]; - if (element != null && element.type == HtmlElementType.Text) - return element.text.EndsWith("\n"); - else - return false; - } - - return true; - } - - protected void AppendText(string text) - { - HtmlElement element; - if (_elements.Count > 0) - { - element = _elements[_elements.Count - 1]; - if (element.type == HtmlElementType.Text && element.format.EqualStyle(_format)) - { - element.text += text; - return; - } - } - - element = HtmlElement.GetElement(HtmlElementType.Text); - element.text = text; - element.format.CopyFrom(_format); - _elements.Add(element); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs.meta deleted file mode 100644 index 023f296..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7ddf5eb218ff0cf438894e2ceb54f494 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs deleted file mode 100644 index ae55ba2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class HtmlSelect : IHtmlObject - { - public GComboBox comboBox { get; private set; } - - public const string CHANGED_EVENT = "OnHtmlSelectChanged"; - - public static string resource; - - RichTextField _owner; - HtmlElement _element; - EventCallback0 _changeHandler; - - public HtmlSelect() - { - comboBox = UIPackage.CreateObjectFromURL(resource).asComboBox; - _changeHandler = () => - { - _owner.DispatchEvent(CHANGED_EVENT, null, this); - }; - } - - public DisplayObject displayObject - { - get { return comboBox.displayObject; } - } - - public HtmlElement element - { - get { return _element; } - } - - public float width - { - get { return comboBox != null ? comboBox.width : 0; } - } - - public float height - { - get { return comboBox != null ? comboBox.height : 0; } - } - - public void Create(RichTextField owner, HtmlElement element) - { - _owner = owner; - _element = element; - - if (comboBox == null) - return; - - comboBox.onChanged.Add(_changeHandler); - - int width = element.GetInt("width", comboBox.sourceWidth); - int height = element.GetInt("height", comboBox.sourceHeight); - comboBox.SetSize(width, height); - comboBox.items = (string[])element.Get("items"); - comboBox.values = (string[])element.Get("values"); - comboBox.value = element.GetString("value"); - } - - public void SetPosition(float x, float y) - { - if (comboBox != null) - comboBox.SetXY(x, y); - } - - public void Add() - { - if (comboBox != null) - _owner.AddChild(comboBox.displayObject); - } - - public void Remove() - { - if (comboBox != null && comboBox.displayObject.parent != null) - _owner.RemoveChild(comboBox.displayObject); - } - - public void Release() - { - if (comboBox != null) - comboBox.RemoveEventListeners(); - - _owner = null; - _element = null; - } - - public void Dispose() - { - if (comboBox != null) - comboBox.Dispose(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs.meta deleted file mode 100644 index 9be7ae0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a9047de8f5e36634b9cb9d7270dfb1e8 -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs deleted file mode 100644 index cfe2d9a..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// Create->SetPosition->(Add<->Remove)->Release->Dispose - /// - public interface IHtmlObject - { - float width { get; } - float height { get; } - DisplayObject displayObject { get; } - HtmlElement element { get; } - - void Create(RichTextField owner, HtmlElement element); - void SetPosition(float x, float y); - void Add(); - void Remove(); - void Release(); - void Dispose(); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs.meta deleted file mode 100644 index c256bf1..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d5a416822d3ee0a4d80e32f6a03ba56f -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs deleted file mode 100644 index 8073e75..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs +++ /dev/null @@ -1,15 +0,0 @@ - -namespace FairyGUI.Utils -{ - /// - /// - /// - public interface IHtmlPageContext - { - IHtmlObject CreateObject(RichTextField owner, HtmlElement element); - void FreeObject(IHtmlObject obj); - - NTexture GetImageTexture(HtmlImage image); - void FreeImageTexture(HtmlImage image, NTexture texture); - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs.meta deleted file mode 100644 index 97be559..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0f24771f8977b674aa4fbf86f45e2105 -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs deleted file mode 100644 index 36ec266..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs +++ /dev/null @@ -1,282 +0,0 @@ -using System.Collections.Generic; -using System.Collections; -using UnityEngine; - -namespace FairyGUI -{ - public delegate void TimerCallback(object param); - - /// - /// - /// - public class Timers - { - public static int repeat; - public static float time; - - public static bool catchCallbackExceptions = false; - - Dictionary _items; - Dictionary _toAdd; - List _toRemove; - List _pool; - - TimersEngine _engine; - GameObject gameObject; - - private static Timers _inst; - public static Timers inst - { - get - { - if (_inst == null) - _inst = new Timers(); - return _inst; - } - } - -#if UNITY_2019_3_OR_NEWER - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void InitializeOnLoad() - { - _inst = null; - } -#endif - - public Timers() - { - _inst = this; - gameObject = new GameObject("[FairyGUI.Timers]"); - gameObject.hideFlags = HideFlags.HideInHierarchy; - gameObject.SetActive(true); - Object.DontDestroyOnLoad(gameObject); - - _engine = gameObject.AddComponent(); - - _items = new Dictionary(); - _toAdd = new Dictionary(); - _toRemove = new List(); - _pool = new List(100); - } - - public void Add(float interval, int repeat, TimerCallback callback) - { - Add(interval, repeat, callback, null); - } - - /** - * @interval in seconds - * @repeat 0 indicate loop infinitely, otherwise the run count - **/ - public void Add(float interval, int repeat, TimerCallback callback, object callbackParam) - { - if (callback == null) - { - Debug.LogWarning("timer callback is null, " + interval + "," + repeat); - return; - } - - Anymous_T t; - if (_items.TryGetValue(callback, out t)) - { - t.set(interval, repeat, callback, callbackParam); - t.elapsed = 0; - t.deleted = false; - return; - } - - if (_toAdd.TryGetValue(callback, out t)) - { - t.set(interval, repeat, callback, callbackParam); - return; - } - - t = GetFromPool(); - t.interval = interval; - t.repeat = repeat; - t.callback = callback; - t.param = callbackParam; - _toAdd[callback] = t; - } - - public void CallLater(TimerCallback callback) - { - Add(0.001f, 1, callback); - } - - public void CallLater(TimerCallback callback, object callbackParam) - { - Add(0.001f, 1, callback, callbackParam); - } - - public void AddUpdate(TimerCallback callback) - { - Add(0.001f, 0, callback); - } - - public void AddUpdate(TimerCallback callback, object callbackParam) - { - Add(0.001f, 0, callback, callbackParam); - } - - public void StartCoroutine(IEnumerator routine) - { - _engine.StartCoroutine(routine); - } - - public bool Exists(TimerCallback callback) - { - if (_toAdd.ContainsKey(callback)) - return true; - - Anymous_T at; - if (_items.TryGetValue(callback, out at)) - return !at.deleted; - - return false; - } - - public void Remove(TimerCallback callback) - { - Anymous_T t; - if (_toAdd.TryGetValue(callback, out t)) - { - _toAdd.Remove(callback); - ReturnToPool(t); - } - - if (_items.TryGetValue(callback, out t)) - t.deleted = true; - } - - private Anymous_T GetFromPool() - { - Anymous_T t; - int cnt = _pool.Count; - if (cnt > 0) - { - t = _pool[cnt - 1]; - _pool.RemoveAt(cnt - 1); - t.deleted = false; - t.elapsed = 0; - } - else - t = new Anymous_T(); - return t; - } - - private void ReturnToPool(Anymous_T t) - { - t.callback = null; - _pool.Add(t); - } - - public void Update() - { - float dt = Time.unscaledDeltaTime; - Dictionary.Enumerator iter; - - if (_items.Count > 0) - { - iter = _items.GetEnumerator(); - while (iter.MoveNext()) - { - Anymous_T i = iter.Current.Value; - if (i.deleted) - { - _toRemove.Add(i); - continue; - } - - i.elapsed += dt; - if (i.elapsed < i.interval) - continue; - - i.elapsed -= i.interval; - if (i.elapsed < 0 || i.elapsed > 0.03f) - i.elapsed = 0; - - if (i.repeat > 0) - { - i.repeat--; - if (i.repeat == 0) - { - i.deleted = true; - _toRemove.Add(i); - } - } - repeat = i.repeat; - if (i.callback != null) - { - if (catchCallbackExceptions) - { - try - { - i.callback(i.param); - } - catch (System.Exception e) - { - i.deleted = true; - Debug.LogWarning("FairyGUI: timer(internal=" + i.interval + ", repeat=" + i.repeat + ") callback error > " + e.Message); - } - } - else - i.callback(i.param); - } - } - iter.Dispose(); - } - - int len = _toRemove.Count; - if (len > 0) - { - for (int k = 0; k < len; k++) - { - Anymous_T i = _toRemove[k]; - if (i.deleted && i.callback != null) - { - _items.Remove(i.callback); - ReturnToPool(i); - } - } - _toRemove.Clear(); - } - - if (_toAdd.Count > 0) - { - iter = _toAdd.GetEnumerator(); - while (iter.MoveNext()) - _items.Add(iter.Current.Key, iter.Current.Value); - iter.Dispose(); - _toAdd.Clear(); - } - } - } - - class Anymous_T - { - public float interval; - public int repeat; - public TimerCallback callback; - public object param; - - public float elapsed; - public bool deleted; - - public void set(float interval, int repeat, TimerCallback callback, object param) - { - this.interval = interval; - this.repeat = repeat; - this.callback = callback; - this.param = param; - } - } - - class TimersEngine : MonoBehaviour - { - void Update() - { - Timers.inst.Update(); - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs.meta deleted file mode 100644 index ccb4ee0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ae007a032c404234b875df43f3129117 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs deleted file mode 100644 index ca06b66..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs +++ /dev/null @@ -1,136 +0,0 @@ -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public static class ToolSet - { - public static Color ConvertFromHtmlColor(string str) - { - if (str.Length < 7 || str[0] != '#') - return Color.black; - - if (str.Length == 9) - { - //optimize:avoid using Convert.ToByte and Substring - //return new Color32(Convert.ToByte(str.Substring(3, 2), 16), Convert.ToByte(str.Substring(5, 2), 16), - // Convert.ToByte(str.Substring(7, 2), 16), Convert.ToByte(str.Substring(1, 2), 16)); - - return new Color32((byte)(CharToHex(str[3]) * 16 + CharToHex(str[4])), - (byte)(CharToHex(str[5]) * 16 + CharToHex(str[6])), - (byte)(CharToHex(str[7]) * 16 + CharToHex(str[8])), - (byte)(CharToHex(str[1]) * 16 + CharToHex(str[2]))); - } - else - { - //return new Color32(Convert.ToByte(str.Substring(1, 2), 16), Convert.ToByte(str.Substring(3, 2), 16), - //Convert.ToByte(str.Substring(5, 2), 16), 255); - - return new Color32((byte)(CharToHex(str[1]) * 16 + CharToHex(str[2])), - (byte)(CharToHex(str[3]) * 16 + CharToHex(str[4])), - (byte)(CharToHex(str[5]) * 16 + CharToHex(str[6])), - 255); - } - } - - public static Color ColorFromRGB(int value) - { - return new Color(((value >> 16) & 0xFF) / 255f, ((value >> 8) & 0xFF) / 255f, (value & 0xFF) / 255f, 1); - } - - public static Color ColorFromRGBA(uint value) - { - return new Color(((value >> 16) & 0xFF) / 255f, ((value >> 8) & 0xFF) / 255f, (value & 0xFF) / 255f, ((value >> 24) & 0xFF) / 255f); - } - - public static int CharToHex(char c) - { - if (c >= '0' && c <= '9') - return (int)c - 48; - if (c >= 'A' && c <= 'F') - return 10 + (int)c - 65; - else if (c >= 'a' && c <= 'f') - return 10 + (int)c - 97; - else - return 0; - } - - public static Rect Intersection(ref Rect rect1, ref Rect rect2) - { - if (rect1.width == 0 || rect1.height == 0 || rect2.width == 0 || rect2.height == 0) - return new Rect(0, 0, 0, 0); - - float left = rect1.xMin > rect2.xMin ? rect1.xMin : rect2.xMin; - float right = rect1.xMax < rect2.xMax ? rect1.xMax : rect2.xMax; - float top = rect1.yMin > rect2.yMin ? rect1.yMin : rect2.yMin; - float bottom = rect1.yMax < rect2.yMax ? rect1.yMax : rect2.yMax; - - if (left > right || top > bottom) - return new Rect(0, 0, 0, 0); - else - return Rect.MinMaxRect(left, top, right, bottom); - } - - public static Rect Union(ref Rect rect1, ref Rect rect2) - { - if (rect2.width == 0 || rect2.height == 0) - return rect1; - - if (rect1.width == 0 || rect1.height == 0) - return rect2; - - float x = Mathf.Min(rect1.x, rect2.x); - float y = Mathf.Min(rect1.y, rect2.y); - return new Rect(x, y, Mathf.Max(rect1.xMax, rect2.xMax) - x, Mathf.Max(rect1.yMax, rect2.yMax) - y); - } - - public static void SkewMatrix(ref Matrix4x4 matrix, float skewX, float skewY) - { - skewX = -skewX * Mathf.Deg2Rad; - skewY = -skewY * Mathf.Deg2Rad; - float sinX = Mathf.Sin(skewX); - float cosX = Mathf.Cos(skewX); - float sinY = Mathf.Sin(skewY); - float cosY = Mathf.Cos(skewY); - - float m00 = matrix.m00 * cosY - matrix.m10 * sinX; - float m10 = matrix.m00 * sinY + matrix.m10 * cosX; - float m01 = matrix.m01 * cosY - matrix.m11 * sinX; - float m11 = matrix.m01 * sinY + matrix.m11 * cosX; - float m02 = matrix.m02 * cosY - matrix.m12 * sinX; - float m12 = matrix.m02 * sinY + matrix.m12 * cosX; - - matrix.m00 = m00; - matrix.m10 = m10; - matrix.m01 = m01; - matrix.m11 = m11; - matrix.m02 = m02; - matrix.m12 = m12; - } - - public static void RotateUV(Vector2[] uv, ref Rect baseUVRect) - { - int vertCount = uv.Length; - float xMin = Mathf.Min(baseUVRect.xMin, baseUVRect.xMax); - float yMin = baseUVRect.yMin; - float yMax = baseUVRect.yMax; - if (yMin > yMax) - { - yMin = yMax; - yMax = baseUVRect.yMin; - } - - float tmp; - for (int i = 0; i < vertCount; i++) - { - Vector2 m = uv[i]; - tmp = m.y; - m.y = yMin + m.x - xMin; - m.x = xMin + yMax - tmp; - uv[i] = m; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs.meta deleted file mode 100644 index d6bfa39..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 54357cad16a6ccb4ea698f76bb43527c -timeCreated: 1460480287 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs deleted file mode 100644 index dcbbff2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs +++ /dev/null @@ -1,226 +0,0 @@ -using System.Collections.Generic; -using System.Text; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class UBBParser - { - public static UBBParser inst = new UBBParser(); - - string _text; - int _readPos; - - public TagHandler defaultTagHandler; - public Dictionary handlers; - - public int defaultImgWidth = 0; - public int defaultImgHeight = 0; - - public delegate string TagHandler(string tagName, bool end, string attr); - - public UBBParser() - { - handlers = new Dictionary(); - handlers["url"] = onTag_URL; - handlers["img"] = onTag_IMG; - handlers["b"] = onTag_Simple; - handlers["i"] = onTag_Simple; - handlers["u"] = onTag_Simple; - handlers["sup"] = onTag_Simple; - handlers["sub"] = onTag_Simple; - handlers["color"] = onTag_COLOR; - handlers["font"] = onTag_FONT; - handlers["size"] = onTag_SIZE; - handlers["align"] = onTag_ALIGN; - handlers["strike"] = onTag_Simple; - } - - protected string onTag_URL(string tagName, bool end, string attr) - { - if (!end) - { - if (attr != null) - return ""; - else - { - string href = GetTagText(false); - return ""; - } - } - else - return ""; - } - - protected string onTag_IMG(string tagName, bool end, string attr) - { - if (!end) - { - string src = GetTagText(true); - if (src == null || src.Length == 0) - return null; - - if (defaultImgWidth != 0) - return ""; - else - return ""; - } - else - return null; - } - - protected string onTag_Simple(string tagName, bool end, string attr) - { - return end ? ("") : ("<" + tagName + ">"); - } - - protected string onTag_COLOR(string tagName, bool end, string attr) - { - if (!end) - return ""; - else - return ""; - } - - protected string onTag_FONT(string tagName, bool end, string attr) - { - if (!end) - return ""; - else - return ""; - } - - protected string onTag_SIZE(string tagName, bool end, string attr) - { - if (!end) - return ""; - else - return ""; - } - - protected string onTag_ALIGN(string tagName, bool end, string attr) - { - if (!end) - return "

"; - else - return "

"; - } - - public string GetTagText(bool remove) - { - int pos1 = _readPos; - int pos2; - StringBuilder buffer = null; - while ((pos2 = _text.IndexOf('[', pos1)) != -1) - { - if (buffer == null) - buffer = new StringBuilder(); - - if (_text[pos2 - 1] == '\\') - { - buffer.Append(_text, pos1, pos2 - pos1 - 1); - buffer.Append('['); - pos1 = pos2 + 1; - } - else - { - buffer.Append(_text, pos1, pos2 - pos1); - break; - } - } - if (pos2 == -1) - return null; - - if (remove) - _readPos = pos2; - - return buffer.ToString(); - } - - public string Parse(string text) - { - _text = text; - int pos1 = 0, pos2, pos3; - bool end; - string tag, attr; - string repl; - StringBuilder buffer = null; - TagHandler func; - while ((pos2 = _text.IndexOf('[', pos1)) != -1) - { - if (buffer == null) - buffer = new StringBuilder(); - - if (pos2 > 0 && _text[pos2 - 1] == '\\') - { - buffer.Append(_text, pos1, pos2 - pos1 - 1); - buffer.Append('['); - pos1 = pos2 + 1; - continue; - } - - buffer.Append(_text, pos1, pos2 - pos1); - pos1 = pos2; - pos2 = _text.IndexOf(']', pos1); - if (pos2 == -1) - break; - - if (pos2 == pos1 + 1) - { - buffer.Append(_text, pos1, 2); - pos1 = pos2 + 1; - continue; - } - - end = _text[pos1 + 1] == '/'; - pos3 = end ? pos1 + 2 : pos1 + 1; - tag = _text.Substring(pos3, pos2 - pos3); - _readPos = pos2 + 1; - attr = null; - repl = null; - pos3 = tag.IndexOf('='); - if (pos3 != -1) - { - attr = tag.Substring(pos3 + 1); - tag = tag.Substring(0, pos3); - } - tag = tag.ToLower(); - if (handlers.TryGetValue(tag, out func)) - { - repl = func(tag, end, attr); - if (repl != null) - buffer.Append(repl); - } - else if (defaultTagHandler != null) - { - repl = defaultTagHandler(tag, end, attr); - if (repl != null) - buffer.Append(repl); - else - buffer.Append(_text, pos1, pos2 - pos1 + 1); - } - else - { - buffer.Append(_text, pos1, pos2 - pos1 + 1); - } - pos1 = _readPos; - } - - if (buffer == null) - { - _text = null; - return text; - } - else - { - if (pos1 < _text.Length) - buffer.Append(_text, pos1, _text.Length - pos1); - - _text = null; - return buffer.ToString(); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs.meta deleted file mode 100644 index 86987c0..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 916709794f601f949962dffdb251b946 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs deleted file mode 100644 index 28a0473..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs +++ /dev/null @@ -1,427 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using UnityEngine; - -namespace FairyGUI.Utils -{ - /// - /// A simplest and readonly XML class - /// - public class XML - { - public string name; - public string text; - - Dictionary _attributes; - XMLList _children; - - public static XML Create(string tag) - { - XML xml = new XML(); - xml.name = tag; - return xml; - } - - public XML(string XmlString) - { - Parse(XmlString); - } - - private XML() - { - } - - public Dictionary attributes - { - get - { - if (_attributes == null) - _attributes = new Dictionary(); - return _attributes; - } - } - - public bool HasAttribute(string attrName) - { - if (_attributes == null) - return false; - - return _attributes.ContainsKey(attrName); - } - - public string GetAttribute(string attrName) - { - return GetAttribute(attrName, null); - } - - public string GetAttribute(string attrName, string defValue) - { - if (_attributes == null) - return defValue; - - string ret; - if (_attributes.TryGetValue(attrName, out ret)) - return ret; - else - return defValue; - } - - public int GetAttributeInt(string attrName) - { - return GetAttributeInt(attrName, 0); - } - - public int GetAttributeInt(string attrName, int defValue) - { - string value = GetAttribute(attrName); - if (value == null || value.Length == 0) - return defValue; - - int ret; - if (int.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public float GetAttributeFloat(string attrName) - { - return GetAttributeFloat(attrName, 0); - } - - public float GetAttributeFloat(string attrName, float defValue) - { - string value = GetAttribute(attrName); - if (value == null || value.Length == 0) - return defValue; - - float ret; - if (float.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public bool GetAttributeBool(string attrName) - { - return GetAttributeBool(attrName, false); - } - - public bool GetAttributeBool(string attrName, bool defValue) - { - string value = GetAttribute(attrName); - if (value == null || value.Length == 0) - return defValue; - - bool ret; - if (bool.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public string[] GetAttributeArray(string attrName) - { - string value = GetAttribute(attrName); - if (value != null) - { - if (value.Length == 0) - return new string[] { }; - else - return value.Split(','); - } - else - return null; - } - - public string[] GetAttributeArray(string attrName, char seperator) - { - string value = GetAttribute(attrName); - if (value != null) - { - if (value.Length == 0) - return new string[] { }; - else - return value.Split(seperator); - } - else - return null; - } - - public Color GetAttributeColor(string attrName, Color defValue) - { - string value = GetAttribute(attrName); - if (value == null || value.Length == 0) - return defValue; - - return ToolSet.ConvertFromHtmlColor(value); - } - - public Vector2 GetAttributeVector(string attrName) - { - string value = GetAttribute(attrName); - if (value != null) - { - string[] arr = value.Split(','); - return new Vector2(float.Parse(arr[0]), float.Parse(arr[1])); - } - else - return Vector2.zero; - } - - public void SetAttribute(string attrName, string attrValue) - { - if (_attributes == null) - _attributes = new Dictionary(); - - _attributes[attrName] = attrValue; - } - - public void SetAttribute(string attrName, bool attrValue) - { - if (_attributes == null) - _attributes = new Dictionary(); - - _attributes[attrName] = attrValue ? "true" : "false"; - } - - public void SetAttribute(string attrName, int attrValue) - { - if (_attributes == null) - _attributes = new Dictionary(); - - _attributes[attrName] = attrValue.ToString(); - } - - public void SetAttribute(string attrName, float attrValue) - { - if (_attributes == null) - _attributes = new Dictionary(); - - _attributes[attrName] = string.Format("{0:0.####}", attrValue); - } - - public void RemoveAttribute(string attrName) - { - if (_attributes != null) - _attributes.Remove(attrName); - } - - public XML GetNode(string selector) - { - if (_children == null) - return null; - else - return _children.Find(selector); - } - - public XMLList elements - { - get - { - if (_children == null) - _children = new XMLList(); - return _children; - } - } - - public XMLList Elements() - { - if (_children == null) - _children = new XMLList(); - return _children; - } - - public XMLList Elements(string selector) - { - if (_children == null) - _children = new XMLList(); - return _children.Filter(selector); - } - - public XMLList.Enumerator GetEnumerator() - { - if (_children == null) - return new XMLList.Enumerator(null, null); - else - return new XMLList.Enumerator(_children.rawList, null); - } - - public XMLList.Enumerator GetEnumerator(string selector) - { - if (_children == null) - return new XMLList.Enumerator(null, selector); - else - return new XMLList.Enumerator(_children.rawList, selector); - } - - public void AppendChild(XML child) - { - this.elements.Add(child); - } - - public void RemoveChild(XML child) - { - if (_children == null) - return; - - this._children.rawList.Remove(child); - } - - public void RemoveChildren(string selector) - { - if (_children == null) - return; - - if (string.IsNullOrEmpty(selector)) - _children.Clear(); - else - _children.RemoveAll(selector); - } - - static Stack sNodeStack = new Stack(); - public void Parse(string aSource) - { - Reset(); - - XML lastOpenNode = null; - sNodeStack.Clear(); - - XMLIterator.Begin(aSource); - while (XMLIterator.NextTag()) - { - if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) - { - XML childNode; - if (lastOpenNode != null) - childNode = new XML(); - else - { - if (this.name != null) - { - Reset(); - throw new Exception("Invalid xml format - no root node."); - } - childNode = this; - } - - childNode.name = XMLIterator.tagName; - childNode._attributes = XMLIterator.GetAttributes(childNode._attributes); - - if (lastOpenNode != null) - { - if (XMLIterator.tagType != XMLTagType.Void) - sNodeStack.Push(lastOpenNode); - if (lastOpenNode._children == null) - lastOpenNode._children = new XMLList(); - lastOpenNode._children.Add(childNode); - } - if (XMLIterator.tagType != XMLTagType.Void) - lastOpenNode = childNode; - } - else if (XMLIterator.tagType == XMLTagType.End) - { - if (lastOpenNode == null || lastOpenNode.name != XMLIterator.tagName) - { - Reset(); - throw new Exception("Invalid xml format - <" + XMLIterator.tagName + "> dismatched."); - } - - if (lastOpenNode._children == null || lastOpenNode._children.Count == 0) - { - lastOpenNode.text = XMLIterator.GetText(); - } - - if (sNodeStack.Count > 0) - lastOpenNode = sNodeStack.Pop(); - else - lastOpenNode = null; - } - } - } - - public void Reset() - { - if (_attributes != null) - _attributes.Clear(); - if (_children != null) - _children.Clear(); - this.text = null; - } - - public string ToXMLString(bool includeHeader) - { - StringBuilder sb = new StringBuilder(); - if (includeHeader) - sb.Append("\n"); - ToXMLString(sb, 0); - return sb.ToString(); - } - - void ToXMLString(StringBuilder sb, int tabs) - { - if (tabs > 0) - sb.Append(' ', tabs * 2); - - if (name == "!") - { - sb.Append(""); - return; - } - - sb.Append('<').Append(name); - if (_attributes != null) - { - foreach (KeyValuePair kv in _attributes) - { - sb.Append(' '); - sb.Append(kv.Key).Append('=').Append('\"'); - int c = sb.Length; - sb.Append(kv.Value); - XMLUtils.EncodeString(sb, c, true); - sb.Append("\""); - } - } - - int numChildren = _children != null ? _children.Count : 0; - - if (string.IsNullOrEmpty(text) && numChildren == 0) - sb.Append("/>"); - else - { - sb.Append('>'); - - if (!string.IsNullOrEmpty(text)) - { - int c = sb.Length; - sb.Append(text); - XMLUtils.EncodeString(sb, c); - } - - if (numChildren > 0) - { - sb.Append('\n'); - int ctabs = tabs + 1; - for (int i = 0; i < numChildren; i++) - { - _children[i].ToXMLString(sb, ctabs); - sb.Append('\n'); - } - - if (tabs > 0) - sb.Append(' ', tabs * 2); - } - - sb.Append(""); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs.meta deleted file mode 100644 index 1aa64ce..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8375f35e0c0dbc4429287ee8578f3cf1 -timeCreated: 1460480288 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs deleted file mode 100644 index 3415170..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs +++ /dev/null @@ -1,485 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; - -namespace FairyGUI.Utils -{ - public enum XMLTagType - { - Start, - End, - Void, - CDATA, - Comment, - Instruction - } - - /// - /// - /// - public class XMLIterator - { - public static string tagName; - public static XMLTagType tagType; - public static string lastTagName; - - static string source; - static int sourceLen; - static int parsePos; - static int tagPos; - static int tagLength; - static int lastTagEnd; - static bool attrParsed; - static bool lowerCaseName; - static StringBuilder buffer = new StringBuilder(); - static Dictionary attributes = new Dictionary(); - - const string CDATA_START = ""; - const string COMMENT_START = ""; - - public static void Begin(string source, bool lowerCaseName = false) - { - XMLIterator.source = source; - XMLIterator.lowerCaseName = lowerCaseName; - sourceLen = source.Length; - parsePos = 0; - lastTagEnd = 0; - tagPos = 0; - tagLength = 0; - tagName = null; - } - - public static bool NextTag() - { - int pos; - char c; - tagType = XMLTagType.Start; - buffer.Length = 0; - lastTagEnd = parsePos; - attrParsed = false; - lastTagName = tagName; - - while ((pos = source.IndexOf('<', parsePos)) != -1) - { - parsePos = pos; - pos++; - - if (pos == sourceLen) - break; - - c = source[pos]; - if (c == '!') - { - if (sourceLen > pos + 7 && source.Substring(pos - 1, 9) == CDATA_START) - { - pos = source.IndexOf(CDATA_END, pos); - tagType = XMLTagType.CDATA; - tagName = string.Empty; - tagPos = parsePos; - if (pos == -1) - tagLength = sourceLen - parsePos; - else - tagLength = pos + 3 - parsePos; - parsePos += tagLength; - return true; - } - else if (sourceLen > pos + 2 && source.Substring(pos - 1, 4) == COMMENT_START) - { - pos = source.IndexOf(COMMENT_END, pos); - tagType = XMLTagType.Comment; - tagName = string.Empty; - tagPos = parsePos; - if (pos == -1) - tagLength = sourceLen - parsePos; - else - tagLength = pos + 3 - parsePos; - parsePos += tagLength; - return true; - } - else - { - pos++; - tagType = XMLTagType.Instruction; - } - } - else if (c == '/') - { - pos++; - tagType = XMLTagType.End; - } - else if (c == '?') - { - pos++; - tagType = XMLTagType.Instruction; - } - - for (; pos < sourceLen; pos++) - { - c = source[pos]; - if (Char.IsWhiteSpace(c) || c == '>' || c == '/') - break; - } - if (pos == sourceLen) - break; - - buffer.Append(source, parsePos + 1, pos - parsePos - 1); - if (buffer.Length > 0 && buffer[0] == '/') - buffer.Remove(0, 1); - - bool singleQuoted = false, doubleQuoted = false; - int possibleEnd = -1; - for (; pos < sourceLen; pos++) - { - c = source[pos]; - if (c == '"') - { - if (!singleQuoted) - doubleQuoted = !doubleQuoted; - } - else if (c == '\'') - { - if (!doubleQuoted) - singleQuoted = !singleQuoted; - } - - if (c == '>') - { - if (!(singleQuoted || doubleQuoted)) - { - possibleEnd = -1; - break; - } - - possibleEnd = pos; - } - else if (c == '<') - break; - } - if (possibleEnd != -1) - pos = possibleEnd; - - if (pos == sourceLen) - break; - - if (source[pos - 1] == '/') - tagType = XMLTagType.Void; - - tagName = buffer.ToString(); - if (lowerCaseName) - tagName = tagName.ToLower(); - tagPos = parsePos; - tagLength = pos + 1 - parsePos; - parsePos += tagLength; - - return true; - } - - tagPos = sourceLen; - tagLength = 0; - tagName = null; - return false; - } - - public static string GetTagSource() - { - return source.Substring(tagPos, tagLength); - } - - public static string GetRawText(bool trim = false) - { - if (lastTagEnd == tagPos) - return string.Empty; - else if (trim) - { - int i = lastTagEnd; - for (; i < tagPos; i++) - { - char c = source[i]; - if (!char.IsWhiteSpace(c)) - break; - } - - if (i == tagPos) - return string.Empty; - else - return source.Substring(i, tagPos - i).TrimEnd(); - } - else - return source.Substring(lastTagEnd, tagPos - lastTagEnd); - } - - public static string GetText(bool trim = false) - { - if (lastTagEnd == tagPos) - return string.Empty; - else if (trim) - { - int i = lastTagEnd; - for (; i < tagPos; i++) - { - char c = source[i]; - if (!char.IsWhiteSpace(c)) - break; - } - - if (i == tagPos) - return string.Empty; - else - return XMLUtils.DecodeString(source.Substring(i, tagPos - i).TrimEnd()); - } - else - return XMLUtils.DecodeString(source.Substring(lastTagEnd, tagPos - lastTagEnd)); - } - - public static bool HasAttribute(string attrName) - { - if (!attrParsed) - { - attributes.Clear(); - ParseAttributes(attributes); - attrParsed = true; - } - - return attributes.ContainsKey(attrName); - } - - public static string GetAttribute(string attrName) - { - if (!attrParsed) - { - attributes.Clear(); - ParseAttributes(attributes); - attrParsed = true; - } - - string value; - if (attributes.TryGetValue(attrName, out value)) - return value; - else - return null; - } - - public static string GetAttribute(string attrName, string defValue) - { - string ret = GetAttribute(attrName); - if (ret != null) - return ret; - else - return defValue; - } - - public static int GetAttributeInt(string attrName) - { - return GetAttributeInt(attrName, 0); - } - - public static int GetAttributeInt(string attrName, int defValue) - { - string value = GetAttribute(attrName); - if (value == null || value.Length == 0) - return defValue; - - int ret; - if (int.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public static float GetAttributeFloat(string attrName) - { - return GetAttributeFloat(attrName, 0); - } - - public static float GetAttributeFloat(string attrName, float defValue) - { - string value = GetAttribute(attrName); - if (value == null || value.Length == 0) - return defValue; - - float ret; - if (float.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public static bool GetAttributeBool(string attrName) - { - return GetAttributeBool(attrName, false); - } - - public static bool GetAttributeBool(string attrName, bool defValue) - { - string value = GetAttribute(attrName); - if (value == null || value.Length == 0) - return defValue; - - bool ret; - if (bool.TryParse(value, out ret)) - return ret; - else - return defValue; - } - - public static Dictionary GetAttributes(Dictionary result) - { - if (result == null) - result = new Dictionary(); - - if (attrParsed) - { - foreach (KeyValuePair kv in attributes) - result[kv.Key] = kv.Value; - } - else //这里没有先ParseAttributes再赋值给result是为了节省复制的操作 - ParseAttributes(result); - - return result; - } - - public static Hashtable GetAttributes(Hashtable result) - { - if (result == null) - result = new Hashtable(); - - if (attrParsed) - { - foreach (KeyValuePair kv in attributes) - result[kv.Key] = kv.Value; - } - else //这里没有先ParseAttributes再赋值给result是为了节省复制的操作 - ParseAttributes(result); - - return result; - } - - static void ParseAttributes(IDictionary attrs) - { - string attrName; - int valueStart; - int valueEnd; - bool waitValue = false; - int quoted; - buffer.Length = 0; - int i = tagPos; - int attrEnd = tagPos + tagLength; - - if (i < attrEnd && source[i] == '<') - { - for (; i < attrEnd; i++) - { - char c = source[i]; - if (Char.IsWhiteSpace(c) || c == '>' || c == '/') - break; - } - } - - for (; i < attrEnd; i++) - { - char c = source[i]; - if (c == '=') - { - valueStart = -1; - valueEnd = -1; - quoted = 0; - for (int j = i + 1; j < attrEnd; j++) - { - char c2 = source[j]; - if (Char.IsWhiteSpace(c2)) - { - if (valueStart != -1 && quoted == 0) - { - valueEnd = j - 1; - break; - } - } - else if (c2 == '>') - { - if (quoted == 0) - { - valueEnd = j - 1; - break; - } - } - else if (c2 == '"') - { - if (valueStart != -1) - { - if (quoted != 1) - { - valueEnd = j - 1; - break; - } - } - else - { - quoted = 2; - valueStart = j + 1; - } - } - else if (c2 == '\'') - { - if (valueStart != -1) - { - if (quoted != 2) - { - valueEnd = j - 1; - break; - } - } - else - { - quoted = 1; - valueStart = j + 1; - } - } - else if (valueStart == -1) - { - valueStart = j; - } - } - - if (valueStart != -1 && valueEnd != -1) - { - attrName = buffer.ToString(); - if (lowerCaseName) - attrName = attrName.ToLower(); - buffer.Length = 0; - attrs[attrName] = XMLUtils.DecodeString(source.Substring(valueStart, valueEnd - valueStart + 1)); - i = valueEnd + 1; - } - else - break; - } - else if (!Char.IsWhiteSpace(c)) - { - if (waitValue || c == '/' || c == '>') - { - if (buffer.Length > 0) - { - attrName = buffer.ToString(); - if (lowerCaseName) - attrName = attrName.ToLower(); - attrs[attrName] = string.Empty; - buffer.Length = 0; - } - - waitValue = false; - } - - if (c != '/' && c != '>') - buffer.Append(c); - } - else - { - if (buffer.Length > 0) - waitValue = true; - } - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs.meta deleted file mode 100644 index a67c170..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 35c75485c4f537341bbc16207588f75d -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs deleted file mode 100644 index c4710ee..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class XMLList - { - public List rawList; - - public XMLList() - { - rawList = new List(); - } - - public XMLList(List list) - { - rawList = list; - } - - public void Add(XML xml) - { - rawList.Add(xml); - } - - public void Clear() - { - rawList.Clear(); - } - - public int Count - { - get { return rawList.Count; } - } - - public XML this[int index] - { - get { return rawList[index]; } - } - - public Enumerator GetEnumerator() - { - return new Enumerator(rawList, null); - } - - public Enumerator GetEnumerator(string selector) - { - return new Enumerator(rawList, selector); - } - - static List _tmpList = new List(); - public XMLList Filter(string selector) - { - bool allFit = true; - _tmpList.Clear(); - int cnt = rawList.Count; - for (int i = 0; i < cnt; i++) - { - XML xml = rawList[i]; - if (xml.name == selector) - _tmpList.Add(xml); - else - allFit = false; - } - - if (allFit) - return this; - else - { - XMLList ret = new XMLList(_tmpList); - _tmpList = new List(); - return ret; - } - } - - public XML Find(string selector) - { - int cnt = rawList.Count; - for (int i = 0; i < cnt; i++) - { - XML xml = rawList[i]; - if (xml.name == selector) - return xml; - } - return null; - } - - public void RemoveAll(string selector) - { - rawList.RemoveAll(xml => xml.name == selector); - } - - public struct Enumerator - { - List _source; - string _selector; - int _index; - int _total; - XML _current; - - public Enumerator(List source, string selector) - { - _source = source; - _selector = selector; - _index = -1; - if (_source != null) - _total = _source.Count; - else - _total = 0; - _current = null; - } - - public XML Current - { - get { return _current; } - } - - public bool MoveNext() - { - while (++_index < _total) - { - _current = _source[_index]; - if (_selector == null || _current.name == _selector) - return true; - } - - return false; - } - - public void Erase() - { - _source.RemoveAt(_index); - _total--; - } - - public void Reset() - { - _index = -1; - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs.meta deleted file mode 100644 index ad09775..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 2f086b805cd249140987f7f3ec5b4567 -timeCreated: 1460480287 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs deleted file mode 100644 index ce00722..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System; -using System.Text; - -namespace FairyGUI.Utils -{ - /// - /// - /// - public class XMLUtils - { - public static string DecodeString(string aSource) - { - int len = aSource.Length; - StringBuilder sb = new StringBuilder(); - int pos1 = 0, pos2 = 0; - - while (true) - { - pos2 = aSource.IndexOf('&', pos1); - if (pos2 == -1) - { - sb.Append(aSource.Substring(pos1)); - break; - } - sb.Append(aSource.Substring(pos1, pos2 - pos1)); - - pos1 = pos2 + 1; - pos2 = pos1; - int end = Math.Min(len, pos2 + 10); - for (; pos2 < end; pos2++) - { - if (aSource[pos2] == ';') - break; - } - if (pos2 < end && pos2 > pos1) - { - string entity = aSource.Substring(pos1, pos2 - pos1); - int u = 0; - if (entity[0] == '#') - { - if (entity.Length > 1) - { - if (entity[1] == 'x') - u = Convert.ToInt16(entity.Substring(2), 16); - else - u = Convert.ToInt16(entity.Substring(1)); - sb.Append((char)u); - pos1 = pos2 + 1; - } - else - sb.Append('&'); - } - else - { - switch (entity) - { - case "amp": - u = 38; - break; - - case "apos": - u = 39; - break; - - case "gt": - u = 62; - break; - - case "lt": - u = 60; - break; - - case "nbsp": - u = 32; - break; - - case "quot": - u = 34; - break; - } - if (u > 0) - { - sb.Append((char)u); - pos1 = pos2 + 1; - } - else - sb.Append('&'); - } - } - else - { - sb.Append('&'); - } - } - - return sb.ToString(); - } - - private static string[] ESCAPES = new string[] { - "&", "&", - "<", "<", - ">", ">", - - "'", "'", - "\"", """, - "\t", " ", - "\n", " ", - "\r", " " - }; - public static void EncodeString(StringBuilder sb, int start, bool isAttribute = false) - { - int count; - int len = isAttribute ? ESCAPES.Length : 6; - for (int i = 0; i < len; i += 2) - { - count = sb.Length - start; - sb.Replace(ESCAPES[i], ESCAPES[i + 1], start, count); - } - } - - public static string EncodeString(string str, bool isAttribute = false) - { - if (string.IsNullOrEmpty(str)) - return ""; - else - { - StringBuilder sb = new StringBuilder(str); - EncodeString(sb, 0); - return sb.ToString(); - } - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs.meta deleted file mode 100644 index 3ad90a4..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 11312ca9745d52c4eb8e31630ad5ec7c -timeCreated: 1461773298 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs deleted file mode 100644 index 014eaa2..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs +++ /dev/null @@ -1,114 +0,0 @@ -namespace FairyGUI.Utils -{ - /// - /// 一个简单的Zip文件处理类。不处理解压。 - /// - public class ZipReader - { - /// - /// - /// - public class ZipEntry - { - public string name; - public int compress; - public uint crc; - public int size; - public int sourceSize; - public int offset; - public bool isDirectory; - } - - ByteBuffer _stream; - int _entryCount; - int _pos; - int _index; - - /// - /// - /// - /// - public ZipReader(byte[] data) - { - _stream = new ByteBuffer(data); - _stream.littleEndian = true; - - int pos = _stream.length - 22; - _stream.position = pos + 10; - _entryCount = _stream.ReadShort(); - _stream.position = pos + 16; - _pos = _stream.ReadInt(); - } - - /// - /// - /// - public int entryCount - { - get { return _entryCount; } - } - - /// - /// - /// - /// - public bool GetNextEntry(ZipEntry entry) - { - if (_index >= _entryCount) - return false; - - _stream.position = _pos + 28; - int len = _stream.ReadUshort(); - int len2 = _stream.ReadUshort() + _stream.ReadUshort(); - - _stream.position = _pos + 46; - string name = _stream.ReadString(len); - name = name.Replace("\\", "/"); - - entry.name = name; - if (name[name.Length - 1] == '/') //directory - { - entry.isDirectory = true; - entry.compress = 0; - entry.crc = 0; - entry.size = entry.sourceSize = 0; - entry.offset = 0; - } - else - { - entry.isDirectory = false; - _stream.position = _pos + 10; - entry.compress = _stream.ReadUshort(); - _stream.position = _pos + 16; - entry.crc = _stream.ReadUint(); - entry.size = _stream.ReadInt(); - entry.sourceSize = _stream.ReadInt(); - _stream.position = _pos + 42; - entry.offset = _stream.ReadInt() + 30 + len; - } - - _pos += 46 + len + len2; - _index++; - - return true; - } - - - /// - /// - /// - /// - /// - public byte[] GetEntryData(ZipEntry entry) - { - byte[] data = new byte[entry.size]; - if (entry.size > 0) - { - _stream.position = entry.offset; - _stream.ReadBytes(data, 0, entry.size); - } - - return data; - } - } -} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs.meta deleted file mode 100644 index a91eef5..0000000 --- a/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8dc25ae9114bda14f998652db54f3af9 -timeCreated: 1535374214 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft.meta b/Assets/Plugins/Ilumisoft.meta deleted file mode 100644 index 17c5523..0000000 --- a/Assets/Plugins/Ilumisoft.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ec2d10492f2db2e4683c321142889a38 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control.meta b/Assets/Plugins/Ilumisoft/Graphics Control.meta deleted file mode 100644 index 78874bc..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dd9e5788bd58dc94a8f5161f95f48c09 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor.meta deleted file mode 100644 index f885879..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 91f6694d9af26674ba4e4fe44c158994 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos.meta deleted file mode 100644 index 374eb54..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d94f4f4610deb6141a30ab088321c1fc -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/Apache-License.txt b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/Apache-License.txt deleted file mode 100644 index d645695..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/Apache-License.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/Apache-License.txt.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/Apache-License.txt.meta deleted file mode 100644 index 2cebefc..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/Apache-License.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6b41102e005499b4fa8ef743cd1a3eb3 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_setting.png b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_setting.png deleted file mode 100644 index f9d22b8..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_setting.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_setting.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_setting.png.meta deleted file mode 100644 index 3284ec9..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_setting.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: 688fa00e4a40a034eacc71c7a11ff9d0 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_applier.png b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_applier.png deleted file mode 100644 index 0238ee6..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_applier.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_applier.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_applier.png.meta deleted file mode 100644 index 1e4bd60..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_applier.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: 511d86b6354e6d6408dff5c757484b7f -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 0 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_manager.png b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_manager.png deleted file mode 100644 index 6247c7b..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_manager.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_manager.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_manager.png.meta deleted file mode 100644 index 901dae0..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_manager.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: e7051facbc4e30c4d9a591e094d964c6 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 0 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_panel.png b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_panel.png deleted file mode 100644 index 25be825..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_panel.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_panel.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_panel.png.meta deleted file mode 100644 index 91cc488..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_panel.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: cde92c4be2e51894bb915456c3d44460 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 0 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_storage.png b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_storage.png deleted file mode 100644 index 7591500..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_storage.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_storage.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_storage.png.meta deleted file mode 100644 index 063cf1e..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Editor/Gizmos/icon_graphic_settings_storage.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: 7dad77b6f99af7c449e384b57c7b7519 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 0 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Get Started.pdf b/Assets/Plugins/Ilumisoft/Graphics Control/Get Started.pdf deleted file mode 100644 index 47f24b8..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Get Started.pdf and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Get Started.pdf.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Get Started.pdf.meta deleted file mode 100644 index 8f54039..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Get Started.pdf.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 69b2352afbee3504cbba2f00925e39e1 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Graphics Control URP.unitypackage b/Assets/Plugins/Ilumisoft/Graphics Control/Graphics Control URP.unitypackage deleted file mode 100644 index c8360af..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Graphics Control URP.unitypackage and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Graphics Control URP.unitypackage.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Graphics Control URP.unitypackage.meta deleted file mode 100644 index 21681a8..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Graphics Control URP.unitypackage.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 910fc764f9169d143808be031c9ff9dd -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs.meta deleted file mode 100644 index a952121..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4431a584582e708419cf32f09fc08a03 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Manager.prefab b/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Manager.prefab deleted file mode 100644 index a6760ef..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Manager.prefab +++ /dev/null @@ -1,197 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &7561718578292959414 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7561718578292959402} - - component: {fileID: 7561718578292959413} - - component: {fileID: 6043774419731639396} - - component: {fileID: 3286230411840164263} - - component: {fileID: 8009668182481372814} - - component: {fileID: 7149442473694971042} - - component: {fileID: 5519723345750621080} - - component: {fileID: 8300191077721077188} - - component: {fileID: 5662176316609581430} - - component: {fileID: 4920004841624098045} - - component: {fileID: 6986222736741424793} - - component: {fileID: 647396049969870023} - - component: {fileID: 7302355327536008264} - m_Layer: 0 - m_Name: Graphic Settings Manager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7561718578292959402 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &7561718578292959413 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d746c2c65da7e444cbdffb049efbcd08, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &6043774419731639396 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dd455d9a41581ae4d9e05ce3218d7ae7, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &3286230411840164263 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 954b3a7630ee6b84680bd1ae3c6b9393, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &8009668182481372814 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 438c606e3c3e3b440bbc978d859f759b, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &7149442473694971042 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 43e4b0176d7b9c8458e46f9587b50868, type: 3} - m_Name: - m_EditorClassIdentifier: - EnabledOptions: 15 - DefaultOption: 0 ---- !u!114 &5519723345750621080 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0db9cdd8379cfca4b8d2230daaacfd5d, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &8300191077721077188 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f677a30b5f601d4aac04bd65aeb366a, type: 3} - m_Name: - m_EditorClassIdentifier: - IsEnabledByDefault: 1 ---- !u!114 &5662176316609581430 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d77ee60ff507582488de1b21409b4ffd, type: 3} - m_Name: - m_EditorClassIdentifier: - IsEnabledByDefault: 1 ---- !u!114 &4920004841624098045 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a34ac59a2b342ac4d95043f9d43cd773, type: 3} - m_Name: - m_EditorClassIdentifier: - IsEnabledByDefault: 1 ---- !u!114 &6986222736741424793 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ab1af6deb663e5047800769e92315fb1, type: 3} - m_Name: - m_EditorClassIdentifier: - IsEnabledByDefault: 1 ---- !u!114 &647396049969870023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: faecca85295be1440be1629220477394, type: 3} - m_Name: - m_EditorClassIdentifier: - IsEnabledByDefault: 1 ---- !u!114 &7302355327536008264 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7561718578292959414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 06578898b8ae5ba408a50bdc92f95b6a, type: 3} - m_Name: - m_EditorClassIdentifier: - IsEnabledByDefault: 1 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Manager.prefab.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Manager.prefab.meta deleted file mode 100644 index 7c3ae19..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Manager.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 17519c4c722838c41add80aae5ae9b43 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Panel.prefab b/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Panel.prefab deleted file mode 100644 index 328bdc3..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Panel.prefab +++ /dev/null @@ -1,787 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &4188684299239068553 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 685773581538143215} - - component: {fileID: 5795655416697611962} - m_Layer: 0 - m_Name: Graphic Settings Panel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &685773581538143215 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4188684299239068553} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8743124263224040758} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &5795655416697611962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4188684299239068553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3074d3c0feba9fc4f84a74849ac39d65, type: 3} - m_Name: - m_EditorClassIdentifier: - container: {fileID: 8743124262620463536} - MultiOptionSelectorPrefab: {fileID: 6122787298105787767, guid: 7f8bd3263e2d8e340932bede789696e3, type: 3} ---- !u!1 &8743124262173325911 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124262173325912} - m_Layer: 0 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124262173325912 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262173325911} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8743124263902500267} - m_Father: {fileID: 8743124263766170473} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &8743124262264935860 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124262264935861} - - component: {fileID: 8743124262264935864} - - component: {fileID: 8743124262264935863} - - component: {fileID: 8743124262264935862} - m_Layer: 0 - m_Name: Viewport - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124262264935861 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262264935860} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8743124262620463536} - m_Father: {fileID: 8743124263224040758} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!222 &8743124262264935864 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262264935860} - m_CullTransparentMesh: 1 ---- !u!114 &8743124262264935863 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262264935860} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8743124262264935862 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262264935860} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!1 &8743124262605185034 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124262605185035} - m_Layer: 0 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124262605185035 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262605185034} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8743124263316548205} - m_Father: {fileID: 8743124263801308464} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &8743124262620463503 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124262620463536} - - component: {fileID: 8743124262620463538} - - component: {fileID: 8743124262620463537} - m_Layer: 0 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124262620463536 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262620463503} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8743124262264935861} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!114 &8743124262620463538 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262620463503} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 20 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!114 &8743124262620463537 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124262620463503} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!1 &8743124263224040757 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124263224040758} - - component: {fileID: 8743124263224040759} - - component: {fileID: 820880968026358309} - m_Layer: 0 - m_Name: Scroll View - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124263224040758 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263224040757} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8743124262264935861} - - {fileID: 8743124263766170473} - - {fileID: 8743124263801308464} - m_Father: {fileID: 685773581538143215} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &8743124263224040759 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263224040757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 8743124262620463536} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 2 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 8743124262264935861} - m_HorizontalScrollbar: {fileID: 8743124263766170474} - m_VerticalScrollbar: {fileID: 8743124263801308465} - m_HorizontalScrollbarVisibility: 2 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &820880968026358309 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263224040757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 458c41eab5f10bb45926d21f44fa218d, type: 3} - m_Name: - m_EditorClassIdentifier: - scrollSpeed: 5 ---- !u!1 &8743124263316548204 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124263316548205} - - component: {fileID: 8743124263316548207} - - component: {fileID: 8743124263316548206} - m_Layer: 0 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124263316548205 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263316548204} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8743124262605185035} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8743124263316548207 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263316548204} - m_CullTransparentMesh: 1 ---- !u!114 &8743124263316548206 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263316548204} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &8743124263766170472 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124263766170473} - - component: {fileID: 8743124263766170476} - - component: {fileID: 8743124263766170475} - - component: {fileID: 8743124263766170474} - m_Layer: 0 - m_Name: Scrollbar Horizontal - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124263766170473 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263766170472} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8743124262173325912} - m_Father: {fileID: 8743124263224040758} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 20} - m_Pivot: {x: 0, y: 0} ---- !u!222 &8743124263766170476 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263766170472} - m_CullTransparentMesh: 1 ---- !u!114 &8743124263766170475 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263766170472} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.15686275, g: 0.15686275, b: 0.15686275, a: 0.5019608} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8743124263766170474 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263766170472} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 8743124263902500268} - m_HandleRect: {fileID: 8743124263902500267} - m_Direction: 0 - m_Value: 1 - m_Size: 1 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &8743124263801308431 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124263801308464} - - component: {fileID: 8743124263801308467} - - component: {fileID: 8743124263801308466} - - component: {fileID: 8743124263801308465} - m_Layer: 0 - m_Name: Scrollbar Vertical - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124263801308464 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263801308431} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8743124262605185035} - m_Father: {fileID: 8743124263224040758} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 20, y: 0} - m_SizeDelta: {x: 20, y: 0} - m_Pivot: {x: 1, y: 1} ---- !u!222 &8743124263801308467 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263801308431} - m_CullTransparentMesh: 1 ---- !u!114 &8743124263801308466 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263801308431} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.15686275, g: 0.15686275, b: 0.15686275, a: 0.5019608} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8743124263801308465 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263801308431} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 8743124263316548206} - m_HandleRect: {fileID: 8743124263316548205} - m_Direction: 2 - m_Value: 1 - m_Size: 1 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &8743124263902500266 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8743124263902500267} - - component: {fileID: 8743124263902500269} - - component: {fileID: 8743124263902500268} - m_Layer: 0 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8743124263902500267 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263902500266} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8743124262173325912} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8743124263902500269 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263902500266} - m_CullTransparentMesh: 1 ---- !u!114 &8743124263902500268 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8743124263902500266} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Panel.prefab.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Panel.prefab.meta deleted file mode 100644 index b6ced3f..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Graphic Settings Panel.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2f64764278885e3438c7e7e3ebb84335 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Multi Option Selector.prefab b/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Multi Option Selector.prefab deleted file mode 100644 index 9f0906a..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Multi Option Selector.prefab +++ /dev/null @@ -1,859 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &2768824449632093921 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7558317624205864325} - - component: {fileID: 2506309692949557781} - - component: {fileID: 5550398250797667501} - - component: {fileID: 3630441247388380681} - m_Layer: 0 - m_Name: Arrow Left - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7558317624205864325 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2768824449632093921} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5744080056727061207} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 25, y: 0} - m_SizeDelta: {x: 50, y: 50} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &2506309692949557781 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2768824449632093921} - m_CullTransparentMesh: 1 ---- !u!114 &5550398250797667501 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2768824449632093921} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 0728e75ff02cc344989e09570f37ac4f, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &3630441247388380681 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2768824449632093921} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0f1b5a37363ca0c468220aeff6833044, type: 3} - m_Name: - m_EditorClassIdentifier: - OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 5744080056224006126} - m_TargetAssemblyTypeName: UnityEngine.UI.Selectable, UnityEngine.UI - m_MethodName: Select - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - m_Target: {fileID: 6122787298105787767} - m_TargetAssemblyTypeName: Ilumisoft.GraphicsControl.UI.DefaultMultiOptionSelector, - Ilumisoft.GraphicsControl - m_MethodName: SelectPreviousOption - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &2850466793078442572 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6867593330258438919} - - component: {fileID: 4546594921422077176} - - component: {fileID: 6317916640999922455} - - component: {fileID: 4986277679451459583} - m_Layer: 0 - m_Name: Arrow Right - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6867593330258438919 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2850466793078442572} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5744080056727061207} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -25, y: 0} - m_SizeDelta: {x: 50, y: 50} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &4546594921422077176 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2850466793078442572} - m_CullTransparentMesh: 1 ---- !u!114 &6317916640999922455 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2850466793078442572} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 5bc3d9a43036b9b4491566738f4ac6e4, type: 3} - m_Type: 0 - m_PreserveAspect: 1 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4986277679451459583 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2850466793078442572} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0f1b5a37363ca0c468220aeff6833044, type: 3} - m_Name: - m_EditorClassIdentifier: - OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 5744080056224006126} - m_TargetAssemblyTypeName: UnityEngine.UI.Selectable, UnityEngine.UI - m_MethodName: Select - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - m_Target: {fileID: 6122787298105787767} - m_TargetAssemblyTypeName: Ilumisoft.GraphicsControl.UI.DefaultMultiOptionSelector, - Ilumisoft.GraphicsControl - m_MethodName: SelectNextOption - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &5744080055512379814 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5744080055512379815} - - component: {fileID: 5744080055512379817} - - component: {fileID: 5744080055512379816} - m_Layer: 0 - m_Name: Value Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5744080055512379815 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080055512379814} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5744080056727061207} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 300, y: 50} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5744080055512379817 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080055512379814} - m_CullTransparentMesh: 1 ---- !u!114 &5744080055512379816 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080055512379814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Value - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, type: 2} - m_sharedMaterial: {fileID: -3558660214557783719, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 35.7 - m_fontSizeBase: 36 - m_fontWeight: 400 - m_enableAutoSizing: 1 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 16 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &5744080055866783279 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5744080055866783248} - - component: {fileID: 5744080055866783250} - - component: {fileID: 5744080055866783249} - m_Layer: 0 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5744080055866783248 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080055866783279} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5744080056224006124} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 80} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &5744080055866783250 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080055866783279} - m_CullTransparentMesh: 1 ---- !u!114 &5744080055866783249 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080055866783279} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.15686275, g: 0.15686275, b: 0.15686275, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &5744080056224006123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5744080056224006124} - - component: {fileID: 6122787298105787767} - - component: {fileID: 5744080056224006126} - - component: {fileID: 6339805346379946461} - m_Layer: 0 - m_Name: Multi Option Selector - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5744080056224006124 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056224006123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5744080055866783248} - - {fileID: 5744080056614415231} - - {fileID: 5744080056727061207} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1000, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &6122787298105787767 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056224006123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 552bbb859029b3642848169db0e28eab, type: 3} - m_Name: - m_EditorClassIdentifier: - labelText: {fileID: 5744080056995771648} - valueText: {fileID: 5744080055512379816} - selectionChangedSFX: {fileID: 8300000, guid: 7d43d7f11f9bc654bbee0bddf6806513, type: 3} - verticalMovementSFX: {fileID: 8300000, guid: c7ff994a431bb1547af461969c794c7e, type: 3} - loop: 1 ---- !u!114 &5744080056224006126 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056224006123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 2 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0.15686275} - m_HighlightedColor: {r: 1, g: 1, b: 1, a: 0.15686275} - m_PressedColor: {r: 1, g: 1, b: 1, a: 0.5019608} - m_SelectedColor: {r: 1, g: 1, b: 1, a: 0.5019608} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5744080055866783249} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!82 &6339805346379946461 -AudioSource: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056224006123} - m_Enabled: 1 - serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 0} - m_PlayOnAwake: 0 - m_Volume: 1 - m_Pitch: 1 - Loop: 0 - Mute: 0 - Spatialize: 0 - SpatializePostEffects: 0 - Priority: 128 - DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 - Pan2D: 0 - rolloffMode: 0 - BypassEffects: 0 - BypassListenerEffects: 0 - BypassReverbZones: 0 - rolloffCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - - serializedVersion: 3 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - panLevelCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - spreadCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - reverbZoneMixCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 ---- !u!1 &5744080056614415230 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5744080056614415231} - m_Layer: 0 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5744080056614415231 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056614415230} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5744080056995771679} - m_Father: {fileID: 5744080056224006124} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &5744080056727061206 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5744080056727061207} - m_Layer: 0 - m_Name: Value - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5744080056727061207 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056727061206} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5744080055512379815} - - {fileID: 7558317624205864325} - - {fileID: 6867593330258438919} - m_Father: {fileID: 5744080056224006124} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 450, y: 100} - m_Pivot: {x: 1, y: 0.5} ---- !u!1 &5744080056995771678 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5744080056995771679} - - component: {fileID: 5744080056995771649} - - component: {fileID: 5744080056995771648} - m_Layer: 0 - m_Name: Label Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5744080056995771679 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056995771678} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5744080056614415231} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 25, y: 0} - m_SizeDelta: {x: -50, y: 50} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5744080056995771649 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056995771678} - m_CullTransparentMesh: 1 ---- !u!114 &5744080056995771648 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5744080056995771678} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: 'Entry - -' - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, type: 2} - m_sharedMaterial: {fileID: -3558660214557783719, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 36 - m_fontSizeBase: 36 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 16 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Multi Option Selector.prefab.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Multi Option Selector.prefab.meta deleted file mode 100644 index 5a3b0d0..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Prefabs/Multi Option Selector.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 7f8bd3263e2d8e340932bede789696e3 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/README URP.txt b/Assets/Plugins/Ilumisoft/Graphics Control/README URP.txt deleted file mode 100644 index c765dfa..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/README URP.txt +++ /dev/null @@ -1,2 +0,0 @@ -In an URP project, please import the "Graphics Control URP" Unity package. -The default sample scene ( that has been created for the Built-In Renderpipeline) will be replaced by one created for the URP. \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/README URP.txt.meta b/Assets/Plugins/Ilumisoft/Graphics Control/README URP.txt.meta deleted file mode 100644 index 1b0e358..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/README URP.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 69385465c4d15a24ebfea843d944248e -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Resources.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Resources.meta deleted file mode 100644 index e3ea53b..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Resources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dc5a7d42a4499014d93d036ab058194f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft.meta deleted file mode 100644 index 53ea84d..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c1eba40d5829df543b52dbb979ec1d15 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control.meta deleted file mode 100644 index d346b84..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dcacd2b6ee2b48e4ca6d15f7b8be4d5e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control/Configuration.asset b/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control/Configuration.asset deleted file mode 100644 index e895371..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Resources/Ilumisoft/Graphics Control/Configuration.asset +++ /dev/null @@ -1,17 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 295992f08e41b134b92787aaf7435315, type: 3} - m_Name: Configuration - m_EditorClassIdentifier: - GraphicSettingsManager: {fileID: 7561718578292959414, guid: 17519c4c722838c41add80aae5ae9b43, type: 3} - AutoCreate: 1 - GraphicSettingsPanel: {fileID: 4188684299239068553, guid: 2f64764278885e3438c7e7e3ebb84335, type: 3} diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample.meta deleted file mode 100644 index 06633ce..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 89fb2ba7932518448a5f24ced96b7652 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts.meta deleted file mode 100644 index 1505f9a..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e414c2540c184a64085acdb8ae46270b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins.meta deleted file mode 100644 index 375a34f..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fb90802e63349f34a8fb022b6e038586 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/OFL.txt b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/OFL.txt deleted file mode 100644 index 76df3b5..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/OFL.txt.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/OFL.txt.meta deleted file mode 100644 index b481b02..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/OFL.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 04fcd7b16a36be44db486e993545fc5a -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold SDF.asset b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold SDF.asset deleted file mode 100644 index 261993e..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold SDF.asset +++ /dev/null @@ -1,1674 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &-3558660214557783719 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Poppins-ExtraBold Atlas Material - m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - UNDERLAY_ON - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Cube: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _FaceTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: -302379094496337422} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OutlineTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _Ambient: 0.5 - - _Bevel: 0.5 - - _BevelClamp: 0 - - _BevelOffset: 0 - - _BevelRoundness: 0 - - _BevelWidth: 0 - - _BumpFace: 0 - - _BumpOutline: 0 - - _ColorMask: 15 - - _CullMode: 0 - - _Diffuse: 0.5 - - _FaceDilate: 0 - - _FaceUVSpeedX: 0 - - _FaceUVSpeedY: 0 - - _GlowInner: 0.05 - - _GlowOffset: 0 - - _GlowOuter: 0.05 - - _GlowPower: 0.75 - - _GradientScale: 10 - - _LightAngle: 3.1416 - - _MaskSoftnessX: 0 - - _MaskSoftnessY: 0 - - _OutlineSoftness: 0 - - _OutlineUVSpeedX: 0 - - _OutlineUVSpeedY: 0 - - _OutlineWidth: 0 - - _PerspectiveFilter: 0.875 - - _Reflectivity: 10 - - _ScaleRatioA: 0.9 - - _ScaleRatioB: 0.73125 - - _ScaleRatioC: 0.365625 - - _ScaleX: 1 - - _ScaleY: 1 - - _ShaderFlags: 0 - - _Sharpness: 0 - - _SpecularPower: 2 - - _Stencil: 0 - - _StencilComp: 8 - - _StencilOp: 0 - - _StencilReadMask: 255 - - _StencilWriteMask: 255 - - _TextureHeight: 1024 - - _TextureWidth: 1024 - - _UnderlayDilate: 0 - - _UnderlayOffsetX: 0.2 - - _UnderlayOffsetY: -1 - - _UnderlaySoftness: 1 - - _VertexOffsetX: 0 - - _VertexOffsetY: 0 - - _WeightBold: 0.75 - - _WeightNormal: 0 - m_Colors: - - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} - - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} - - _FaceColor: {r: 1, g: 1, b: 1, a: 1} - - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} - - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} - - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} - - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.27450982} - m_BuildTextureStacks: [] - m_AllowLocking: 1 ---- !u!28 &-302379094496337422 -Texture2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Poppins-ExtraBold Atlas - m_ImageContentsHash: - serializedVersion: 2 - Hash: 00000000000000000000000000000000 - m_IsAlphaChannelOptional: 0 - serializedVersion: 3 - m_Width: 1024 - m_Height: 1024 - m_CompleteImageSize: 1048576 - m_MipsStripped: 0 - m_TextureFormat: 1 - m_MipCount: 1 - m_IsReadable: 1 - m_IsPreProcessed: 0 - m_IgnoreMipmapLimit: 0 - m_MipmapLimitGroupName: - m_StreamingMipmaps: 0 - m_StreamingMipmapsPriority: 0 - m_VTOnly: 0 - m_AlphaIsTransparency: 0 - m_ImageCount: 1 - m_TextureDimension: 2 - m_TextureSettings: - serializedVersion: 2 - m_FilterMode: 1 - m_Aniso: 1 - m_MipBias: 0 - m_WrapU: 0 - m_WrapV: 0 - m_WrapW: 0 - m_LightmapFormat: 0 - m_ColorSpace: 0 - m_PlatformBlob: - image data: 1048576 - _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0d0f0f0f0e0b080705020000000000000000010406070a0d0e0f0f0e0c090806030000000000000000000406070a0d0e0f0f0e0c0906060300000000000000000000000000000000000000060b0e10111212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212120a0a0704000000000000000000000000000000000000000000000000000000000000000000020507080a0b0d0d0e0e0e0e0d0c0a08060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608091313131313131313131313131313131313131310100e0a05000000000000020507081313131313131313131313131313131313131312110f0c070100000000000000000000000000000000000000000000000000030506101313131313131313131313131313131313130d0c0a0702000000000000000004060710131313131313131313131313131313131313120707050100000000000000000000000000000000000000000000000000000000000000010406070a0d0f111213131313131313131311100e0b06000000000000000000000000000000000000000000000000000000000000000000000000000000030506080a0c0d0e0e0e0e0e0d0b0a080705020000000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c090400000000000000000000000000060a0e10111313131313131313131313131313131311100e0b06000000000000000000000000020507081313131313131313131313131313131313130c0b090601000000000000000000000000000000000000000003070b0d0e13131313131313131313131313131313131307070501000000000000000000000002080d1012131313131313131313131313131313131313131313131313131313131313131313131313131313130e0e0c080300000000000000000000000000000000000000000000000000000000000000020507080a0b0c0d0e0e0e0e0d0c0a09070604000000000000000000000000000000000000000000000000000000000002080d1012131313131313131313131313131313131313131313131313131313131313131313131313130b0b0905010000000000000000000000000000000000000000000000000000000000000000000004080a0a13131313131313131313131313131313130c0b090501000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c09040000000000000000000000000000000000000000000002090e111414181a1b1c1b1a181514120e09030000000001080d111314171a1b1c1c1b191515120f0a040000000001070c101314171a1b1c1c1b191613120f0b06000000000000000000000000000000040b12171b1d1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e171614100b05000000000000000000000000000000000000000000000000000000010407090e12141516181a1a1b1b1b1a1a19171513120f0b060502000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f121515202020202020202020202020202020202020201d1c1a16110a03000003090e121415202020202020202020202020202020202020201f1e1b18130c0500000000000000000000000000000000000000000000060b0f12131d2020202020202020202020202020202020201a1917130e080000000000070c1012131d2020202020202020202020202020202020201f1413110d080200000000000000000000000000000000000000000000000000000004070d11131417191c1d1f1f20202020202020201e1d1a17110b040000000000000000000000000000000000000000000000000000000000000000000306060b0f1213151718191a1b1b1b1a1918161514120e090806020000000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b1915100902000000000000000000040b11161a1d1e202020202020202020202020202020201e1d1a17110b04000000000000000002090e111414202020202020202020202020202020202020191816120d06000000000000000000000000000000000001080e13171a1a2020202020202020202020202020202020201413110d08020000000000000000060d14191c1f1f2020202020202020202020202020202020202020202020202020202020202020202020202020201b1a18140f090100000000000000000000000000000000000000000000000000030608080e1114141618191a1b1b1b1a1a1917151313100c070603000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020202020202020202020202020202020202020202020181715110c0600000000000000000000000000000000000000000000000000000000000000050b101416172020202020202020202020202020202020181815110c06000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b1915100902000000000000000000000000000000000000040a0f14191e20212427282928272521211e1a140f0a0402090e13191d20212427282928272522211f1b15110c0502080d12181d1f202326282929282623201f1c17110b06000000000000000000000000050e161d23272a2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2423201c17100800000000000000000000000000000000000000000000000002080d1113141a1e2021232526272728282727252422201f1c1714120e0903000000000000000000000000000000000000000000000000000000000000000000000000060e151b1f21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2926221c150d04060d141a1e21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2b28241e170f0600000000000000000000000000000000000000020a11171b1f202a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726231f19120a0200030b12181c1f202a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b21201d19130c05000000000000000000000000000000000000000000000000070c1013181d20202426282a2b2c2c2d2d2d2d2d2d2d2a2a27221d160e05000000000000000000000000000000000000000000000000000000000002050a0f1215171b1f2021232526272828282726252321201e1a1514120e090502000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000000050d151c2227292a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2a27221d160e05000000000000050d141a1e20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2524221e181109010000000000000000000000000000020b131a1f2426272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c21201d19130c040000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282724201a130b0300000000000000000000000000000000000000000001050a0f121515191e2021232526272728282726262422201f1c1813120f0b060000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2524211d18110900000000000000000000000000000000000000000000000000000000000810171c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2524221d181109000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000070e151b1f252a2d2e313435363534312e2d2a251f1b160b0d141a1e24292c2d303335363534322f2e2b26201c170d0c13191d24292c2d303335353534332f2d2b28221c17110a02000000000000000000040e1720282e333637383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838302f2c28211a1108000000000000000000000000000000000000000000040a0f13191d2021252a2d2e30323334343534343332302f2d2b2822211e1a140f0b0600000000000000000000000000000000000000000000000000000000000000000006101820262b2e2f393939393939393939393939393939393939393736322d271f170d0f171f262a2d2e393939393939393939393939393939393939393837342f2921180f000000000000000000000000000000000000020b141b22272b2d3639393939393939393939393939393939393933322f2a241c140a030c151c23282c2d37393939393939393939393939393939393939382e2d2a251e160e05000000000000000000000000000000000000000000030b12181c1f24292c2d30333537383939393939393939393736332e2720170e04000000000000000000000000000000000000000000000000000003090e12151b1f2122272b2d2e30323334343534343332302e2d2a2522211e1a15110e08020000000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c020000000000040d171f272e333637393939393939393939393939393939393736332e2720170e0400000000050e171f252a2d2e39393939393939393939393939393939393932312e29231b130900000000000000000000000000000b141d242b3033343939393939393939393939393939393939392e2d29251e160e040000000006101a222a303538393939393939393939393939393939393939393939393939393939393939393939393939393939393534302b251d150b0100000000000000000000000000000000000002080d11151b1f2122252a2d2e30313334343434343332312f2d2c2823201f1c17110d0802000000000000000000000000000000000006101a222a3035383939393939393939393939393939393939393939393939393939393939393939393939393932312e29221b120900000000000000000000000000000000000000000000000000000008111a22282d3031393939393939393939393939393939393932312e29231b1209000000000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c0200000000000000000000000000010a101920272b30363a3b3e40424242413e3b3a36312c272117171f252a2f35393a3d40414242413f3c3a37312d282218161e24292f35393a3d40414242413f3c3938332d28221c140b0500000000000000000b16202932393f43444545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545453d3c38332c231a1005000000000000000000000000000000000000030a0f161b1e24292c2d30363a3b3d3e404041414141403f3d3b3938332d2d2a251f1b17110a02000000000000000000000000000000000000000000000000000000000000030e18222a31373a3c4646464646464646464646464646464646464643423e3831291f0d17212931363a3b464646464646464646464646464646464646464544403a332b210f0600000000000000000000000000000000000a141d262d33373943464646464646464646464646464646464646403f3b362e261c0f0b151e272e34383a43464646464646464646464646464646464646453a3936302820160c0200000000000000000000000000000000000002080c151c23282c2f35393a3d4042444546464646464646464644433f39322920160b000000000000000000000000000000000000000000000000040a0f141a1e21262b2e2d3337393b3d3f404141414141403e3d3b3a36302f2e2b26201e19140f090300000000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e140900000000000b151f2931393f42444646464646464646464646464646464644433f39322920160b000000020d17202930363a3b4646464646464646464646464646464646463f3e3a342d251b1106000000000000000000000000020b1d262f363c3f414646464646464646464646464646464646463a3935302820160c020000020d18222c343b41444646464646464646464646464646464646464646464646464646464646464646464646464646464641403c372f271d13090000000000000000000000000000000002090e13191e20262b2e2f3036393b3d3e3f4041414141403f3d3c3a38342e2d2b28221c19140d07010000000000000000000000000000020d18222c343b4144464646464646464646464646464646464646464646464646464646464646464646464646463e3d3a342d241b11060000000000000000000000000000000000000000000000000005101a232c33393c3d46464646464646464646464646464646463f3d3a342d241b1106000000000000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e1409000000000000000000000000020a131c222b32373b4246474b4d4e4f4e4d4b4846423b38322722212930363a4145474a4d4e4f4f4e4c4847433c3933292420283035394045474a4d4e4f4f4e4c4946443f38332d261d170e0500000000000006121d28323b444b4f515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151514a48443e352c21170b0000000000000000000000000000000000060b151b21272c3035393a3e424648494b4d4d4e4e4e4d4d4c4a4846443f3b3a36312b27221b140b0701000000000000000000000000000000000000000000000000000000000a15202a343c43474853535353535353535353535353535353535353504f4a433b311f161f29333b4246485353535353535353535353535353535353535352504c453d3321180e0300000000000000000000000000000006111b262f383f4446505353535353535353535353535353535353534d4b4740382e2117121c27303940444650535353535353535353535353535353535353524746413a32281e13080000000000000000000000000000000000050c13191e272e34383a4045474a4c4f5052525353535353535353514f4a443b32271d110600000000000000000000000000000000000000000003090e151b1f252a2d31373a3c3f4446484a4b4c4d4e4e4e4d4c4b494846423f3b3a37312d2a251e1a150e0802000000000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100400000006111c27313b434a4f5153535353535353535353535353535353514f4a443b32271d1106000009141f29333b4246475353535353535353535353535353535353534c4a463f372d23180d0100000000000000000000000a141d2f3840474c4d5353535353535353535353535353535353534746413a32281e1308000008141f2a343e464d51525353535353535353535353535353535353535353535353535353535353535353535353535353534e4d4841392f251a0f030000000000000000000000000000070c141a1e252a2d31373a3c3f414647494b4c4d4e4e4e4d4d4c4a484645403c3938332d2a251e18130c040000000000000000000000000008141f2a343e464d51525353535353535353535353535353535353535353535353535353535353535353535353534b4a453f362d22180c010000000000000000000000000000000000000000000000000b17222c363e44494a53535353535353535353535353535353534b4a453f372d23180c01000000000000000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100400000000000000000000000a141c252e343c43474d5254575a5b5c5b5a5854534d48433d332d2c333b42464c5254575a5b5c5b5a5855534e49453e352f2b323a41454b515356595b5c5c5b595653504a443f382f2920170e0400000000000b17232e39444e565b5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e57554f473e33281c10040000000000000000000000000000020a111720262b32383a4145474b4d52545658595a5a5b5b5a5a58575553504a4846423b37332d261d18130c040000000000000000000000000000000000000000000000000000030f1b26313c464e5355606060606060606060606060606060606060605d5b554d4331281d26313b454d535f606060606060606060606060606060606060605e5c574f45332a2015090000000000000000000000000000000b17222d38414950535d6060606060606060606060606060606060605a58524a4033291f18232e39424a51535d6060606060606060606060606060606060605e54524c443a3025190d01000000000000000000000000000000060e171e252a30394044464b515357595b5d5e5f5f606060606060605d5b554d44392e22170b0000000000000000000000000000000000000000060b141a20262b31363a3c434748495053545658595a5b5b5b5a59585654524d4c4847423c3936302b262019140d05000000000000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2115090000000a16222e39434d555b5d606060606060606060606060606060605d5b554d44392e22170b00020e1a25303b454d5254606060606060606060606060606060606060585651493f34291e12020000000000000000000006111b262f404a52585a60606060606060606060606060606060605f54524c443a3025190d01000d1925303b4650585d5f6060606060606060606060606060606060606060606060606060606060606060606060606060605b59534b41372b201408000000000000000000000000030b12181f252a3036393c4347484c4d52545658595a5a5b5b5a5959575553514b4946443f38363029241d160d070000000000000000000000000d1925303b4650585d5f606060606060606060606060606060606060606060606060606060606060606060606060585650483f34291d1105000000000000000000000000000000000000000000000004101c28333e485055576060606060606060606060606060606060585651493f34291d110500000000000000000000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2115090000000000000000000008121c262e373f464e54565e6164676869686764615e57544e443f38363e454d52565d6063666869686765625f58555045413a343d444c52555d606366686868676662605b54504a423b322920160c02000000000e1b27333f4b5660676a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6361594f44382c20140700000000000000000000000000040b141b222731373d43484c525458575e61636566676768676766656362605b5454534d46443f382f29241d160d060000000000000000000000000000000000000000000000000006121f2b37434e585f626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a665f5543392f242a36424d575f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b686157463c31261a0f0200000000000000000000000000030f1b27333f49535b60696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c66635c52453b3126202834404a545c606a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b615e564c41362a1d11050000000000000000000000000000060f18202930363e424a5153555d606366686a6b6c6c6c6c6c6c6c6c6c6a675f554a3f33271a0e000000000000000000000000000000000000020a11171f252a32373b4246484e5355535b60616365666767686767666563615e575955534e4746413b37312a251e170e09030000000000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c0000010e1a27333f4a555f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a675f554a3f33271a0e0005111e2a36424d575e616c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e1f1408000000000000000000000b17222d3841525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c615e564c4135291d110500101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68645d53483c3024180c0000000000000000000000060c151c232830363a4146474e535559565e61636466676767676766656462605c555653504a46413b352f281f18120b0300000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625a50453a2e21150900000000000000000000000000000000000000000000000814202d3944505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51453a2e2215090000000000000000000000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c000000000000000000030c1a242e38404951586062696e717375757574716e696260585049413e4850575e61686d707374757574726f6a64615a514b433d474f565d60676d707374757574726f6c66605b544c443b32281e130800000000101d2a36434f5b677277787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878706b6155483c2f23160a000000000000000000000000040d161d262d333c43474f54565d606568696e70717373747474747372706e6c6665615e57535049413e352f281f180f060000000000000000000000000000000000000000000000000815212e3a47535f6a7679797979797979797979797979797979797979767166554b4035292d3a46535f697679797979797979797979797979797979797979787368584e43372b1f12060000000000000000000000000005121f2b3744505b656c76797979797979797979797979797979797979736e63574d42362a28323a44515c666d76797979797979797979797979797979797979786d685e5246392d20130700000000000000000000000000050e18212a323a414650545c6064676d70737577787979797979797979797771675b4f43362a1d100000000000000000000000000000000000060b141c222831363c43474d5354585f6266656c6e70727374747474747371706e696965625f5754524c47433c363029201a140d0500000000000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e020003101d2936424f5b677177797979797979797979797979797979797771675b4f43362a1d10000714202d3a46525e6975797979797979797979797979797979797979726d62564a3b3025190e020000000000000000030f1b27333f4953646e747979797979797979797979797979797979796d685e5246392d20130700121f2b3844515d697479797979797979797979797979797979797979797979797979797979797979797979797979797979746f64594d4034271a0e00000000000000000000080f181e272e343b42464c5254585f626569686e70717273747474747372706f6d676663605b54524c45413a3128231d150c03000000000000000000121f2b3844515d697479797979797979797979797979797979797979797979797979797979797979797979797979716c62564a3d3124170b00000000000000000000000000000000000000000000000a1623303c4955616c707979797979797979797979797979797979726d62564a3d3124180b0000000000000000000000000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e0000000000000000000b151e2c36404a525b636a6f757b7e80818281807e7b766f6a605b534948505a61696e747a7d80818282817f7c77716c605d554b464f5960686d73797d80818282817f7c78726c665e564c443a3024190d05000000111e2b3744515e6a77848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484847d7063574a3d3024170a0000000000000000000000040e161f282f383f444e53596063686d7175787b7c7e808081818180807f7d7b7975726e6964605b534f45413a312a2118100600000000000000000000000000000000000000000000000915222f3c4855626f7c868686868686868686868686868686868686868376675d5145392c2e3b4855616e7b8686868686868686868686868686868686868685786a5f53473a2e211406000000000000000000000000000613202d394653606c79838686868686868686868686868686868686868073695f53463d2f303a444f59606d7883868686868686868686868686868686868686847a6d6154473a2e211407000000000000000000000000020b17202a333b444c525a61666d71767a7d7f82838585868686868686868683776a5d5144372a1e1100000000000000000000000000000000080f181d262d333b42464e54575e61666a6f7276797b7d7e7f80818181807f7e7c7b7875726e6a66615e56534e46413b322a251f170f07000000000000000000000000000000131f2c3946525f6c7985868686868686868686868686868686868175685c4f4235291c0f020004111e2a3744515d6a77838686868686868686868686868686868683776a5d5144372a1e11000814212e3b4754616e7b8786868686868686868686868686868686867f7265564d41362a1e1105020202020202020205121f2b3744505b6574808686868686868686868686868686868686877a6d6154473a2e21140700131f2c3946525f6c79858686868686868686868686868686868686868686868686868686868686868686868686868686868174685b4e4135281b0e00000000000000000008111a222a303940444d52565e61666a6f7275787a7c7e7f8081818180807f7d7b7976736f6c66615e56514b433e342e271e150d030000000000000000131f2c3946525f6c79868686868686868686868686868686868686868686868686868686868686868686868686867e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d86868686868686868686868686868686867f7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985868686868686868686868686868686868275685c4f4235291c0f000000000000000007121d27303e48525c636d727c82878a8d8e8f8e8d8b87827c736c655b50505a616c707b81868a8d8e8f8e8d8b88837e756d675d554f59606b6f7a8085898c8e8f8f8e8c89847e786e685e564c41352921160b00000013202c3946535f6c798691919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191918a7e7164574b3e3124180b00000000000000000000030c162028313a414950585f626b6f757a7e818487898b8c8d8d8e8e8d8d8b8a8885827f7b76716c656159514b433c332a22180f06000000000000000000000000000000000000000000030f1b27333f495365727f8b939393939393939393939393939393939392867a6d6053473a2d313e4b5764717e8a939393939393939393939393939393939397887b6e6255483b2d22170b0000000000000000000000000005121f2b3744505b656e7b869293939393939393939393939393939392867b6e61594f413835414c56606b73808d9593939393939393939393939393939393887d70685e5246392d2013070000000000000000000000000a141d29323b454d565e616c71797e82868a8c8e909192929993939393939084776a5d5144372a1e1100000000000000000000000000000009111a212a2f383f444d53585f62696e73777c7f828587898b8c8d8e8e8e8d8c8b898785827f7b77726e68625f58524c443f363129211910080000000000000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c0f020004111e2a3744515d6a77849093939393939393939393939393939083776a5d5144372a1e11000714202d3a46525e6976828f939393939393939393939393939393908376685e5246392d2014080f0f0f0f0f0f0f0f0f13202d394653606c7884919393939393939393939393939393938f8275685e5246392d20130700131f2c3946525f6c798592939393939393939393939393939393939393939393939393939393939393939393939393938e8174685b4e4135281b0e000000000000000008121a232c343c424a51575e61686d73777b7f828587898b8c8d8d8e8e8d8c8c8a888683807c78726e68605d555045403930271f150d0300000000000000131f2c3946525f6c798592939393939393939393939393939393939393939393939393939393939393939393938b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a9393939393939393939393939393938b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8175685c4f4235291c0f00000000000000000c18232e3942505a636e737f878f93999a9b9c9b9a97948f877f776c605a57616c717e858d9298999b9c9b9a9895908a81796d675c56606b6f7d848d9297999b9b9b9a9996918b827a6e685d52453e33281c1000000013202c3946535f6c7986929e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e978a7e7164574b3e3124180b000000000000000000000b151e28323a434b535b606a6f757c81868b8e91969698999a9a9b9a9a99989697928f8c87837e78706b605d554d453c342a21180d04000000000000000000000000000000000000000005121f2b3744505b6575828f9b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa399897d706356493d2e35414c566774818d9a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9988b7e726553493f33271b0f03000000000000000000000000030f1b27333f49535f6a737f8c95a09f9f9f9f9f9f9f9f9f9f9f9fa3988e81756b6053493f3c46525d68707d87939fa79f9f9f9f9f9f9f9f9f9f9faa9f958d80736b60564c41362a1d1105000000000000000000000006111c262f3b444d575f686d757e848a8f9299999b9d9e9f9fa39f9f9f9f9d9084776a5d5144372a1e1100000000000000000000000000020a131b232c333c424a50575e616a6f757b8084888c8f92979698999a9a9b9a9a99989697928f8c88847f7a746e6a615e565046423b332b221a120901000000000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909d9f9f9f9f9f9f9f9f9f9f9f9f9d9084776a5d5144372a1e110005111e2a36424d5764717e8b98a29f9f9f9f9f9f9f9f9f9f9f9f9f93877b6e6154473b3025191c1c1c1c1c1c1c1c1c1c1b27333f4953636f7c8996a19f9f9f9f9f9f9f9f9f9f9f9fa2978a7d7164564c4135291d110500131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b8e8174685b4e4135281b0e0000000000000008111a242c353e464e545c60696e747a7f84888c8f92979697999a9a9a9a9a9998979992908c89847f7a736d67615a514b423931271f150b01000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a979f9f9f9f9f9f9f9f9f9f9f9f9f988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f0000000000000004101c2834404b54616c73808c92999fa4aba8a8a8a7a69e99938c80736c615f69717e8792979fa2aaa7a8a8a7a7a09d938e82796d605d686f7d8691969fa2a9a7a8a8a7a8a09e948f837a6d60594f44382c1c1106000013202c3946535f6c7986929fababababababababababababababababababababababababababababababababababababababababababababababababababababa4978a7e7164574b3e3124180b00000000000000000007121d27303a444c555d656c727c82898e92989b9ea1a9a4a6a6a7a7a7a7a6a5a9a29f9c9a938f8a837d746d675f574e463c332a1f160c01000000000000000000000000000000000000000613202d394653606c7985929eabacacacacacacacacacacacacacb5ab998c807366544a40343945525d687784909daaacacacacacacacacacacacacacaca89b8e8275655b5044372b1f1205000000000000000000000000000b17222d38414e57606d78839099a4afacacacacacacacacacb4aa9e93897c6f655b504445505a616d7a849199a4afacacacacacacacacacacaea2989083786d60594f443a3025190d0100000000000000000000000b17222d38424c565f696e7a828a91969c9fa3aba8aaabacacafb5acacaa9d9084776a5d5144372a1e11000000000000000000000000010a141c252d353e464e545b60696e757c82878c9196999c9fa2a9a5a6a7a7a7a7a7a6a4a9a19e9c9895918c86817b746e68625a534d453d342c241b1309000000000000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daaacacacacacacacacacacaa9d9084776a5d5144372a1e1100020e1a25303b4753606d7a86929facacacacacacacacacacacafa4998b7f7265564c41362a2828282828282828282828282b3744505b6574808d9aa9b2acacacacacacacacacacab9f9285796d6053463a3025190d0100131f2c3946525f6c7985929facacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca79b8e8174685b4e4135281b0e000000000000060f1a232c363e474f585f666d737b81868c9196989c9ea2a9a4a5a6a7a7a7a7a6a5aba39f9d9996918c868079716c605c544b433931271d1207000000000000131f2c3946525f6c7985929facacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3acacacacacacacacacacaca5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f0000000000000006131f2c3845515c66717e8a929fa3abafb5b4b5b4b3b0aba49f928b7e7167616e7b869299a2a9aeb4b4b5b5b4b1aca59e948d80746a616d7a859298a1a8adb3b4b5b5b4b2aca69f958f82756b615548382e23170b000013202c3946535f6c7986929facb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b1a4978a7e7164574b3e3124180b0000000000000000050e18232e39434c565d676d777f878f949b9fa3aaabadb2b1b3b3b4b4b4b3b3b2b3adabaca49f9c95908a81796e695f584e453b31281d1307000000000000000000000000000000000000000915222f3c4855626f7c8897a2adb9b9b9b9b9b9b9b9b9b9b9b9b9b6a99c8f8376665c5144383a4754606d7a86939facb9b9b9b9b9b9b9b9b9b9b9b9b9b8ab9e9285796c605346392d2013060000000000000000000000000006111b262f3c44515c666f7c87939fa8b2bdb9b9b9b9b9b9b9bcafa59d9083786c60554b4d57626c75818f96a1abb5c0b9b9b9b9b9b9b9baafa59f92867b6e665c51473d32281e13080000000000000000000000030f1c28333f4a545e686e7b848f949ea0a8acaeb4b5b6b8b8b9bbc0b9b7aa9d9084776a5d5144372a1e110000000000000000000000000a131c262e373f474f585f666c727b82878e92999ea0a8a9abadb3b1b2b3b4b4b4b3b2b1b3adaba8a7a09d99928e87817a716c615e574f463e362d251b12090000000000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7b9b9b9b9b9b9b9b9b7aa9d9084776a5d5144372a1e1100000914202c3945515d6775818e9ba9b2beb9b9b9b9b9b9b9c0b5ab9c8f8376685e5246393535353535353535353535353535394653606c7884919eabb7b9b9b9b9b9b9b9b9bdb2a89a8e8174675c514538281e13080000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b4a79b8e8174685b4e4135281b0e0000000000030d17212c353e485059616a6e7880868e92989da0a8a8abadb3b1b2b3b4b4b4b3b3b2b5afaca9a8a19e98928d857e746d665d554b43392f24180e050000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0b9b9b9b9b9b9b9b9b9b1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f000000000000000713202d3a4653606d7984919ea4afb5bbc0c1c2c1c0bdb5afa49e9185796d6875828f98a3abb3babfc1c2c1c0bcb8afa69f93877c6f6674808d97a1aab2babec1c2c2c1bdb9b0a79e948a7d7063544a3f34281c10030013202c3946535f6c7986929facb9c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4bdb1a4978a7e7164574b3e3124180b00000000000000020c17202834404b555d686d79828c92999ea6acaeb4b8b9bdbebfc0c0c1c1c0c0bebebab8b6afaca7a09d938e847b6f6a5f574d433a2f24180c030000000000000000000000000000000000030f1c28333f4a5465727f8b98a9b3becac6c6c6c6c6c6c6c6c6c6c5b8ac9f9285796d6053463a3d4a5663707d8999a4afbbc7c6c6c6c6c6c6c6c6c6c6c6b9ada197887c6f6255483c2d22170b00000000000000000000000000000a141d2834404a54606a74808d96a1acb9c1cdc6c6c6c6cfc1b8ab9f958b7e71675d51545f69717e8b939ea8b2bdc7d2c6c6c6d1c7bdb2a89e938b7e71695f544a40352b20160c02000000000000000000000006121f2b3844505b666e7a8491969ea6acb2b9babfc1c3c4c5c5c7cbc3b7aa9d9084776a5d5144372a1e11000000000000000000000009121c252e3840495159616a6e787f868e939a9fa3abacb2b5b8babebebfc0c1c1c1c0bfbebeb9b8b5b1acaba39f99938e857e766e69605950483f372d241b110800000000000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3c6c6c6c6c6c6c3b7aa9d9084776a5d5144372a1e11000004111d2935404b5563707d8997a1adb9c6c6c6c6c6c6d2c6b9ac9f93877a6e615447424242424242424242424242424242424956626f7c8996a1adb9c5c6c6c6c6c6c6c5b9aca096897c6f63554b403428160c020000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c1b4a79b8e8174685b4e4135281b0e000000000009141f29333e47505a616b707c838c92989fa3aaacb2b5b8b9bebebfc0c0c1c1c0bfbfc0bbb9b6b2acaaa39f97918a80786d675d554b40352920170c0200000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6beb1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdc6c6c6c6c6c6c6beb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0f000000000000000a1724303d4a5763707d8a96a1acbbc0c7ccd2cfced0c7c0b9ada1978a7e716d7a87939faab4bdc5cad0cfcecdc8c1bbafa4998d80746d7985929ea9b3bcc4cad0cececec9c2b9b0a69b8f8275665c5044382b1f12060013202c3946535f6c7986929facb9c5d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1cabdb1a4978a7e7164574b3e3124180b0000000000000008131e29323a45515c676d7a838f949fa3abb0b9babfc4c5c9cfcccdcdcecdcdccd0cac6c5c0bbb9b1aca59e9691857c6f695f554b4035291e150b000000000000000000000000000000000006121f2b3844505b6675828f9ba8b5c2cfdbd2d2d2d2d2d2d2d2d3c6baaea298897c6f6256493c3f4a546673808c99abb5c0ccd7d2d2d2d2d2d2d2d2d6cabeb3a9988b7f7265544a3f33281c0f0300000000000000000000000000020b18232e39424e58606d7984919ea5afbbc5cfdad2d2d4c8bcb1a79e9184796d60575c666e7b86929fa5afbac4d0d9d2d2d7cbc0b5aba1968e81756c62574d42392e23190e05000000000000000000000004111d2935414c56606c78829096a0a8b0b9bdc4c7cbd1d0d1d2d2d3d0c3b7aa9d9084776a5d5144372a1e110000000000000000000007111b242e37404a525b626b707c838b92989fa4acafb5b9bdc2c5c6cacfcccdcdcecdcdcccfc9c6c5c2bcb8b4aeaba49f97928b827b6f6b615a51493f362d231a1006000000000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0d2d2d2d2d0c3b7aa9d9084776a5d5144372a1e110000010d18242f3a4653606d7984919eabb8c3ced9d2d2d2d4c7bbafa4998b7e7265564c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e586773808d9aa8b2bdc9d5d2d2d2d2d1c4b7aa9e9184786c605346392e231806000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cec1b4a79b8e8174685b4e4135281b0e00000000020b1a26313b454f59616c717d8690959fa2aaaeb4b8bdc2c5c6cacfcccdcdcdcdcdccd1cbc7c5c3bdb9b4aea9a19e928d82796d675d51453e32291e130800000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cbbeb1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad2d2d2d2d2cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c0f000000000000000e1a2734414d5a6774808d9aa8b2bdcbd1d7dddbdbd9d2c9beb3a99b8e8174717e8a99a4afbcc6d0d6dbdbdbd9d4ccc0b5ab9e9184776f7c8997a2adbbc5ced6dbdbdbd9d5cbc1b8ac9f9285786d6053463a2d2013070013202c3946535f6c7986929facb9c5d2dedededededededededededededededededededededededededededededededededededededededededededed7cabdb1a4978a7e7164574b3e3124180b000000000000010d1925303a44505a606d798390959fa6aeb5bdc1c7cbd1d2d5dad9d9dadadadad9dbd6d3d2ccc8c3bcb8afa8a09792857b6e675d51453d30271d1207000000000000000000000000000000000613202d394653606c7985929fabb8c5d2dedfdfdfdfdfdfdfe2d6cabfb4aa988c7f726553493f44505c6676838f9ca9b6c2d2dde8dfdfdfdfdfdfe6dacfc2b5a89b8f8275665b5044382b1f1206000000000000000000000000000007121c27303d45515d67707d89939ea9b3bec9d5e0e4d8cdc3b9ada1968c8073695e606d79839098a2aeb7c1ccd6e2e1d7cdc5bbafa39991847a6d605a50453c30271c11080000000000000000000000000613202c3945525d68727f8c949fa8b2bac1c9ced3d7dcdddedfdfddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000040e19232d363f49525c636d727d8690959fa2aaafb6bbc0c7c9ced2d3d6dbd9dadadadadad9dad5d2d1cec8c6bfbab5afa9a29f948f857d716c625b51483e352b22180c030000000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0dddfdfddd0c3b7aa9d9084776a5d5144372a1e1100000007131f2b3844505c6673808d9aa7b1bcc8d4e3dfe3d7ccc0b5ab9c8f8376685e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b606a7884919eabb7c4cfdae5dfe0d4c8bcb1a7998c8073655b5044372b1f1207000000131f2c3946525f6c7985929facb8c5d2dfdfdfdfdfdfdfe3dfdddcd4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4cec1b4a79b8e8174685b4e4135281b0e000000000a141d2a36424d57616b717e879298a0a7aeb4babfc6c8ced1d2d6dbd8d9d7d7d8dad9dcd7d4d2cec9c6bfbab3ada49d948f82796d605a50443a3025190d02000000131f2c3946525f6c7985929facb8c5d2dfdfdfdfdfe7dfd9d4d1d0cccccccccccccccccccccccccccbbeb1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6dfdfdfd8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c0f000000000000000f1c2935424f5c6875828f9ba8b5c2cedce3e8e8ebe3dacfc3b6a99c908376727f8c99abb5c0cfd8e2e7e8e8e4ddd2c5b9ac9f928679717e8a97a9b3becdd7e0e6e8e8e5ddd3c7baaea298877b6e6154473b2e2114080013202c3946535f6c7986929facb9c5d2dfeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae4d7cabdb1a4978a7e7164574b3e3124180b00000000000005111d2a36414c56626c74818e959fa7b0bbbfc6cfd3d7dcdfe1e6e6e6e7e7e7e6e6e6e2dfddd8d4cec8c1bab2a9a1979083796d60594f43392e23180c010000000000000000000000000000000916222f3c4955626f7c8897a2adbac6d3dfececececececf3e7dbd0c2b5a89b8f8275655b50444653606d7985929facb8c5d2dfebecececececf7ebded2c5b8ab9f9285796c605346392d2013060000000000000000000000000000000b151e2935404b55606b74818e97a1adb9c1ced7e2dfd5c9bdb2a99f92867b6e616b73808d95a0aab4bfc9d3dfe6dbd0c5bbb0a69f92877d6f685d52483f332a1e150b000000000000000000000000000714212d3a4754606d7a85929ea6b0bac3ccd5d9e0e3e7e5e1deddd7d0c3b7aa9d9084776a5d5144372a1e110000000000000000020c16202b353e48515b636e737f8792989fa7aeb4bbc0c7cbd1d5d9dedfe2e6e5e6e7e7e7e6e5e6e2dfded9d4d1cbc7c0bbb3ada69f9792867e726d625a50473d342a1e150b0000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000003101c28343f4a54626f7c8895a0acb8c7d2dde8e8ddd2c5b9ac9f92867a6d68686868686868686868686868686868686868686f7c8996a1acb9c5d6e0ebeaddd1c4b8ab9f95887b6e6153493f33271b0f03000000131f2c3946525f6c7985929facb8c5d2dfebececeee5ded8d3d0cfc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c1b4a79b8e8174685b4e4135281b0e00000006111c262f3846535f69707d879299a2aab1babfc6cbd1d4d9ded9d5d2d1cdcacacbced2d3d6dbdfdad5d0cbc4beb9aea69f948e81746c62564c41362a1e1408000000131f2c3946525f6c7985929facb8c5d2dfebecf1e7ded5cec8c5c4bfbfbfbfbfbfbfbfbfbfbfbfbfbfbeb1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3ece4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000101d293643505c6976838f9ca9b6c2cfdceaf4f7f2eaddd0c3b7aa9d90847773808d99a6b3c0d0dbe7f2f5f3ecdfd3c6baaea298867a717e8b98a4b1beced9e5f0f5f4eee2d6cabeb3a995887b6e6255483b2f2215080013202c3946535f6c7986929facb9c5d2dfe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d7cabdb1a4978a7e7164574b3e3124180b0000000000030d17212d3946525e68717e8b939da7b1b9c2cbd1d8e0e3e7ebebeae5e2e0dfe0e1e4e9eaece8e4e0d9d4ccc4bbb3a9a0958e81756b60554b4034281d1207000000000000000000000000000003101c28343f4a5465727f8c98a9b3becad6e2eef0eceae9eaecebded1c5b8ab9e9285796c6053464955626f7c8898a2aebac6d3dfecf0eceae9eaececdfd3c6baada297887c6f6255493c2e23170c000000000000000000000000000000030c18242f39434f59616d7a85929ea6b0bcc5d0dbe6dacfc4baaea2988e81756a707d88939fa7b1bcc6d0dbe5ded6cabeb3a99f948c7f736b60564c41362d21180c0300000000000000000000000006121f2b37434e5865727f8c97a2adb8c2ccd5dee5ebe8e0d9d5d2d1cac7c3b7aa9d9084776a5d5144372a1e11000000000000000008131e28323d47505a636d73808b9299a2aab1babfc6ccd2d7dce3e5ebe7e3e0dfdddcdcdcdddfe0e3e8ebe5e2dcd7d2ccc5bebab0a9a19892887f726c62594f463c30271d120700000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000b17232e3847535f6a7783909dabb5c0ccd7e3ede0d4c7bbafa3998b7f75757575757575757575757575757575757575757575808d99a8b2bdc9d5e8efe3d7cbbfb5ab9d908376695f5341382d22170b00000000131f2c3946525f6c7985929facb8c5d2dfebf8f0e5dcd4ccc7c3c2babababababababababababababababababab4a79b8e8174685b4e4135281b0e0000000b17222d3842505a616e7b859299a3abb4bcc3cad0d7dce2dcd7cec9c5c4c0bebdbec1c5c6cad0d7e0e2dcd6cfc9c0b8b0a69e938b7e71685e52463b3025190e020000131f2c3946525f6c7985929facb8c5d2dfebf6eadfd5ccc3bdb8b7b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000f1c2835424f5b6875828e9ba8b5c1cfd8e2e6e6e6e1d9cfc2b6a99c8f8376727f8c98aab4bfcad6dfe5e6e7e3dcd2c5b8ac9f928579707d8a97a8b2bdc9d5dee4e6e8e3dcd2c6b9ada197877a6d6154473a2e2114070013202c3946535f6c7986929facb9c5d2d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5cabdb1a4978a7e7164574b3e3124180b000000000009141f2b37424e57616d7a85929ea5afb9c2cbd7dce3eaebe5e1deded8d5d3d3d3d5d8dddde0e4eaeae4ded5cdc5bbb1a79e93897d70675c5145392f23180c000000000000000000000000000006121f2b3844505c6675828f9ca8b5c2d0dbe6eae4e0dedddee0e4dfd2c6b9ada297887b6f6255484c5865727f8b98aab4bfcad6e2e9e4e0dddcdde0e4e2d6cabeb3a9988c7f7265544a3f34281c100300000000000000000000000000000007121d28313d46525e68717e8a949eaab4becad6e1e0d6cabfb4aa9f93877c6f7a85919aa4afb9c3ced8e2e1d5ccc3baada2979082786d60594f443a2f241b0f06000000000000000000000000000815212e3a47535f6a7784919da9b3becad4dee7f0e8ded6cec9c5c4bebab9b7aa9d9084776a5d5144372a1e1100000000000000040d1924303a444f59616c727f8c929fa3abb4bcc2cad0d8dde4e8e4e0dddcd7d3d2d1d0cfd0d1d2d4d7dcdee1e5e7e3ddd7cfcac2bbb3aaa39a938b7e716b60584e42392e23180b02000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000006111c2b37434e5865727f8c99a4afbbc7d4e0ece3d7cbc0b5ab9e91848182828282828282828282828282828282828282828185929eabb8c4cedae5ede0d3c7bbaea3998b7f7265574d422f261b110600000000131f2c3946525f6c7985929facb8c5d2dfebf4e9ded4cac2bbb7b5aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea79b8e8174685b4e4135281b0e0000030f1c28333f4a54616c76829097a2abb5bdc5ced6dbe2e1d8d1cbc4bdb9b7b3b1b0b1b4b8babec5ced3dbe7e1dad5cac2b8afa59f92867a6d61564c41362a1e11050000131f2c3946525f6c7985929facb8c5d2dfebf1e5d9cec3bab2acaaa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000d1a2633404d596673808c99a6b0bcc6d0d5dad9dbd6d0c7bdb1a79a8d8174707d8a98a2aebac4cdd4d9d9dcd7d1cabfb4aa9d9083776f7b8896a0acb9c3ccd4d8d9dcd7d4ccc0b5ab9e9285776c605346392d2013060013202c3946535f6c7986929facb9c5c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8bdb1a4978a7e7164574b3e3124180b00000000020e1a25313a47535f6a74818e97a2adb7c1cbd4dde7ede8e0dad5d2d1ccc8c7c6c6c8cbd0d1d4d8dfe7ede7dfd6cdc3b9afa59e9184796d60554b4034291c1004000000000000000000000000000713202d3a4653606d7985929fabb8c5d2dee7dfd9d4d1d0d1d4d9dfd6cabeb3a9988b7e7265584b4d576875828e9ba8b5c1d0dbe7ded8d3d0cfd0d3d8dedbd0c2b5a89c8f8275665c5044382c1f1206000000000000000000000000000000010c161f2935414c56616c75828f98a2aebac2cfd8e2dbd0c6bbafa49a908379828f97a1acb6c0cbd5e0e3d8cfc3baafa59f92857b6e665c50473d32281e120900000000000000000000000000000915222f3c4855626f7b8896a0acbbc5cfdce6f0eae1d6ccc4bdb9b7b1aeadadaa9d9084776a5d5144372a1e11000000000000010c161f2935414c56606b717e8b919ca4afb5bdc5ced6dbe2e8e4dfd8d4d1d1cbc7c5c4c3c3c3c4c5c7cbd1d2d5d9e0e5e8e1dbd6cdc5bcb4aca49f92877d706a5f544b4034281d140a000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000f1b26323c4754616e7b87939facb9c5d0dbe7e8dcd1c7b9aca196918e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e9297a1adb9c6d6e0ebecdfd2c5b9ac9f92867a6d6154473c3121140a0000000000131f2c3946525f6c7985929facb8c5d2dfebefe3d8ccc2b8b0aba9a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19b8e8174685b4e4135281b0e000006121f2b3844505b66717e8a949fa9b3bdc7d0d7e0e7e3d8cfc6bfbbb2acaaa6a4a4a5a7abaeb3bcc1c9d3dce6e6dcd4cac1baaea2988d8074685e5246392d2014080000131f2c3946525f6c7985929facb8c5d2dfebede1d4c8bdb2a8a09d9999999999999999999999999999999999988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000916232f3c4956626f7c89949faab4bdc4c9cfccd0cac5beb5aba0958a7d706d7985929fa8b2bbc3c8ceccd1cbc7c0baaea2988c80736a7784919ea7b1bac2c8cdccd1cbc7c0bbafa4998e8174655b5044372b1f12050013202c3946535f6c7986929facb9bcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb1a4978a7e7164574b3e3124180b0000000005121e2a36424d57626e7b87939fa9b3bec9d2dde6ece4ded6cec9c5c4bfbcbab9babbbec3c4c8cdd7dce3eae8dfd5cbc1b9aca0968b7f72675c5145382c1f150a000000000000000000000000000916232f3c4956626f7c8998a2aebac6d3dfddd5cdc8c4c3c4c8cdd5dbcfc1b4a89b8e817568574d535e697884919eabb7c4d1deddd4cdc7c4c3c4c7cdd4dfd2c5b8ac9f9285796d6053463a2d20130700000000000000000000000000000000040d1925303a44505a616e7b86929fa6b0bcc6d1dce2d8ccc0b6ac9f958f828f949ea9b2bec7d2dde7dcd1c6bdb2a89d938a7e71695e544a3f342b20160c0000000000000000000000000000000c1926323f4c5965727f8c98a8b2bdcdd7e1efede2d8cfc4bab2acaaa4a1a0a0a09d9084776a5d5144372a1e1100000000000007131d28313a45525d68707d87929fa3adbbc0c7cfd7e0e7e8dfd8d4cdc8c4c3bfbab9b7b6b6b6b7b9bbc0c4c5c9ced5dae0e8e6dfd7cec6beb6afa39992867c6f665c51453c2f261b11060000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000a15202d3a46525e6976828f9caab4bfcad6e2eee3d5c9bdb2a8a19e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea1a9b3bec9d5e8eee2d6cabeb3a99b8f8275685e5246392d2013020000000000131f2c3946525f6c7985929facb8c5d2dfebebdfd3c7bbb0a69f9c9494949494949494949494949494949494949494948e8174685b4e4135281b0e00000613202d394653606c7884919ea6b0bbc5cfd9e2e9e7dcd1c6bdb5aea8a09e9a9797989b9fa2aaafb7c1cad4dee9e6dcd6cabeb4aa9f92867a6e6154473b3024190d0100131f2c3946525f6c7985929facb8c5d2dfebebded1c5b8aca096918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7165584b3e3225180b00000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000815222e3b4754606a76839098a3abb3b9bebfc0bfbebab3ada3999083786d6773808d96a1a9b1b8bcbfc0bfbfbab5afa59f92867b6e65727f8b95a0a8b0b8bcbebfbfc0bbb9aea69f93877c6f6253493f33271b0f030013202c3946535f6c7986929facafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafa4978a7e7164574b3e3124180b000000000714212d3a46535e6975818e99a4afbbc5cfdbe4ece4dad2ccc4bdb9b7b2afadacadaeb1b6b8bcc3cbd1d8e1eae7ddd5c9bdb2a89e9184796d6053473c31261b0f03000000000000000000000003101c28343f4a5466727f8c99aab3becad6dfd5cbc3bcb8b6b8bcc3cbd5d1c4b7ab9e918478695e5354616e7b8796a1adb9c5d2dfd4cbc2bcb7b6b7bcc2cbd4d3c6baaea298897c6f6256493c2e23180c000000000000000000000000000000000008131e28323e46525e69727f8b949faab4bfcbd7e2ddd2c7beb1a79e948f949ea6b0bbc4d0d9e4dfd7cbbfb5aba0968e81746c61574d42382e22190d040000000000000000000000000000020f1b2835424e5b6875818e9ba8b4c1cedbe9f3e7dcd1c6bdb2a8a09e9794939393939084776a5d5144372a1e110000000000010d18242f3a43505a606d7a859199a3aeb5bfcbd1d9e1e9e4ddd8cdc8c3bcb8b6b4aeacaaa9a9a9aaacafb5b7b9bdc4c9ced6dee4e9e0d8d0c7c0b5aba2989083796d60584e41382d22170b0000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000005111e2a36424d5664717e8b98a2aebac6d3dfebe5dacec4bab2acaba8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8abadb3bbc5cfdae6ecdfd3c6baada2978a7d7164564c41362a1d11050000000000131f2c3946525f6c7985929facb8c5d2dfebe9ddd0c3b7ab9f948f878787878787878787878787878787878787878787878174685b4e4135281b0e0004101c2934404b5564707d8a96a0acb8c2cdd7dbdbdbdbd7cbbfb5aba39f96918d8b8a8b8e92989ea5afb8c2cdd8e4eee7dbd0c5baaea3998c7f7265564c4135291d110500131f2c3946525f6c7985929facb8c5d2dfebeaddd0c4b7aa9d9184808080808080808080808080808080808080807c6f6255493c2f22160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000006131f2b37434e58626f7c869299a1a9adb3b2b3b2b3ada9a29f92877d7066606d7a849197a0a7acb1b2b3b2b4aeaba39f938c7f7269606d788390969fa6abb1b2b3b3b5afaca49d948d80746a5f5441382d22170b000013202c3946535f6c7986929fa2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2978a7e7164574b3e3124180b000000030f1c28333f4a54616e7b87939fabb5c0cdd7e1ede4dad2c8c0bab2acaba5a2a0a0a0a2a5aaabb1bbbfc6cfd8e3ede5d9cec4b9ada1968b7e7165584e43372b1f1206000000000000000000000006121f2c3844505c6676828f9ca9b5c2d0dbd9cdc3b9b1acaaacb1b9c3cdd2c5b9ada196877b6e61545764717e8a97a8b2bdc9d5d8cdc2b9b0aba9abb0b9c2cdd6cabfb4aa998c7f7266544b4034281c100400000000000000000000000000000000020c16202a36424d57606c77839098a3aebac3d0d9e3d9d0c2b9b0a69e9c9ea6b0b8c1cdd6e2e1d7cdc5bbaea3999184796d605a50453b30261c100700000000000000000000000000000004111d2935414c566a7784919daab7c4d0ddeaefe3d7cbbfb4aba096918b87868686868683776a5d5144372a1e11000000000004111d2935404b55616c75818e97a1abb5bfc7d7dce3ebe2d9d2ccc2bcb8b1abaaaba39f9e9d9c9d9e9fa3abaaacb2b9bdc4ccd3dbe3eae2d9d1c7bdb4aaa0958c80736a6053493f33271b110600000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000020e1925303b4753606d7a85929facb8c4cfdae5ebe0d6ccc4bdb9b7b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b8b9bec5cdd6e1ecebded2c5b8ab9f9285796d6053463a3025190d010000000000131f2c3946525f6c7985929facb8c5d2dfebe8dccfc2b5a99c8f827b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a6d6154473a2e2114070006131f2c3845515c6775828f9ba8b2bdcacfcfcfcfcfcfcfc7bbaea399928b84807e7d7e81858f939ea6b0bbc7d3e0ecece2d7cbbfb4ab9d908377685d5246392d20130700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757373737373737373737373737373737373736f6a5f54473b2e22150800000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000030f1b27323d47545f6a717e8791979ea1a9a5a6a5a9a29f97928a7f726b605d686f7c8590959da0a7a5a6a6aba39f99928c81746d635c666e7b848f949d9fa7a5a6a6aba39f9c928d82786d60584e432f261b1106000013202c3946535f6c798692959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595958a7e7164574b3e3124180b00000006121f2b3844505b6673808c99a4afbdc7d2dfe9e8ded2c8c0b6aea8a19e999594939395989d9fa7aeb5bdc6d1dce7ebe0d5c9bdb2a99d9083766a5f53473a2e21150900000000000000000000000713202d3a4653606d7985929facb8c5d2dfd4c8bcb1a7a09da0a7b1bcc8d4c9bdb2a8978a7e716457556774818d9aa7b4c0cfdad3c7bcb0a69f9c9fa6b0bcc7d3d0c2b5a99c8f8276665c5145382c1f13060000000000000000000000000000000000040e1a25303b44505b656e7c86929fa7b1bdc7d2dde2d4cbc1b8b0aaa8aab0b8c1cad3dfe6dacfc5bbb0a69f92877c6f675d51483e33291e140a000000000000000000000000000000000613202c3945525d687985929facb8c5d2dfebece0d3c7baaea39991847e7b7a7a7a7a7a796d6053463a2d20130700000000000613202c3945515d67707e8a939ea9b2bdc6d1d9e8ebe2d9d0c7c0bbb1aba79f9d98999291909090919299999ea0a8acb2bac1c9d1dae3ebe3d9cfc5bcb1a79f92877c6f655b5044382d22170b00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000914202c3945515d6774818e9ba8b2bdc9d5e1eee8ded6cec9c5c4c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c5c6c9cfd6dfe8ede1d5c9bdb2a89a8e8174675c514538281e1308000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d685e5246392d201307000714202d3a4753606d7985929facb8c2c2c2c2c2c2c2c2c2bcb0a69f92877f7873717172747a818f949fabb7c4d0ddeaf3e7dcd1c6b8aba095877a6d6154473a2e21140700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686666666666666666666666666666666666625f584e43372b1f130600000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000a15202b37434e58616c717d858c9197979999999897928d857e726d6259565f6a6f7b838b9195979899999899928e877f786c605b545e696e7a828a9095979899999899928f8980796d665c51463c321d140a00000013202c3946535f6c79868989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989897e7164574b3e3124180b0000000613202d394653606c7884919eabb5c0d0d9e3ebe0d6ccc0b6aea49d96918c89878687888b90959fa3abb5bfcbd7dee9e6dacfc4b8ab9f95887c6f6255483c30251a0e02000000000000000000000916232f3c4956626f7c8998a2aebac6d3ded1c4b8aca0959095a0acb8c7d2cfc0b4a79a8d817467565d677783909daab6c3d0ddd0c4b7ab9f9490949fabb7c4d0d2c5b8ac9f9286796d6053463a2d20130700000000000000000000000000000000000009141f27333f49535f6a737f8c95a0abb5c0ccd7e0ddd3cac1bbb7b5b7bbc1cad3dce5ddd5c9beb3a99f948c7f726a60554b40362c21170c02000000000000000000000000000000000714212d3a4754606d7a8798a2aebac6d3e0ececdfd2c5b9ac9f92867b716e6d6d6d6d6d6d665c5145382c1f13060000000004111d2935414c55606d7985919ea5afbbc4cfd8e3eee3d9d0c7beb6afa79f9d95908c8886848383838486898c91969ea1a8afb7c0c8d1dbe4eae1d7cec3bbafa3999083786c6053493f33271b0f03000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0d0d0d111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000004101d2935404b5563707d8996a1adb9c5d2dfeaf0e8e0dad5d2d1cecececececececececececececececececececececed1d2d5dae1e8f1ebded2c5b9aca196897c6f63554b403428160c02000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686161616161616161616161616161616161616161615e564c41362a1d1105000a1623303d495663707d8998a2aeb5b5b5b5b5b5b5b5b5b5b5ab9f948b7e726d66646465686d7882909ca9b6c3cfdce9f8ede2d4c8bcb1a796897d7063564a3d3023170a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5959595959595959595959595959595955544e463c32261b0f0300000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000040f1b26323c46505a616b707a7f85888b8c8d8c8b8885807a706c625b514e585f696e797e84878a8c8d8c8b8986817c736c665b504d565e686e787e83878a8b8c8c8b8a86827c746d675c544a40342a200b020000000916232f3c4956626f7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7a6d6154473a2e2114070000000916232f3c4956626f7c8996a1acbdc7d2e2ebe5dacec4baaea49d928d847f7c7a797a7b7e838b9299a3aebbc1ccd7e3ebe0d4c8bcb1a7998c807366574d42362a1e120500000000000000000004101c2834404a5466727f8c99aab4bfcad6d7cbbfb4aa9d9083909dabb5c0ccd0c4b7aa9d918477685e606d7a86929facb9c5d2d5c9beb3a99c9083909ca9b6c3cfd3c7baaea298897c6f6356493c2f24180c000000000000000000000000000000000000030b17222d38414e58606d78839099a4afbbc4cedae5dcd3ccc7c3c2c3c7ccd3dce5e0d5cbc3b9ada1978f82776c60584e43392f241a0f0500000000000000000000000000000000000815212e3b4854616e7b8794aab4bfcad6e2efe8dccfc2b5a99c8f827669616060606060605c544b4034281c1004000000000613202c3945515d67737f8c97a1adb7c1cdd6e1eae8ddd2c7bdb5aca49f959089837f7c797776767677797c80848a91969ea5aeb6c0c9d2dee7e9e0d7cbc0b5aba0958a7e71655b5044372b1f1308000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1a1a1a1a1a1e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000010d18242f394653606c7884919eabb8c3cdd9e4f0f2ebe5e1dededbdad5d2d1d0d0d0d0d0d0d0d0d0d0d0d0d1d2d5dadbdedfe2e6ecf3f7eaded1c4b7ab9e9184786c605346392e23180c00000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5454545454545454545454545454545454545454524c443a3025190d01000c1926323f4c5965727f8c98aaa8a8a8a8a8a8a8a8a8a8a8a8a89c9083766c605c5457565d66707d8a96a3b0bdc9d6e3f0f0e4d9cdbfb2a5988c7f7265594c3f3226190c00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4947433c342a20150a0000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f322518090000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000a15202a343e48505960686d73787b7e7f807f7e7c79736e68615a5148464e575f666d71777b7e7f807f7e7c79756f6a605b544a444d565e666c71767a7d7f80807f7d7a756f6b605c554b42392e22190e000000000815222e3b4754606a6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6d685e5246392d201307000004111d2935414c566673808d99a8b2bdd0d9e3ede1d5c9bdb2a89d928d8079726f6d6d6d6f72777e87929fa6b0bbc7d3e1ece4d8cdc2b7aa9d908377695e52463a2d20140700000000000000000006121f2c3844515c6676828f9ca9b5c2d0dbd3c7baaea3988b7e8b99a4afbbc7d2c6b9ac9f93867a6d6163707d8999a3afbbc7d4d2c6b9ada1978b7e8b97a8b2bdc9d5cabfb4aa998c7f7366554b4035291d100400000000000000000000000000000000000006111b262f3c44515c666f7c87939fa8b2bdc9d5dfe5ded7d3d0cfd0d3d7dee5e2d8cec3b9aea49e92857a6e655b50463c31281d12080000000000000000000000000000000000000815222f3b4855626e7b8895a1aebbd0dbe7f3e7dacdc0b4a79a8d81746757535353535353514b42392e23180c00000000000714212d3a4754606d7a85929fa9b3bec9d3dfe8eae0d7ccc0b5aba49a938c837c77726f6c666a696a666d6f73787e848e939ca4aeb7c1ccd5e0ebe8dcd1c7bdb1a79d9184786c6053463a3025190d010000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423529272727272727272a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000007121f2b3844505b6673808d9aa7b1bcc8d4e3eef9f6f1ede8ded6cec9c5c4c4c4c4c4c4c4c4c4c4c4c4c4c4c5c9cfd6dee8eef2f7f9ece0d4c8bcb1a7998c8073655b5044372b1d120700000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4848484848484848484848484848484848484746413a32281e130800000e1b2835414e5b6874818e9b9c9c9c9c9c9c9c9c9c9c9c9c9c9c978b7e71645a504a4a4c54616e7a8794a1adbac7d4e0edf5e6d9cdc0b3a69a8d8073675a4d4034271a0d00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4240404040404040404040404040403c3b37322a22190e040000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265584b3f31251a0e0300000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000040e19222c363e474f565d61656c6f71727372716f6d66615e5650483f3c454d545c6065696e7172737372706d67625f58504a423b444c545b6064686d7072737372706d67636059514b433930271c10070000000006131f2b37434e586062626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262615e564c4135291d110500000713202c3945525d687783909daab7c3ceddebebded2c5b9aca1968d80746d666261606062656c717e8a949eaab7c5d0dbe6eaded1c4b8aca095877b6e6154483b2e2115060000000000000000000713202d3a4653606d7985929facb8c5d2dfd2c5b9ac9f92867a86939facb9c6d2c8bbafa49a8a7d706466737f8c99abb5c0cbd7d1c5b8ab9e92857a8796a1adb9c5d2d0c2b6a99c8f8376675d5145382c1f1306000000000000000000000000000000000000000a141d2834404a54606a74808d96a1acb9c1cdd6e1e8e3dfdcdbdcdfe3e8e7dbd0c6bcb1a79d928a7d70685e53493f342b1f160c000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1f8e6dacdc0b3a79a8d8074675a4d474747474645403930271d1207000000000713202c38444f5965727f8c98a2aebbc4cfdbe5ede2d8cec6bbafa49993887f786f6b6562605b545d545c6062666c7179818d929ca5afbac3ced9e5eee3d9cfc3b8aca0958a7d7063564c41362a1e11050000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42353333333333333333333744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000030f1c28333f4a54626f7b8895a0acb8c7d1dce8f4fff6ebe0d6ccc4bdb9b7b7b7b7b7b7b7b7b7b7b7b7b7b7b9bdc4ccd6e0ebf6fff7eaddd1c4b8ab9f95887b6e6253493f33271b0b0000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a3936302820160c020000101c2936434f5c6976828f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f887b6e6155483f444b55616e7b8894a1aebbc7d4e1eef4e7dacdc1b4a79a8e8174675b4e4134281b0e00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235333333333333333333333333332f2e2b262019100700000000000000000000000000000000000000000000000005111d2935414c5664707d8a97a3b0bdcad6e3f0e4d8cbbeb1a5988b7e7265574d42362a1f150900000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000007101a242c353d444c52535b6062646666666562605c54524c443e36333c424b5153575e61646566666563605d55534e443f38323b424a5053565e61646566666563605d55544f45403930271e150b0000000000030f1b27323d464e545656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565654524c443a3025190d0100000714212d3a4754606d7a86939facb9c6d2dfeceaded1c4b7ab9e9184796d605c54545354555a626c75828f9ca9b3becad6e2ede0d4c8bcb1a7978a7e7164574b3e2d22170b000000000000000000091623303c4956636f7c8998a2aebac6d3ddd0c3b7aa9d90837784909daab7c3d0ccc0b6ac9a8d8073676676828f9ca9b5c2d1dccec2b5a89b8f827884919eabb8c4d1d2c5b9ac9f9286796d6053473a2d20140700000000000000000000000000000000000000020b18232e39424e58606d7984919ea5afbbc5cfdae6efebe9e8e9ebefefe2d6cabfb4aaa0958d80746b61564d41382d22190d04000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d413a3a3a3a38342e271e150b00000000000915222f3b4854606b7784919eaab3becdd6e1ede7dcd0c6bcb0a69f93877e736c6660595553504a504b5153545b60676d75808d939ea8b2bdc8d4dee9eae1d4c8bcb1a79c8f8275685e5246392d2013060000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42404040404040404040404044515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000b17222d3847535f6a7783909dabb5c0cbd7e3effcf1e5dacec4bab2acabaaaaaaaaaaaaaaaaaaaaaaaaabadb2bac4cfdae5f1fbefe3d7cbbfb5ab9d908376695f5341382d22170b0000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3a342d2a251e160e050000000e1a2734414d5a677480828282828282828282828282828282828282786c6053464950555d67717e8a97a4b1bdcad7e4f0f4e7dacec1b4a79b8e8174685b4e4135281b0e00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42352926262626262626262626262622221f1b150e07000000000000000000000000000000000000000000000000020d17202c3945525d68737f8c99a6b2bfccd9e5f2e7dacdc0b4a79a8d8174695e53463c31261a0e03000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000008121a232b323a41464950535558595a59585553504a46413b322c2a30394045464d535457595a59585653514b47433c332d292f383f44464c525457585959585754514b48433d342e271e150c030000000000000a15202b343d4347494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494746413a32281e13080000000a1723303d4a5663707d899aa4afbbc8d4e0ede1d5c9bdb2a8998c7f72665c514b47464748505a63707d8997a2adbac6d3dfece4d9cdc0b3a79a8d80746753493f33271b0f030000000000000004101c2834404b5466737f8c99aab4bfcad6dbcec1b4a89b8e8175818d9aa7b4c0cfd2c3b6a99d908376676c7985929fabb8c5d2d7cbbfb4aa988c7f76828f9ca9b5c2cfd3c7baaea398897d706356493d2f24180d010000000000000000000000000000000000000007121c27303d45515d67707d89939ea9b3bec9d5dee9f4f5f5f5f8f9ece0d3c7baaea2989083796d60594f443b2f261b100700000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d41342d2d2d2c28231d150c030000000000091623303c4956636f7c8996a0acbcc5d0dfe8efe3d6cbbfb4aa9f948c7f726c605b544f4846443f434045464a50555d606e74818e96a0acb9c2ccd8e3f3e5d9cec3b9ac9f92867a6d6154473a2e23170b0000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4d4d4d4d4d4d4d4d4d4d4d4d4d515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000006111c2b37434e5865727f8c99a3afbbc7d4e0ecf8ede1d5c9bdb2a8a19e9d9d9d9d9d9d9d9d9d9d9d9d9ea1a8b2bdc9d5e1edf9ede0d3c7bbaea3998b7f7265574d422f261b11060000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a453f372d23180c05000000000d1a26333f4c58646e747575757575757575757575757575757575756c665b5051535b60676d7983909daab6c3d0dde9f6f3e6dacdc0b3a79a8d8074675a4d4134271a0e00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1a1a1a1a1a1a1a1a1a1a1a1615130f0a040000000000000000000000000000000000000000000000000009141f2a36414c56606d7a85929fabb8c5d2deebf8ecdfd2c5b9ac9f92867b6e61574d42372b20150a000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000008111a20283035383f4446484b4c4d4c4b4946443f38363029201e272e34383b4246484b4c4d4c4b4947454039373128221d262d33383a4146474a4c4d4d4c4a4745413a383228231d150c0300000000000000040f19222b32373b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3a3935302820160c020000000d192633404c5966737f8c99acb6c0ccd8e4ebded2c5b9aca096887b6e62544b403a3a3a3f4653606d7985929fabb8c5d2deebe9dcd0c3b6a99d908376655b5044372b1f12050000000000000006131f2c3845515c6676838f9ca9b6c2d0dbd8ccbfb2a5998c7f727e8b97a9b3bec9d2c5b9ac9f92867a6d6f7c8898a2aebac6d3d3c7baaea398897c74808d9aa7b3c0cdd7cbbfb4aa998c807366554b4035291d110400000000000000000000000000000000000000000b151e2935404b55606b75818e97a1adb9c1ccd7e3effbfffff8ecdfd3c7bbb0a69f92867c6f675c51473e32291d140a0000000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d41342720201f1c18120b03000000000005121e2a36424d576774808d9aa8b2bdced7e1f1ece0d3c7baaea3988f82786c605a504a423d3938332e34383a3f444b515c606d7984919ea6b0bbc7d3e0ebeae0d3c7bbafa3998b7e7265544a3f34281c100300131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000f1b26313c4754616e7a86929facb9c5d0dbe7f2ebded2c5b9aca196919191919191919191919191919196a1adb9c5d2dfebf8ecdfd2c5b9ac9f92867a6d6154473c3121140a000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c58585858585858585858585858585858585651493f34291d1205000000000b1724303c47525c6467696969696969696969696969696969696969605b54555d60656c7179818f95a0acb8c4d1deeaf7f2e6d9ccbfb3a6998c807366594d4033261a0d00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0d0d0d0d0d0d0d0d0d0d090806030000000000000000000000000000000000000000000000000000020e1925303946525e6873808d97a2adbac6d3dfecf9ece0d3c7baaea3998e8174695f53473c31261a0f040000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000080e161e24292d3337393c3e3f403f3e3c3a38342e2a251e17151d23282c31363a3b3e3f40403f3d3a38352f2b262017141c22282b3036393a3d3f40403f3d3a39352f2c272118120b0300000000000000000007101920272b2e2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2e2d29251e160e04000000020f1c2835424f5b6875828e9ba8b5c1d2dde8eaddd1c4b7aa9e9184776a5f5342392e2d2d3844505c6675818e9ba8b5c1cedbe8ebdfd2c5b8ac9f9285796c605346392d201306000000000000000713202d3a4653606d7986929facb8c5d2dfd6cabfb4aa978a7d707b8897a1adb9c6d2c7bbafa399897d70727e8b98aab4becad6d2c5b9ac9f928679717e8b98a4b1becfdad1c3b6a99c908376675d5145392c2013060000000000000000000000000000000000000000030c18242f39434f59616d7a85929ea6b0bbc7d3dfebf8fffff6e9ddd0c3b7ab9f948b7f726a5f554b40352c20170b020000000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d4134271a1313100c07000000000000000714212d3a46535f697784919eaab7c4cedde9f3ebdfd2c5b8ac9f92867b6e665b50443f382f2d2b2823282c2d33394045515d676f7c89949fabb7c4cfdae5efe3d7cbc0b5ab9c8f8275665c5044382b1f120600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756866666666666666666666666666666666666a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000a15202d3946525e6876828f9caab4becad6e2eeeaded1c4b7ab9e918484848484848484848484848484919eabb7c4d1deeaeee2d6cabeb3a99c8f8275685e5246392d201302000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568656565656565656565656565656565656565625b51453a2e2215090000000007131f2b36404a52585a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c545b6063676d72787e848f939ea7b1bcc8d4e0ecf9ede1d5c9bdb2a8978a7e7164574b3e3124180b00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d56616d7a86929fa9b3becad6e2eefbefe3d7cbbfb4ab9f92877b6e61584e43372b20150a0000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000040c13191b22272b2d2f31333333322f2d2b28231c19140d0b12181c1f252a2d2e3132333332302d2c29241d1b150b0a11171c1f252a2d2e3132333332302d2c29241d1b160c07000000000000000000000000070f151b1f222323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232321201d19130c040000000005111e2a36414c566a7784909daab7c3d0ddeae8dbcec1b5a89b8e817568584e4330272028343f4a5465727f8c98a5b2bfd1dce8ece0d3c7baaea398877b6e6154483b2e21150800000000000000091623303c4956636f7c8998a2aebac7d3e0d3c6baaea298887b6e7885929eabb8c5d1cbc0b5ab998c807375818e9ba8b4c1d0dbcfc3b6a99c9083766f7c8996a9b2bdc9d5d2c5b9ac9f92867a6d6053473a2d20140800000000000000000000000000000000000000000007121d28313d46525e68717e8a949eaab7c3d0dce9f6fffff5e9dccfc2b6a99c8f82766d62584e43392f231a0e05000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d4134271a0e06040000000000000000000815222e3b4855616e7b8896a0acb9c5d2deebece0d4c8bcb1a79a8e8174695e544a3f332d26201f1c181c1f22282f35404b55606a76828f9ca8b2bdc9d5e1eee8dcd1c5b8ac9f9285796d6053463a2d20130700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275737373737373737373737373737373737373737783909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000005111e2a36414c5664717e8a98a2aebac6d3dfebe4d8cbbeb1a5988b7e7777777777777777777777777f8c98a5b2bfcbd8e5ecdfd3c6baada2978a7d7164564c41362a1d1105000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275727272727272727272727272727272727272726d62564a3d3124180b00000000030e19242f3840474c4d4f4f4f4f4f4f4f4f4f4f4f4f4f4e5355586062666c7074797e848a91969ea5afb9c3cdd9e4f0f0e6dcd2c5b9aca196887b6e6155483b2e22150800131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000030e18212d3a46525e6973808d98a2aebcc5d0dbe6f2fef3e7dcd1c6bbafa3998e81756a5f53473c32261b0f0400000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000002080d11171b1f2022252627262522201f1c17110e080200070c10141a1e2121242627262523201f1d18120f0a0300060b0f13191e202124252626252421201d18130f0a040000000000000000000000000000040a0f1315161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161413110d080200000000000714202d3946525e687985929facb8c5d2dfebe5d8ccbfb2a5998c7f7266594c3f312617232e3d4a5663707d8996abb5c0cbd7e3efe3d6cbbfb4aa96897c706356493d3023160a00000000000004101c2934404b5566737f8c99aab4bfcad6dfd2c5b8ac9f9285796c75828f9ca8b5c2d1d1c2b6a99c8f83767884919eabb7c4d1d8ccc0b6ac998d80736d7a8796a1adb9c5d2d3c7bbafa399897d7063564a3d2f24190d010000000000000000000000000000000000000000010c161f2935414c56616c75828f9ca8b5c2cfdbe8f5fffff8ebded1c5b8ab9e92857a6e615a50443b3025190e05000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d4134271a0e01000000000000000000000b1824313e4b5764717e8a97a8b2bdc9d5e1edeaddd1c4b8ab9f95887c6f62574d42382d221c14120f0c1013171d242f3a434e5863707d8a96a1adb9c5d2dfebecdfd3c6baaea298887c6f6255483c2f22150900131f2c3946525f6c7985929facb8c5d2dfebeaddd1c4b7aa9e918480808080808080808080808080808080808080808085929eabb8c5d1deebeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000020e1925303b4753606d7985929fabb8c4cfdae5e8dccfc2b5a99c8f8276686a6a6a6a6a6a6a6a697683909da9b6c3d0dce9ebded2c5b8ab9f9285796d6053473a3025190d01000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaddd0c3b7aa9d90837f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7265584b3f3225180c000000000008131d262f363c3f41424242424242424242474b5154585f62666a6f74787c81858b91959ea0a8afb7c1cbd5dfeaf0e7ded6cabfb4aa9e918478695f53463a2d21140700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000009151f2a36424d57616e7b86929faab4bfced7e1ecf7fff8ede2d7cbc0b5ab9f93877c6f62584e43372b21160a00000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000060b0f12131518191a1918161312100b0600000000000004090e12141518191a1918161413100c0701000000000003080d11131417191a1a19171413110d07010000000000000000000000000000000000000306080909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090907070501000000000000000814212e3b4754616e7a8798a2aebac6d3e0ece3d6cabdb0a3978a7d7064574a3d312417212e3b4754616e7a8799a3afbbc7d3e0ede7dcd0beb1a4988b7e7165584b3e3225180b00000000000006131f2c3845515c6776838f9ca9b6c2d0dbddd0c3b6aa9d90837766727f8c99abb5c0cbd2c5b8ac9f9285797b8796a1acb9c5d2d4c8bbafa49a8a7d70687885919eabb8c4d1d7cbc0b5ab998d807366564c4135291d11040000000000000000000000000000000000000000030c18212935414c56606b73808c99a6b3bfccd9e6f2fffff8ecdfd2c6b9ada1978f82756c61564c41362a20170d020000000000000000000000000000000000000000000915222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d4134271a0e07050200000000000000010e1a2734414d5a6774808d9aa7b3c0ced9e5f1e9ddd0c3b6aa9d9083776a5f53453b2f261c110a06030004060b131d28313d4653606c7884919eabb8c4d1deebeee2d6cabfb4aa988b7e7165584b3e3225180b00131f2c3946525f6c7985929facb8c5d2dfebebded2c5b8aca096918d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9297a1adb9c6d2dfeceaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000008141f2c3945515d6774818e9ba8b2bdc9d5e1ecdfd2c5b9ac9f92867a6d615e5e5e5e5e5e616e7b87959fabb8c4d1ddeae1d5c9bdb2a89a8e8174675c514538281e130800000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaded1c5b8aca095908b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b85786c5f5245392c1f120600000000010b141d242b3033343636362f353c43474d53555d60656a6e73787c8084898e92989da0a8acb2bac1c9d3dde7efe7ded5ccc3baaea2988c7f7266574d42362a1e120500131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313a46535e6974818d98a3aebcc6d0e0e9f3fefffff3e8dcd1c7bbafa4998f82756a5f54473d32271b0f05000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000030506090b0c0d0c0b0907060300000000000000000000020507080b0c0d0d0c0a07060400000000000000000000010507070a0c0d0d0c0a0706040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7c8895aab4bfcad6e2efe4d8ccc0b6ac95887c6f6255493c2f2216202d394653606c7986929facb9c5d2dfece5d9ccbfb2a6998c7f7366594c403326190d0000000000000714202d3a4753606d7986929facb9c5d2dfdacec1b4a79b8e817468707c8999a3afbbc7d3c6baaea298897c7e8a97a8b2bdc9d5d2c6b9ac9f93867a6d6976828f9ca9b5c2cfdcd1c3b6aa9d908377685d5245392c20130600000000000000000000000000000000000000000b151e2a333c45525d686f7c87929facb9c5d2dfecf8fffffaeee2d6cabeb3a99e938a7e71685e52463e32291e14080000000000000000000000000000000000000002080d15222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d4134271a1514120e0903000000000003101c2936434f5c6976828f9ca9b5c2cfdce8f6e6d9cdc0b3a69a8d807367584e4333291d140a000000000000010c161f2b3744505b6575818e9ba8b5c1cedbe8f2e7dbd0c0b3a69a8d8073675a4d4034271a0d00131f2c3946525f6c7985929facb8c5d2dfebede1d4c8bdb2a8a09e9999999999999999999999999999999999999999999ea1a9b3bec9d5e1eeeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000004101d2935404b5563707d8996a1adb9c5d2dfeae0d3c7bbafa3998b7e7165564c51514d5765727f8c98a7b1bcc8d4e0ebded2c5b9aca196897c6f63554b403429160c0200000000000000000000131f2c3946525f6c7985929facb8c5d2dfebede0d4c8bcb1a7a09d9898989898989898989898989898989898989285786c5f5245392c1f12060000000000020b13191f242627292a313a41454e53575f61676d72767b8084898d91969b9fa2aaacb1b9bdc4ccd3dbe5ebe5ddd5ccc3bab0a69f92867a6e6154473b31261a0e0200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d57616e7b86929faab4bfced7e2f2fbfffffff9eee3d7ccc0b5ab9f93877c6f62584e43382c21160b000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c090400000000000000000000000000000003060809131313131313131313131313131313131311100e0a060000000000000a1623303d495663707d8996a3afbcd0dbe7ede0d4c8bbafa49a877b6e6154483b2e21151f2b3744505b657885919eabb8c4d1deebe6dacdc0b3a79a8d8074675a4d4134271a0e0000000000000a1623303d495663707c8998a3aebac7d3e0d8cbbfb2a5988c7f72656d7a86929facb9c5d2cabfb4aa988c7f808d9aa7b3c0cedad0c4b7aa9d918477686774808d9aa7b3c0cddad2c5b9ac9f92867a6d6054473a2d2114080000000000000000000000000000000000000007121d27303c45505a606d7a849199a3afbbc7d4e0edf9faf9f8f2e6dacfc5bbafa59e92857a6e615a50443b3025190e050000000000000000000000000000000000040c13191d222f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d4134272222211e1a140e060000000004101d2935404b556b7784919eaab7c4d1ddeaf0e3d7cabdb0a4978a7d7164574a3e3124170b0200000000000000040f1b27333f495365727f8b98a5b2becbd8e5f8e8dbcec2b5a89b8f8275685c4f4235291c0f00131f2c3946525f6c7985929facb8c5d2dfebf1e5d9cec3bab2acaaa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6abadb3bbc5cfdae6f2eaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000c18242f394653606c7884919eabb7c3cdd9e4e3d7cbc0b5ab9c8f8276685d524546535e697683909da9b6c2cdd8e4eaded1c4b7ab9e9184786c605346392f23180c0000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf0e4d9cec3b9b1acaaa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59f9285786c5f5245392c1f120600000000000001080e13171a232c343c434b51585f62696e747a7e83888d91969a9ea1a9acaeb4b8bdc3c9ced6dee5e5e0d9d5cbc3bab2a89f948c7f72685e524639291f14090000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000040e19222d3a47535f6974818e99a3aebcc6d0e0e9f3fffffffffff4e8ddd2c7bbafa49a8f82756a6054483d32271c10050000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000000000000000000000000000030606080a0c0d0d0e0e0d0d0b090707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b19151009020000000000000000000000040a0f12151520202020202020202020202020202020201e1d1a16110b04000000000b1824313e4b5764717e8a97a4b1bdcad7e4ecdfd2c6b9ac9f9386796d6053463a2d20131b27333f49536a7783909daab6c3d0dde9e7dbcec1b4a89b8e8175685b4e4235281b0f000000000004101d2935404b556673808c99aab4bfcbd7e2d6cabeb4aa968a7d7063677783909daab6c3d0d0c2b5a89b8f8283909daab6c3d0dacdc1b4a79a8e81746765717e8b98a4b1becfdad4c7bbafa3998a7d7063574a3d3025190d010000000000000000000000000000000000050e18232e39424d57626c75818e96a1abb5c0cbd7e3eff0edececedece1d7cdc1b9ada2978f82756c61564c41362a20170d02000000000000000000000000000000040e161e24292d2f3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d41342f2f2e2d2a261f180f060000000613202c3945515d677985929facb8c5d2dfebefe3d7cbbfb4aa94877b6e6154483b2e2115080000000000000000000b17222d3c4956626f7c8995a2afbcd1dce8f3e9dcd0c3b6a99d9083766a5d5043372a1d1000131f2c3946525f6c7985929facb8c5d2dfebf6eae0d5ccc3bdb8b7b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b8b9bec5cdd6e1ecf7eaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000007121f2b3844505b6673808d99a7b1bcc8d4e3e8dcd1c5b9ac9f92867a6d6054474854616e7b87959fabb8c4d4dfeae0d4c8bcb1a7998c8073655b5044372b1d12070000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf5eadfd5cbc3bcb8b7b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2ab9f9285786c5f5245392c1f1206000000000000000007101a232c353d464e555d606a6f757b80858b9095999ea1a8abadb2b8babfc5c8ced5d9e0e4e0dad5cec9c1b9b1a8a0969082786c60564c41362a180d030000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000a15202b37434e58616e7b87929fabb4bfced8e2f2fbfffffffffff9eee3d8ccc0b6ac9e94897c6f62594f44382c21160b0000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000000206060b0f12131517191a1a1b1b1a1918161413110d0806040000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c03000000000000000000060e151b1f21222c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2927221c150d050000000b1825323e4b5865717e8b98a4b1becbd7e4ebdfd2c5b8ac9f928579665c5144382c1f1217222d43505c6976838f9ca9b6c2cfdce9e8dbcfc2b5a89c8f8275695c4f4236291c0f000000000006131f2c3845515d677683909ca9b6c3d1dcdfd3c6baaea298877b6e616774818d9aa7b4c0cfd2c5b8ab9f928587929facb9c5d2d5c9beb3a9978b7e7164636f7c8996a9b2bdc9d5d7cbc0b5ab9a8d807367564c4135291d110500000000000000000000000000000000020b17202834404b545f69717e8b939ea8b2bdc7d1dce8e8e4e0dfdfe0e3e7dfd6cabeb3a99e938a7e71685e52463e32291e14080000000000000000000000000000020c1620283035393a3c4855626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d413c3c3c3b3a36312a21180e0300000714202d3a4753606d798698a2aebac6d3e0ecece0d3c7baaea398867a6d6053473a2d2014070000000000000000000615212e3b4854616e7b8794abb5c0cbd7e3efeaddd1c4b7aa9e9184776b5e5144382b1e1100131f2c3946525f6c7985929facb8c5d2dfebf8f1e7ded5cec8c5c4c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c5c6c9cfd6dfe8f2f6eaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000030f1c28333f4a54626e7b8895a0abb8c7d1dce8e0d3c7bbaea3998b7e7164564c4d5765727f8c98a7b1bcc8d4e6eaddd1c4b8ab9f95887b6e6253493f33271b0b010000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f1e7ddd5cec8c5c3bebebebebebebebebebebebebebebeb8ab9f9285786c5f5245392c1f120600000000000000040d18222c353e474f585f676d747c81878d92989d9fa7abacb2b8b9bdc4c6cad0d4d9dfe2e0d9d4cfc9c4bdb9afa7a09691847a6d665b50443b30251906000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000030f1b26323a47535f6a75818e99a3afbdc6d1e0eaf4f9f6f3f3f8f9fbf4e8ddd2c7beb0a69c8f82766b6054483e33281c0b0200000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000004090e1214171c1f20222426262728272726252321201d191312100c0700000000000000000000000000000000000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c020000000000000006101820262b2e2f39393939393939393939393939393939393736332e271f170d0400000c1925323f4c5865727f8b98a5b2becbd8e5ebded2c5b8ab9f9285786c5f4a4034281c101c2936434f5c6976828f9ca9b5c2cfdce8e8dccfc2b5a99c8f8276695c4f4336291c1000000000000714202d3a4753606d7986929facb9c5d2dfded2c5b8ab9f928578695e64717e8b97a9b3bec9d3c6baada297929299a3afbbc7d3d2c6b9ada197887b6e61606d7a8796a1adb9c5d2dcd1c3b7aa9d908377685e5246392d201307000000000000000000000000000000000a141d29323a45515c666e7b86929fa5afbac4cfd9e3e4ddd8d4d2d2d3d7dce3dbcfc5bbafa59e92857a6e615a50443b3025190e050000000000000000000000000008131e28323a414647494955626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a4d494949494846423b332a1f140900000714212e3a4754616d7a8794aab4bfcad6e2efecdfd2c5b9ac9f928679675d5145392c1f13060000000000000000000714212d3a4754606d7a8799a3afbbc7d3e0edebded1c4b8ab9e9185786b5e5245382b1f1200131f2c3946525f6c7985929facb8c5d2dfebf8f9f0e7e0d9d4d2d1ccccccccccccccccccccccccccccccccccccccccccd1d2d5dae1e8f1faf6eaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000b17222d3847535f6a7783909dabb5c0cbd7e3e3d7cbbfb5ab9c8f8275685d52535e697683909da9b6c2cdd8e4e3d7cbc0b5ab9d908376695f5341382d22170b000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f9efe7dfd9d4d1d0cbcbcbcbcbcbcbcbcbcbcbcbcbcbc5b8ab9f9285786c5f5245392c1f1206000000000000010c161f2a343e474f59606a6f7980878e93999fa2aaabb1b7b9bdc4c5c9cfd3d6dbe2e0dbd6d3cdc8c4bdb9b2aca59d9590847b6e685e544a3f32291e1408000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e58626f7c87939fabb5c0cfd8e2f2f2ede9e7e6ececeff3eee4d9d0c1b7ab9f94897d7063594f44382c1d140a00000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000070c10151a1e2122282b2d2e313233343434343332302e2d2925201f1c18120e09030000000000000000000000000000000000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e1409000000000000030c18222a31373a3c464646464646464646464646464646464644423f3931291f150b00000c1926323f4c5965727f8c98a5b2bfcbd8e5ebded1c4b8ab9e9185786b5e52452e23180c1c2935424f5c6875828f9ba8b5c2cedbe8e9dccfc3b6a99c908376695d5043362a1d1000000000000a1723303d4a5663707d8999a3aebac7d3e0dcd0c3b6a99d9083766a57616e7b8897a1adb9c6d2cabeb3a9a29f9fa3abb5c0cbd7d1c5b8ab9e928578695f5d687885919eabb8c4d1ded2c6b9ac9f93867a6d6154473a2e21140800000000000000000000000000000006111b262f3a444f59606d79839098a2aeb7c1ccd6e1e2d9d2ccc8c6c5c7cbd1d8e1d7cdc1b9ada2978f82756c61564c41362a20170d020000000000000000000000010d1924303a444c5254555555626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a555555555555534d453b31261a0e02000815212e3b4854616e7b8794a1aebad0dbe7f3ebded1c4b8ab9e9185786b554b4035291d10040000000000000000000613202c3945525d687986929facb9c5d2dfecebded2c5b8ab9f9285786c5f5245392c1f1200131f2c3946525f6c7985929facb8c5d2dfebf8fff9f1eae5e1deddd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9dedfe1e6ecf2fafff6eaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000006111c2b37434e5865727f8b99a3afbbc7d3e0e7dcd1c5b9ac9f92867a6d605454616e7b87939facb9c6d2dfece0d3c7bbafa3998b7f7265574d422f261b1106000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fdf4ebe3ddd7d4d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c5b8ab9f9285786c5f5245392c1f120600000000000008131e28313c464f59616b707c848d92999fa4abaeb4b8bcc2c5c9ced2d5dadfe4ddd8d4d0cac7c3bcb8b2ada8a09e938e837b6e695f564c42382d20170d02000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000050f19232e3b47545f6a75828f99a4afbdc7d1e1eaeee7e1dddad9dfe0e3e7edebe2d3c7bbb0a69c9083766b6155483e2f261c1106000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000060c12181c1f262b2e2d3338393b3d3f4040414140403e3c3a3935302d2c28231c1a140e090200000000000000000000000000000000000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100400000000000a151e2a343c4347485353535353535353535353535353535353514f4a433b31271c1106000c1926333f4c5966727f8c99a5b2bfccd8e5eaded1c4b7ab9e9184786b5e5145382b1e071c2835424f5b6875828e9ba8b5c1cedbe8e9dcd0c3b6a99d9083766a5d5043372a1d100000000004101d2935404b556673808d99abb4bfcbd7e3dacdc1b4a79a8e8174675b5f697885929eabb8c5d1d0c5bbb3adabacafb5bdc7d1dccec2b5a89b8f82756857566976828f9ca9b5c2cfdcd4c8bbafa49a8a7d7064574a3d3025190d0100000000000000000000000000030d17222d38414c56606b73808d95a0aab4bfc9d3dee4d9d0c7c0bbb9b9bbbfc6cfd8dfd6cabeb3a99e938a7e71685e52463e32291f1408000000000000000000000005111d2935414c565d61626262626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d807467626262626262615f574d42362a1e1205000815212e3b4854616e7b8794a1aebad0dbe7f2ebded1c5b8ab9e9285786b554b4035291d10040000000000000000000613202d394653606c7986929facb9c5d2dfecebded2c5b8ab9f9285786c5f5245392c1f1200131f2c3946525f6c7985929facb8c5d2dfebf8faf0e8e0dad5d2d1cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdd1d2d6dae1e9f1fbf6eaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000f1a26313c4754616d7a86929facb9c5d0dbe6e0d3c7baaea3998a7e7164555765727f8c9aa4afbbc8d4e0ecdfd2c5b9ac9f92867a6d6154473c3121140a00000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f5ebe2d9d2ccc7c6c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b8ab9f9285786c5f5245392c1f12060000000000010d19242f3a434e58616b707d8691969fa3abafb5babec5c8cdd2d5dadfe1dfd9d4d2ccc8c6bfbab8b1aca8a19e96918a81796e695f574d443a2f261c0e0500000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000b16212c38434f59626f7c88939eabb5c0cfd9e3ece3dcd5d1cecdd2d3d7dce2eae3d8ccc2b7ab9f948a7d70635a5042382d22170b000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000030a11171d23282c31373a3b3f4446484a4c4d4d4e4e4d4c4b494746413d3a38342e2a261f19140b0600000000000000000000000000000000000000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2115090000000006111c26303c464e53555f606060606060606060606060606060605d5b554d43392e22160a000c1926333f4c5966727f8c99a5b2bfccd8e5ebded1c4b8ab9e9185786b5e5245382b1f081c2935424f5c6875828f9ba8b5c2cedbe8e9dcd0c3b6a99d9083766a5d5043372a1d10000000000613202c3945515d677683909ca9b6c3d1dce7d8cbbfb2a5988c7f726559576875828f9ba8b5c2d1d7cdc5bebab8b9bbc0c7cfd9d6cbbfb4aa988c7f7265595a6774808d9aa7b3c0cddad8ccc0b6ac9a8d817467564c41362a1e1105000000000000000000000000010b151f27333f49535e68707d88939fa7b1bcc6d0dbe8ddd2c7beb6afacacaeb5bdc6d1dcdbcfc5bbafa59e92857a6e615a50443b3025190e05000000000000000000000713202d3946525d686d6f6f6f6f6f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d80746f6f6f6f6f6f6f6e695f53463a2d211407000714212e3a4754616d7a8794aab4becad6e2eeecdfd2c5b9ac9f928679675d5145392c2013060000000000000000000714212d3a4754606d7a8799a3afbbc7d4e0edebded1c4b8ab9e9185786b5e5245382b1f1200131f2c3946525f6c7985929facb8c5d2dfebf8f2e8ded6cec9c5c4c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c5c6cacfd7dfe9f3f6eaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000a15202d3946525e6875828f9caab3becad6e2e3d7cbbfb4ab9b8f8275675d5e697683909dacb6c0ccd8e4e2d6cabeb3a99c8f8275685e5246392d20130200000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf9eee3d9d0c7c0bbb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8ab9f9285786c5f5245392c1f1206000000000004111d2935414c555f6a707d879298a0a8afb5bbc0c7cad0d4d8dee1e1dbd6d3cec8c7c0bbb9b4aeaca7a09d96918b847d746d675e574d453b32281d140a0000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000004101c27333b4854606b75828f9ca5afbdc7d2e1ebe3dad2cac5c1c0c5c7cbd1d8e1eaded3c7bcb0a69d9083776c61544a3f33281c11060000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000070c151c23282e34383c4247484a5053555759595a5b5a5a59585654524c4a4644403936312a251f17110a02000000000000000000000000000000000000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c000000020c17232e38424e585f626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a675f554a3f33271a0e000c1926323f4c5965727f8c98a5b2bfcbd8e5ebded1c5b8ab9e9285786b5f52452f24190d1c2936424f5c6975828f9ca8b5c2cfdbe8e9dccfc2b6a99c8f8376695c504336291d10000000000714202d3a4753606d7a86929facb9c5d2dfe2d6cabeb3a996897d7063565966727f8c99abb5c0cbd7d7d0cac6c5c5c7cbd1d9e0d3c7baaea398897c6f62565865717e8b98a4b1becfdaddd2c4b7aa9d918477685e5246392d20140700000000000000000000000007121d27313944505b656d7a85919aa4afb9c3ced7e2e0d8ccc0b6aca49f9fa3abb5bfcbd7e1d7cdc1b9ada2978f82756c61564d41362a20170d020000000000000000000714212e3a4754616d7a7c7c7c7c7c7e8a97a4b0bdcad7e3f0e7dbcec1b4a89b8e817c7c7c7c7c7c7c7c7b6e6155483b2e221508000714202d3a4753606d798698a2aebac6d3dfecede0d3c7bbaea399867a6d6053473a2d2014070000000000000000000815222e3b4855616e7b8894abb5c0cbd7e3efeaddd1c4b7aa9e9184776b5e5144382b1e1100131f2c3946525f6c7985929facb8c5d2dfebf6ebe0d6ccc4bdb9b7b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b8b9bec5cdd7e1ecf7eaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000005111e2a36414c5664717e8a98a2aebac6d3dfe7dcd1c5b8ac9f92867a6d60616e7b87939facb9c6d2dde8dfd3c6baada2978a7e7164564c41362a1d110500000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf4e8ddd2c7bdb5afacacacacacacacacacacacacacacacacacab9f9285786c5f5245392c1f120600000000000613202c3945515d676f7c869299a2aab2bbc0c7ccd2d6dbe2e4e0d9d5d0cac6c3bcb8b6afacaaa29f9b95908b847f79706c605d554d453b332920160b020000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000713202c38444f59636f7c89949eaab7c1d0d9e3e9dfd2c8c0b9b5b3b9babfc6cfd8e2e4d8cdc2b8ab9f958a7d70665b5044382e23170b0000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000710191e262e34394045464d5355545b606164656667676767666563615e565753514a46423b363027221b140b050000000000000000000000000000000000000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e0200000a141e28343f4a545f6a6f79797979797979797979797979797979797771675b4f4236291d10000c1825323f4b5865727e8b98a5b1becbd8e4ebded2c5b8ab9f9285786c564c4135291d111d293643505c6976838f9ca9b6c2cfdce9e8dccfc2b5a99c8f8276695c4f4336291c10000000000a1723303d4a5663707d8999a3aebbc7d3e0dfd3c6baada297877a6e61545663707c8999a3afbbc7d3e0dbd6d3d2d2d3d7dce3dfd2c5b8ac9f9286796d605356636f7c8996a9b2bec9d5ded1c5b8aca095877a6e6154473b2e2114090000000000000000000000050f18242f39434e58606c77828f97a1acb6c0cbd5e0e2d8cec6bbafa49a939299a3aebbc4cfdadfd6cabeb3a99e938a7e71685e52463e32291f14090000000000000000000b1825313e4b5864717e88888888888a909aa6b2becbd7e4f1e8dccfc2b6aa9e938e88888888888888888276695c504336291d100006131f2c3845515d677885929fabb8c5d2deebefe3d7cbbfb5ab94887b6e6155483b2e22150a0000000000000000000916232f3c4956626f7c8995a2afbcd1dce8f4e9dccfc3b6a99c908376695d5043362a1d1000131f2c3946525f6c7985929facb8c5d2dfebf1e5dacec4bab2acaba7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7abadb3bbc5cfdae6f2eaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000010d1925303a4753606d7985929fabb8c4cedae5e0d3c7baaea3988a7e716465727f8c9aa4afbbc8d4e4ebded2c5b8ab9f9285796d6053473a3025190d0100000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf0e3d7ccc0b5aba49f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9285786c5f5245392c1f12060000000006121e2b37424d57606d7a849198a2abb4bcc3cbd1d7dde3e7e2dbd6cec9c5bebab8b1acaca49f9c98928e89837e79726d676159514b433b332921180e04000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000020b1a242f3b4854606b76828f9ca6b0bbc9d3e2ebe1d7cdc0b6aea8a6acaeb4bdc6d1dce7ded4c8bcb1a79d9083786c60544a3f34281c120700000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000030b1218222b30383f444b5153575f6265666c6e7072737374747373716f6d686764605c54534d46423b332d261d170e0600000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985868686868686868686868686868686868175685c4f4235291c0f020006111c26303844505c666f7c868686868686868686868686868686868683776a5d5144372a1e11000b1825323e4b5865717e8b98a4b1becbd7e4ecdfd2c5b9ac9f928679685d5245392c20131d2a3643505d697683909ca9b6c3cfdce9e8dbcec2b5a89b8f8275685c4f4235291c0f00000004111d2935414b556673808d99abb5bfcbd7e3ded2c5b8ab9f928578695e5253606d7a86929facb9c5d2dfe6e2dfdedfe0e3e8e9dccfc3b6a99c908376665c5154606d7a8797a1adb9c6d2dfd4c8bcb1a7978a7e7164574a3e30251a0e02000000000000000000020c17212935404b555f6a727f8b949ea9b3bec7d2dde7dbd0c6bcb1a79f938786929fa9b3bec9d5dfdbcfc5bbb0a69f92857b6e615a50443b3025190e0500000000000000000b1825313e4b5864717e8b95959595979aa2acb7c2cedae6f3eaded2c6baafa59e9b959595959595958f8376695c504336291d100004101d2935404b556a7784919daab7c4d0ddeaf3e7dcd1bdb0a4978a7d7164574a3e32261b0b0200000000000000030f1b27333f495365727f8b98a5b2becbd8e5f9e8dbcec1b5a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebede1d5c9bdb2a8a19e9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea1a9b3becad6e2eeeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000008131f2c3845515d6774818e9ba8b2bdc9d5e1e3d6cbbfb4aa9b8f827567697683909dacb6c0ccd8e4e1d5c9bdb2a89a8e8174675c514538291e13080000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebede0d4c7bbafa499939292929292929292929292929292929292929285786c5f5245392c1f1206000000000814212d3a47535f6974808d96a1aab4bdc6ced7dce3e8e7e0d7d0cac4bdb9b3aeaba7a09d9a93908b86817c77716d66605c554f454039312920180f0a04000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000a141d2c38444f5963707d89949fabb8c1ccdbe5e6dbd0c5bbaea49c9a9fa3abb4bfcbd7e4e4d8cdc3b8aca0958a7e71665c5044392e23180c01000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000030c151d2328343c424a50545c6065696e7276797b7d7f80808181807f7e7c7a7774706d66615f57524d443f382f2920180f06000000000000000000000000000000000000000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c0f02020c17232e38424e58606d7883909993939393939393939393939393939083776a5d5144372a1e11000a1724313d4a5764707d8a97a3b0bdcad6e3ede0d3c7bbaea399877a6d6054473a2d21141d2935404b556a7784919daab7c4d0ddeae7dacec1b4a79b8e8174685b4e4135281b0e0000000613202c3945515d677683909da9b6c3d1dce7dccfc3b6a99c90837669564d515d677783909daab6c3d0dde9eeecebecedeff0e4d8ccc0b6ac998d807366544b525d687885919eabb8c4d1ded9cec1b4a79a8e817467574d42362a1e12050000000000000000000a141e29333b45515d676f7c86929fa6b0bbc4d0d9e4dfd6cabfb4aaa0958d80808d97a1adb9c3cdd9e1d7cdc1baada2978f82756c61564d42362a20170d02000000000000000b1825313e4b5864717e8b97a2a2a2a4a6acb4bdc8d3dfeaf6eee2d7cbc1b7afaaa8a2a2a2a2a2a29c8f8376695c504336291d1000000c18242f424f5c6975828f9ca8b5c2cfdbe8f6e6dacdc0b3a79a8d807467584e43372b1d140a000000000000010b151f2b3744505b6575818e9ba8b4c1cedbe7f3e6d9ccc0b3a6998d8073665a4d4033271a0d00131f2c3946525f6c7985929facb8c5d2dfebebded2c5b9aca196918d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9297a1adb9c6d2dfeceaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000004101d2935404b5563707c8996a1acb9c5d2dee7dcd0c5b8ac9f92867a6d6e7b87939facb9c6d2dde8ded2c5b9aca196897c7063554b403429170c020000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebecdfd2c6b9ac9f93878686868686868686868686868686868686868685786b5e5245382b1f1205000000030f1b27333f4953616e7b87929fa8b2bcc6cfd8e0e8eee7ded5cec6bfbab2acaaa29f9a95918c87837e7a746f6b64605c54514b433e352f2823221f1b160f070000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000006111c262f384855616b7683909ca6b0bbcad3deeee2d6cabeb3a99c928d9299a3aebac7d2dde8dfd4c8bcb1a79d9184786d60544a4034281d1207000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000030c151e272e3440464e545c60666d71777b7f8385888a8c8c8d8e8d8d8c8b898784817d79736e69615e565049413a322a211810060000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f000a141e28343f4a545f6a737f8c95a09f9f9f9f9f9f9f9f9f9f9f9f9f9d9084776a5d5144372a1e1100091623303c4956636f7c8996a2afbccfdae6efe3d7cbbfb5ab95887b6e6255483b2f22151f2c3945515d677885929fabb8c5d2deebe6d9ccc0b3a6998d8073665a4d4033271a0d0000000714212d3a4754606d7a86929facb9c5d2dfe7dacdc0b4a79a8d8174675a4e4b556774818d9aa7b4c0cfdae6f2f8f8f8f9faede0d4c8bbafa49a8a7d7063574a4c566976828f9ca9b6c2cfdcddd1c4b7aa9e918477695e52463a2d201407000000000000000006111c26303b45505a606d79839198a3aeb8c1cdd6e2e2d6cdc4baaea2989083797985919ea7b1bcc8d4e0dfd6cabeb3a99e948b7e71695e52463e32291f1409000000000000000b1825313e4b5864717e8b97a4afafb0b2b7bdc6cfdae4f0fbf3e8ddd3c9c1bab6b4afafafafafa99c8f8376695c504336291d100000071a2734404d5a6773808d9aa6b3c0ced9e5f1e9ddd0c3b6aa9d9083776a5f53473b2f261c110a06040004060b121d2731394653606c7884919eabb7c4d1deeaeee2d6cabeb3a9978b7e7164584b3e3125180b00131f2c3946525f6c7985929facb8c5d2dfebeaded1c4b7ab9e918481818181818181818181818181818181818181818185929eabb8c5d1deebeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000c18242f394653606c7884919eabb7c3cdd8e4e0d3c7baaea2988a7d71727f8c9aa4afbbc8d4e4eaded1c4b7ab9e9184786c605346392f23180c000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82797979797979797979797979797979797979797873685c5044372b1e110500000005121f2b3744505b6573808d99a3afbac4ced7e1eaf2e8dfd5ccc3bcb4aea8a09e98928d89847f7b76716d6863605953514b454039303030302f2e2b272019100700000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000b17222d3842505a63707d8a949fabb8c2cddce5ecdfd3c6baada2978d8087929facb6c0ccd8e4e4d9cec3b8aca0968b7e71665c5144392f23180c010000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000020b151e2730394045515860666d72797e83888c9092989798999a9a9a9a99989696918d8a85807b746e69605b534c443c332a22180f0600000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f06111c26303844505c666f7c86929fa7b1acacacacacacacacacacacaa9d9084776a5d5144372a1e11000815222f3b4855626e7b8895a9b2bec9d5e1eee7dcd1bcafa396897c706356493d302316202d3a4753606d7a8698a2aebac6d3dfece5d8cbbfb2a5988c7f7265594c3f3226190c0000000a1724303d4a5763707d8a99a3afbbc7d3e0e5d8cbbeb2a5988b7f7265584c4b5764717e8a97a9b3bec9d5e1eefafffffff9ecdfd2c6b9ac9f93867a6d6154474d5a6774808d9aa7b3c0cddaded2c5b8aca096877b6e6154483b2e21150900000000000000040d17232e38424d57616c74818e95a0aab4bfcad3dfe4d9d0c4bbb0a69f92867c6e717e8b95a0abb8c1ced8e2dbcfc5bbb0a69f92857b6e615a50443b3025190e050000000000000b1825313e4b5864717e8b97a4b1bbbdbec2c8cfd8e1ebf6fff9efe5dbd3cbc6c2c1bbbbbbbbb6a99c8f8376695c504336291d1000000b1724313e4a5764717d8a97a8b1bdc8d4e1edeaddd1c4b8aba095887c6f62574d42382d231c1412100c1013171d242f39434e5863707d8996a1adb9c5d2dfebecdfd3c6baada297887b6e6255483b2f22150800131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275747474747474747474747474747474747474747783909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000007121f2b3744505b6573808d99a7b1bcc8d4e3e2d6cabfb4aa9b8e82757683909dacb6c0ccd8e4e0d4c8bcb1a7998d8073655b5044372b1d1207000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6861574c4034281b0f030000000613202d394653606c7884919eabb5c0ccd6e0e9f3ebe1d6cdc3bab2aaa29f96918b85817c77726e6965605d56544f4645403d3d3d3d3d3d3d3c3b38322b22190f04000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616c7783909da6b0bccad4deefe3d7cbbfb4ab9f92857a818e9aa4afbbc8d4e0eadfd4c8bdb2a89e9184796d60554b4034291d12070000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000a141d273039424b515b636a6f787f848b9095989c9fa2aaa5a6a6a7a7a6a6a4a8a09d9a97928d86817b726c655e564e463c342a21180d04000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f0b17232e38424e58606d78839099a3aeb9b9b9b9b9b9b9b9b9b9b9b7aa9d9084776a5d5144372a1e11000714202d3a4753606d7a8697a1adb9c6d2dfebe4d7cbbeb1a4988b7e7165584b3e2f2419222f3c4855626f7c8895aab4becad6e2eee4d7cabdb1a4978a7e7164574b3e3124180b000004111d2935414c566773808d9aabb5c0cbd7e3e2d5c9beb3a996897c706356494855616e7b8897a1adb9c6d2dfebf2f2f2f2f2eaddd0c4b7aa9d918477685d52464b5865727e8b98a5b1becfdae1d4c8bdb2a8978b7e7164584b3e31251a0e020000000000010c161f28343f4a545e69717e8a939da8b1bcc6d1dce8ddd2c7beb2a99e938b7f726a6c7883909da5afbcc6d0dbe1d7cdc1baada2978f82756c61564d42362a20170d0200000000000b1825313e4b5864717e8b97a4b1becacbced3dae1eaf3fdfffff7ede5ddd7d2cfcec8c8c8c2b6a99c8f8376695c504336291d1000000814212e3b4754616e7b8795a0acb8c5d1deeaece0d4c8bcb1a79b8e8174695e544a3f342e26201f1c181c1f22282f35404b55606a76828f9ca8b2bdc9d5e1edebded2c5b8ab9f9285796c605346392d20130600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756867676767676767676767676767676767676a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000030f1b27333f4953626e7b88959fabb8c7d1dce7dbd0c5b8ac9f9285797b87939facb9c6d2dde8ddd1c4b8ab9f95887b6e6253493f33271b0b01000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5c574f453a2f24180c000000000815222e3b4855616e7b8896a1adbdc7d1dee8f2f1e6dacfc4bbb2a8a098928c847e79746f6a66615e5754524c4a4a4a4a4a4a4a4a4a4a4a4a4947433d342b20160a000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000006121f2b3844505b66707d8a95a0abb9c2cddce6ece0d3c7baaea3998d80737c87939facb9c2cdd8e4e5d9cec3b9aca1968b7e72675c5145392f24180d0100000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000006111b262f39424b545c606d737c838c91979da0a7a9acaeb4b2b3b3b4b4b3b2b1b2acaaa9a19e99928d867f776d685f584e463c332a1f160c010000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0a141d28343f4a545f6a727f8c959fabb4bfcbc6c6c6c6c6c6c6c6c3b7aa9d9084776a5d5144372a1e11000613202c3945515d677885919eabb8c4d1deebe7dacdc0b4a79a8d817467564c4135291d25313e4b5864717e8b97a4b1bed0dbe7eee1d5c9bdb2a995887c6f6255493c2f22160900000613202c3945525d687783909daab6c3d1dce8dfd2c6b9ada197877a6d61544746535f697885919eabb8c4d1dee5e5e5e5e5e5e5dacdc1b4a79a8e817467564c414956636f7c8996a9b3bec9d5e1d9cec1b4a79b8e817468574d42362a1e1205000000000008131e28313a44505c666e7b85929fa5afbac3cfd8e2e0d8ccc0b6aca1978f82756d62666f7c89939eaab4bfcad6e0dfd6cabeb3a99e948b7e71695e52463e33291f140900000000000b1825313e4b5864717e8b97a4b1becad7dadfe4ebf3fcfffffffff7efe8e2dedcdbd5d5cfc2b6a99c8f8376695c504336291d1000000714202d3a46525e697784919daab7c3ced9e4f0e4d9cdc3b9ac9f92867b6e665b50443f38302d2c2823292c2d33394045515d676f7c88949fabbac4cfdae5efe3d7cbbfb4aa9b8e8275655b5044372b1f120500131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000b17222d3847535f6a7783909dabb5c0cbd7e3dfd3c6baaea2988a7e7f8b9aa4afbbc8d4e4e3d7cbc0b5ab9d9083776a5f5341382d22170b00000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5353535353535353535353535353535352504c453d33291e1109010000000b1824313e4b5764717e8a97a9b2bdcfd9e3f0faeee1d5c9beb3a9a09691867f79726d6762605856565656565656565656565656565656565656544e463d32271b0f030000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000003101c28343f4a54606c7883909da7b1bccbd4def0e4d8ccc0b6ac9f92867b6e75828f9ca7b1bcc8d4e0eae0d5c9bdb2a89e9184796d60554b4035291e130800000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000030d17222d38414b545c666d747f8790959ea1a9acb1b6b8babfbfbfc0c1c0c0bfbebdb8b7b3adaba39f98928b827a6e6a5f584e453c31281e13080000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c111c262f3844505c666e7c86929fa7b1bdc6d1d2d2d2d2d2d2d2d0c3b7aa9d9084776a5d5144372a1e110004111d2935404b55697683909ca9b6c3cfdce9e9dccfc3b6a99c908376685d5245392c242b37424d576774808d9aa7b3c0cddae6ebdfd2c5b9ada196877a6d6054473a2d21140700000714212d3a4754606d7a86929facb9c5d2d9d9d9d1c5b8ab9e928578685e5246424d576875828f9ba8b5c2d1dcd9d9d9d9d9d9d9d5c9beb3a9978b7e7164584b3e4754606d7a8797a1adb9c6d2d9d9d1c4b7ab9e918478695e53463a2d21140700000000060f19242f3a434f59606d78829097a2adb7c0ccd5d9d9d8cec6bbafa49a91857a6d615b606b75818e98a2aebac4cfdad9dbcfc5bbb0a69f92857b6e615a50453b30251a0e05000000000b1825313e4b5864717e8b97a4b1becad7dde1e7eef6fefffffffff8f0e9e4e0dddcd9d9cfc2b6a99c8f8376695c504336291d10000005111e2a36424d576773808d9aa7b1bcc8d4e1eceae0d3c7baaea3989082786c605a504a423d3a38342f34383a3f444b515b606d7984919da6b0bbccd6e0ebece0d3c7baaea3988b7e716453493f33271b0f0300131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4e4e4e4e4e4e4e4e4e4e4e4e4e515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000006111b2b37424e5765727f8b99a3afbbc7d3e0e2d6cabfb4aa9b8e8182909dacb6c0ccd8e4e0d3c7bbafa3998b7f7265574e422f261b110600000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4646464646464646464646464646464544403a312e29231b13090000000d1a2633404d596673808c99a6b3bfcfd9ebf5f8ebdfd2c6b9ada19791847c726d66605d565e616363636363636363636363636363636363636260584e43382b1f13060000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000010b121f2b3844505c66717e8a95a0acb9c3cddde6ede0d4c8bbafa49a8e817468707d89959fabb8c4ced9e5e5dacec4b9ada1968c7f72675d51453a2f24190d02000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000010b151f27333f49535c666d78818c9299a0a7adb2b8bcc3c5c6cad0cccdcdcdcdcccec8c5c4beb9b5aeaaa29f948f847c6f6a5f574d433a2f24190d0300000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c17222d38424d57606d78839098a3aeb9c3cfd8e2dfdfdfdfdfddd0c3b7aa9d9084776a5d5144372a1e1100010d18242f414e5a6774818d9aa7b4c0d0dbe6ecdfd2c5b9ac9f92867a6d6054473d352f343a47535f697784919daab7c4d0ddeaebded1c4b8ab9e918578675d5145392c20130600000a1724303d4a5763707d8a99a3afbbc7ccccccccccc2b6a99c8f837669564c413f4c5966727f8c99abb5bfcbccccccccccccccccccc6b9ada197887b6e6155483b45525d687885919eabb8c4ccccccccc5b9aca196877b6e6154483b2e211509000000030e18212935414c56606b737f8c949fa9b3bec9ccccccccd0c6bcb1a79f93887d70685e5259616e7b86929fa8b2bdc9cccccccccdc1baada2978f82756c62574d42362a20170d020000000b1825313e4b5864717e8b97a4b1becaced1d6dce4ecf6fffffff8efe6ded8d3d1d0ccccccc2b6a99c8f8376695c504336291d100000020e1a25303c4955626f7c8895a0acb8c5cfdae6efe3d7cbbfb4aa9f948c7f736c605c544f49464440434045474a50555d606e74818e96a0acb8c2ccdee8f2eadfd2c5b9ac9f92867a6d6054473a2d22170b0000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42414141414141414141414144515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000e1a26313c4754616d7a86929facb9c5d0dbe6dbd0c5b8ac9f928688939facb9c6d2dde8dfd2c5b9ac9f92867a6d6154473c3121140a0000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4242424242424242424242424242424242423f3e3a342d251b110600000e1a2734414d5a6774808d9aa7b3c0cddae6f3f7ebded1c4b8ab9e91857a6f6a605c54525e686e7070707070707070707070707070707070706f6a6054473b2e2215080000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000007121d2834404b54606d7884919ea7b1bccbd5dfefecdfd2c6b9ac9f93877b6e626b7683909da8b2bdc9d5e1ebe0d5c9bdb2a89e9285796d60564c4135291e1308000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000007121d27313944505b656d78828e939fa3abb1b9bec4c8ced2d3d6dbd9d9d9dad9d9d9d4d1cfc9c6bfbbb4aea69f9691857c6f695f554c4135291f150b01000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423529141d28333f4a545f69727f8c959faab4bfcbd4e1eaf4ecececeaddd0c3b7aa9d9084776a5d5144372a1e110000071825323e4b5865717e8b98a9b3becad6e2ede0d3c7bbaea3998a7e7164594f4540403f444d57626e7b8895a0acb8c5d1deebe8dbcec2b5a89b8f827568554b4135291d11040004111d2935414c566773808d9aabb5c0bfbfbfbfbfbfbfb3a79a8d8074675a4d413c4956636f7c8999a3aebbbfbfbfbfbfbfbfbfbfbfbfb8ab9e928578695f53473a414c566976828f9ca9b6bfbfbfbfbfbfbdb2a8988b7e7165584b3e31261a0e02000009151f2a333c45525d686f7c87929fa6b0bbbfbfbfbfbfbfbfbfb4aaa0958d80736b60564c535e6973808c96a1adb9bfbfbfbfbfbfbfbeb3a99e948b7e71695e52463e33291f14090000000b1825313e4b5864717e8b97a4b1bec0c1c5cbd2dae4eef9fffbf0e6ddd4cdc7c4c3bfbfbfbfb6a99c8f8376695c504336291d100000000915222e3b4754606a7783909da9b3bec9d5e2ebe7dcd1c6bcb0a69f93877e736d6660595653514a504b5153545b60676d74808c939da8b2bdcad4def0eae0d4c8bcb1a79b8e8175685d5245392c1b11060000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42353434343434343434343744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000915202d3946525e6875828f9ca9b3becad6e2e0d3c6baaea29892939aa4afbbc8d4e4e2d6cabeb3aa9c8f8275685e5246392d2013020000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c4a463f372d23180d01000f1b2835424e5b6875818e9ba8b4c1cedbe7f4f1e5d8cbbeb2a5988b7f72685f58514b54616e7a7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c6f6256493c2f2316090000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000c18232f3845515c66717e8b96a0acb9c3cedde6ece0d4c8bcb1a79c8f82756a5f64717e8a96a0acb9c5cfdbe6e5dacfc4b9ada1978c7f72685d52453a3025190d020000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000c18242f39434f59606c77818e949ea5afb5bdc3c9cfd4d9dad5d2d1cecdcdced1d2d5dadedad5d1cbc5bfbab0a8a09792857b6e675d51453e31271d1207000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c262f3844505b666e7b86929fa7b1bcc6d1dde6f3fcf9f9f6eaddd0c3b7aa9d9084776a5d5144372a1e1100000915222f3c4855626f7b8897a2adbac6d3dfece3d7cbbfb5ab9c8f82766b6058514b4d4a50565e6973808d99a7b1bcc8d4e0ede2d6cabeb3a9998c7f7266594c3f2f24180d01000713202c3945525d687783909daab2b2b2b2b2b2b2b2b2b1a5988b7e7265584b3f3a4753606d7a86929facb2b2b2b2b2b2b2b2b2b2b2b2b2a89b8f827568574d4237414d5a6774808d9aa7b2b2b2b2b2b2b2b2b2a89b8e817568574d42372b1e120600020e1a26313c45505a606d7a849199a3afb2b2b2b2b2b2b2b2b2b2aea2989083796d60594f444d57606d7984919ea7b1b2b2b2b2b2b2b2b2b2b0a69f92857b6e615a50453b30251a0e0200000b1825313e4b5864717e8b97a4b1b2b3b5b9c0c8d2dce7f2fef5e9ded4cbc2bcb7b6b2b2b2b2b2a99c8f8376695c504336291d1000000006131f2b37434e5865727e8b97a1adb9c4d0d9e4ede2d8cfc2bbafa49993888078706b6662605c545d555c6063666c7179818c929ca5afbac3cedce5ede2d8cec6b8ab9f95897c6f63564c4135291d0a000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423529272727272727272a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000005111d2a36414c5664717e8a97a2adbac6d3dfe2d6cabfb4aaa29f9fa4acb6c0ccd8e4dfd3c6baaea2988a7e7164564c41362a1e11050000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c585651493f34291e1206000f1b2835424e5b6875818e9ba8b4c1cedbe7f4eee2d5c8bbafa295887c6f62564e454b5565727f8989898989898989898989898989898989898376695d5043362a1d100300131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000004101c2934404b55606d7984919ea8b2bdcbd5dfefeaddd1c4b8ab9f95897c706358606d7884919ea9b3becad6e2ebe0d5c9beb3a99f92857a6d60564c4135291e14080000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000004101d2935404b55606b73808d939ea6afbbc0c7cfd5dadad5cfc9c6c5c1c0c0c1c4c5c9cfd5dae1dcd7d0cac2bab2a9a19791847a6d605a5043392f23180c000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423529222d38424d57606c78839098a3aeb9c2cfd8e2eff8fffffff6eaddd0c3b7aa9d9084776a5d5144372a1e1100000613202d394653606c7985929fabb8c5d1dce7e7dcd1c6b7ab9f94897d706a605d555a545c60686e7b86929fabb8c3ced9e5ecdfd3c6baada297897c6f6356493c3023160700000714212d3a4754606d7a86939fa6a6a6a6a6a6a6a6a6a6a6a996897c6f6356493c3845515d677783909da6a6a6a6a6a6a6a6a6a6a6a6a6a6aa988c7f7265594c3f313f4b5865727e8b98a5a6a6a6a6a6a6a6a6a6a69e918478695f53473a2e2114080006121e2b37424d57626c75818e96a1aba6a6a6a6a6a6a6a6a6a6a6a59f92867c6e665c51473d45515d67717e8a959faca6a6a6a6a6a6a6a6a6a6a6a2978f82756c62574d42362a1e110500000b1825313e4b5864717e8b97a4a6a6a7a9aeb6c0cbd6e1edf9f0e4d8cdc2b9b1aba9a6a6a6a6a6a69c8f8376695c504336291d10000000030f1b27323c4753606d7985929ea8b2bec7d2dde8eae1d7ccc0b5aba49a938c837d77726f6d666a6a6a676d6f73787e848e939ca4aeb7c0ccd5dfeee7dbd0c6bcb0a69d9083766b6054443a2f24190d000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b1b1b1b1b1e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000000010d1925303a4753606d7985929fabb8c4cedae5dbd0c6bcb4aeacacafb6bec7d2dde8ded2c5b8ab9f9285796d6053473a3025190d010000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568686868686868686868686868686868686868686865625b51463a2e221609000e1b2734414e5a6774818d9aa7b4c0cddae7f8eee1d5c8bbaea295887b6f62544b4d525d6774818e969696969696969696969696969696968f8275685c4f4235291c0f0200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000010c161f2c3845515c67727f8b96a1acbac3cedde7ede1d5c9bdb2a89d9083776b60545c66727f8b97a2adb9c6d0dce7e6dacfc5baada2978c8073685e52463b3025190e0300000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000006131f2c3845515d67707d88939fa5afb8c1cbd1d9dfd6cfc9c5beb9b8b5b3b3b5b7b9bdc4c9cfd6dfe2dbd6ccc4bbb3a9a0968e81756c61554b4034291c11060000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42352928333f4a545f69727f8c959faab4bfcbd4e1eaf4fffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e11000005121f2b3744505b6575828e9babb5bfcbd7e3ede3d3c7bbb0a69e92857c726d67676667666d717a839098a2aebac6d5dfeaebded2c5b8ab9f9285796d6053463a2d20130700000a1724313d4a5764707d8a999999999999999999999999999997877a6d6054473a35404b556774808d9999999999999999999999999999999998897c6f6256493c303c4956636f7c899699999999999999999999999996887b6e6255483b2f221508000814212e3a47535f69717e8b93999999999999999999999999999999938b7e726a5f544b4035404b55606c7883909a9999999999999999999999999999948b7e71695e52463a2d20140700000b1825313e4b5864717e8b979999999a9da4aeb9c5d1ddeaf6ece0d3c7bcb1a79f9d999999999999998f8376695c504336291d10000000000a151f2c3845515c67727f8b96a0acb6c0ccd8e0e9e8ddd2c7bdb5aca49f959089837f7c797877767778797c80848a91969ea5aeb6bfc9d2dee7e8dfd6cabfb4aa9f948a7d7063594f4432281e1308000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0e0e0e111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000008131f2c3845515c6774818e9aa8b2bdc9d5e1e2d8cec6bfbab8b9bbc0c7d0d9e4e1d5c9bdb2a89a8e8174675d514538291e1308000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275757575757575757575757575757575757575757575726d62564a3e3124180b000d1a2633404d596673808c99a6b3bfd0dbe7f2f0e4d7cabdb1a4978a7e71665d55575e616d7985929ea3a3a3a3a3a3a3a3a3a3a3a3a3a39a8d8073675a4d4034271a0d0100131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000008131e2935404b55606d7984919ea8b2bdccd5e0efebded2c5b9aca0968a7e7164594f54606d7985929eaab4bfcbd6e4ece1d6cabeb3a99f92857a6d61564c41362a1f140900000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000005111d2935414c56606d7984919aa4afb7c1cad7dcded5cdc5beb9b3adaba8a6a6a8abadb2b9bec4cdd5d8d8d8d6cdc5bbb2a89e938a7e71675c5145382d22170b0000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235262f3844505b666e7b86929fa7b1bcc6d0dde6f3fcfffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e110000030f1b27333f495364717e8b99a3aebbc7d3e0ebe3d8ccc2b9ada19792867f797674737475797d849095a0aab4becad6e7eee2d6cabeb3a99b8e8175665c5144382c1f120600000e1a2734414d5a6774808c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8478685d5245392f3e4b5764717e8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c86796d6053463a2e3a4754616d7a878c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7265584b3f3225180c000815222f3b4855626e7b858c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c81756d62574e42392f3944505b656f7c888c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c857b6e6154473b2e21140800000b1825313e4b5864717e8b8c8c8c8c8d929da9b5c1cedbe7f4eaddd1c4b7ab9f95908c8c8c8c8c8c8c8c8276695c504336291d100000000004101c2934404b55606d7984919aa4afbbc3ced7e1eae3d9d0c7beb6afa7a09d95908c8986848383848586898c91969ea1a8afb7bfc8d1dbe4e9e0d6cdc4baaea2988f82766b6155473d3220160c01000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020104111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000004101c2934404b55636f7c8996a1acb9c5d2deeae0d8d0cac6c5c6c8ccd2d9e2ebdfd2c5b9ada196897c7063554b403529170d02000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebded1c4b8ab9e9185828282828282828282828282828282828282828282827f7265584c3f3225190c000b1825323e4b5865717e8b98aab4becad6e2eef6e9dccfc3b6a99c9083786d676667696e75818e97a1adb0b0b0b0b0b0b0b0b0b0b0b1a7978a7e7164574b3e3124180b0000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000010d19242f3945515d67727f8c96a1adbac4cedee7eee2d6cabeb3a99e9184786d605346515d6773808c98a3aebac7d2dde8e6dbcfc5baaea2988d8073685e52463b30251a0e03000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000713202d3946525d6873808d96a0acb6c0c9d3dce1d5ccc3bbb3ada9a19e9b9a9a9b9ea1a8adb3bbc4cccbcbcbcbcbcdc4baafa59e9184796d60544a3f33281c0f0300000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42352d38414d57606c78829098a2aeb9c2ced8e2eff8fffffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e110000000b17222d3a4754616d7a86929facb9c3ced9e5e9ded5c9beb3a9a198928b868281808082858a9196a0a7b1bcc5d0dbe7ecdfd2c6b9ada2978a7e7164544a4034281c100400000b1825313e4b5864717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164564c41352e3a4754616d7a7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e71665c5145382d3946525d68727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d7063574a3d3024170a000a1724313d4a5764707e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d615b51453c3027333f4953606a717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d706356493d3023160a00000915222f3c4855626f7c7f7f7f7f7f808d9aa7b3c0cddae6f3e9dcd0c3b6a99d90827f7f7f7f7f7f7f7f7e7164574b3e3124180b00000000000c18232f3945515c66707d88939fa8b2bcc5cfd8e3ebe2d9d0c7c0bbb1aca7a09d9999929190909091939a999ea0a8acb2bac1c9d1dae3eae1d7cec4bbb0a69f92867b6e61594f44352b210d0400000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000000000c18232f394653606c7884919eabb7c2cdd8e4eae2dbd6d3d2d2d4d8dde4ebeaded1c4b7ab9e9184786c605346392f24180c00000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebdfd2c6b9ada197918f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8e8174685b4e4135281b0e000915222f3c4855626f7b8898a2aebac6d3dfeaf5eaddd0c4b7ab9f948e8179757374767b818e939da9b3bebcbcbcbcbcbcbcbcbcb8aca095877b6e6154483b2e2115080000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000004111d2935414c56606d7985929ea9b2bdccd6e0f0ecdfd2c6b9ada1978b7f72665c50444b55616e7a86929facb6c0ccd8e4ece1d6cabeb4aa9f92867a6e61574d42362a1f1409000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000004101c2834404b55616d7a86929fa8b2bec7d2dbe2d8cfc3bab2a9a19e97928e8d8d8e91969ea1a9b2babfbfbfbfbfbfbfbfbfb9aca1968c7f72665b5044382b1f120600000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235333f49535f69727f8b949faab4bfcbd4e0eaf4fffffffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e110000000613202d3946525e6875828f9ba8b2bdc8d4e0eae6dacfc5bbb3aaa29f98928f8d8d8d8f92979ea1a8b1b9c3ced7e2ece3d7ccc0b5ab9e9285796d6053473a2e23180c0000000a1724303d4956616c7173737373737373737373737373737373716c6256443a302d3946525e686d737373737373737373737373737373737373716c62544b40342935414c56636d72737373737373737373737373737373706b6155483c2f231609000a1623303c4955616c70737373737373737373737373737373737373736d685e52483f332a222d38414e58626c71737373737373737373737373737373737373706b6054483c2f22160900000815212e3a47535f6a6f73737373737c8895a2aebbc8d5e1eee6dacdc0b3a79a8d807473737373737373716c6155493d3024170a000000000007121d2834404b54606b74808d96a0aab4bdc6d1d9e2e9e2d9d2ccc3bcb8b1acaaaba39f9e9d9d9d9e9fa4acaaacb2b9bdc4ccd2dbe3e9e1d8cfc6bcb3a99f948b7f72695f53473e3323190f0000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000000000007121f2b3744505b6573808c99a7b1bcc8d4e3edede7e2e0dfdfe0e4e8eeece0d4c8bcb1a7998d8073655b5044372b1d120700000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeee1d5c9beb3a9a19e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8e8174685b4e4135281b0e000613202d394653606c7985929fabb8c3cdd9e4efece0d3c7bcb0a69d938e8581808183868e939da5afbbc5cfc9c9c9c9c9c9cbbfb5ab9d908477695e53463a2d2114070000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000020d17202c3945525d68737f8c97a1adbbc4cfdee8efe3d6cbbfb4aa9e9285796d60544a3f46525e6874818e9aa4afbbc8d4e0e9e7dbd0c5baaea2988d8074695e52463b31261a0e030000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000006131f2c3845515c67737f8c98a2aebac3d0d9e4dcd1c6bdb2a8a097928b8582808082848a9197a0a8b2b2b2b2b2b2b2b2b2b2b2b2a89e9184786c605346392d22170b00000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f422f3844505b656e7b86929fa6b0bcc6d0dde6f2fcfffffffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e1100000005111d2935414c5663707d8996a0acb9c3ced9e5ece1d6cdc5bcb4aeaaa29f9c9a999a9c9ea1a9acb2bac3cbd5e0e9e8ded4c7bbafa4998d8074675c5145382c1c12070000000815212d3945505a61646666666666666666666666666666666664625a504532282a36414c565e6166666666666666666666666666666666666665625a5042392e24303a44515b63656666666666666666666666666666666361594f44382c201407000814202d3944505a616466666666666666666666666666666666666666615e564c41362d211b262f3d46505a62646666666666666666666666666666666666666360594f44382c201307000006121f2b37434e585f62666666666f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d80746766666666666664615a5045392d2115080000000000010c18232e39424f59606d79849198a2abb5bfc7d0d7e0e8e4ddd8cdc8c3bcb8b7b5afacabaaa9aaabacafb6b7b9bdc4c9ced6dee4e8dfd7cfc6bdb4aaa1979082776c60574d42352c2111070000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000000030f1b27333f4953626e7b88959fabb8c6d1dce7f3f3efecebecedf0f4f9eaddd1c4b8ab9f95887b6e6253493f33271b0b0100000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf1e6dacfc4bbb3adaba8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a79b8e8174685b4e4135281b0e0006121f2b3844505b6674818e9ba7b1bcc8d4dde7f1e4d8cdc2b8afa59d97928e8d8d9092999ea5afb7c0cdd6d6d6d6d6d6d3c7bbaea3998c7f7366574d42362a1e12050000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000008141e2935414c56606d7a85929fa9b3becdd6e0f0ece0d3c7baaea3988c8073675d514238414c56626e7b87939facb9c2cdd8e4ece2d6cabfb4aa9f92867b6e61574d42362a2015090000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000713202d3a4653606d7985929eaab4bfccd5e2e3d7cbbfb4aba09691857e7975737375797e859196a0aba5a5a5a5a5a5a5a5a5a5a5a5a1968a7d7063544a3f33281c0f03000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4238414d57606c77828f98a2aeb8c2ced8e2eff8fffffffffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e11000000010d1925303a4653606c7884919ea8b2bdc8d4dee8e8dfd6cec5bfbab4aeaca9a7a6a7a8abadb3b9bdc4ccd5dde6eae1d7cbc0b5ab9f93877b6e62554b4034291c0b0000000005111d28343e4850565859595959595959595959595959595959585650483e342025303a444c5254595959595959595959595959595959595959585650483f30271e28323f4951575959595959595959595959595959595957554f473e33281c10040004101c28333e475055575959595959595959595959595959595959595954524c443a30241b141d2b343e4850565859595959595959595959595959595959595956544f473d33271c10040000030f1b26313c464e5355595959626f7b8895a2aebbc8d5e1eee6dacdc0b3a79a8d8074675a5959595959575550483e34281d110500000000000007121d27303d45515d676f7c869299a3aeb5bdc5ced6dee5e8dfd9d4cec8c5c3c0bbb9b7b6b6b7b8b9bbc0c4c5c9ced5dae0e8e4ddd8cdc5bdb4aba29891857b6e655b50453c31231a10000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000000000b17222d3847535f697683909dabb5bfcbd7e3effbfbf9f8f9fafcfcefe3d7cbc0b5ab9d9083776a5f5341382d22170b0000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf7ebe1d6cdc4beb9b8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4a79b8e8174685b4e4135281b0e00030f1c28333f4a5463707c8995a0acb8c1cbd5dfe7e9ded4cbc1b7afa9a29e9b999a9c9fa3abafb7c0c9d2dfe8e3e7dbd6cabeb3a99f92867a6e6154473b31251a0e020000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000020e1925303946525e6873808c97a2adbbc5cfdfe8f0e3d7ccc0b5ab9f92867a6d61554b40303b47535f6975828f9ba7b1bcc7d4e0ebe7dbd0c6baaea3988e8174695f53463c31261a0f0400000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000030f1b27333f495363707d8a97a1adbcc6d0dee7e0d3c7baaea39991847b716d666767666d717b8491999898989898989898989898989898988e8175665b5044382b1f1206000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423f49535f69727f8b949faab4bfcad4e0eaf4fffffffffffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e110000000008131f2b3844505b66717e8b96a0acb8c1ccd6e0eae8e0d7d0cac6bfbab8b5b4b3b3b5b8b9bec5c9ced6dee6ede3d8cfc6bbafa3998e8175695f5343392f23180c00000000000c17222d363e45494b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b49453e362d221e29323a4146474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a453f362d1e16202d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a48443e352c21160b0000000b17222c353e44494a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4746413a32281e120b19222d363e45494b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4948443d352b21160b000000000a15202a343c4347484c4c55626f7b8895a2aebbc8d5e1e9e6dacdc0b3a79a8d8074675a4d4c4c4c4c4b49453e362c22170c00000000000000000b151e2935404b555f6a707d87929fa4abb4bcc4ccd5dae0e7e4dfd9d4d1d1cbc7c5c4c3c3c3c4c6c8ccd2d2d5d9e0e5e6e2d9d2ccc3bbb3aba39992867c6f695e53493f332a1f1108000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000000000006111b2b37424d5765727f8b99a3aebbc7d3e0ecf7f2f2f2f2f2f2f2ede0d3c7bbafa3998b7f7265584e432f261b11060000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2f2e8dfd6cfc9c6c4c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c1b4a79b8e8174685b4e4135281b0e00000b17222d384854606b7783909da5afb9c3ccd5dee6e6ddd2c9c1bbb3adaba8a6a7a9acafb5bdc1c9d2dbe4eae2dcd7c9c1baada2978d8174685e524639291f1409000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000005111e2a36414c56616d7a85929fa9b3becdd6e1f1ede0d4c7bbafa4998e8174685e5243392f37424d57636f7c89959fabb8c4ced9e5ede2d7cbbfb4aa9f92877b6e61584e43372b20150a00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000005121f2b3744505b6574818d9aa9b3beced7e2ecdfd2c5b9ac9f92867c6f69605c54545c60696f7c878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c85796c605346392d201306000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4244505b656e7b86929fa6b0bcc6d0dce6f2f8f8f9fbfefffffffff6eaddd0c3b7aa9d9084776a5d5144372a1e1100000000030f1c28333f4a54606d7884919da5afbac4ced8e1eae9e2dbd6d0cac7c5c2c0c0c0c2c5c6c9cfd5dae0e8ece6dcd1c6bdb2a89f92877b6e61574d4231271d1207000000000006101b242d34393d3e404040404040404040404040404040403e3d39342d241b1720293036393a4040404040404040404040404040404040403e3d3a342d241b0e1c252d353a3e3f4040404040404040404040404040403d3c38332c231a100500000005101a232c33393c3d404040404040404040404040404040404040403a3935302820160c07101b242d34393d3e4040404040404040404040404040404040403d3c38332b23190f0500000000040e18222a31373a3c404855626f7b8895a2aebbc8d5dcdcdcdacdc0b3a79a8d8074675a4d414040403e3d39342c241a10060000000000000000030c18242f39434e58606b717e8b9399a2aab2bac1c9ced6dbe2e6e4e0dedcd7d4d2d1d0d0d0d1d2d4d8dddee1e5e5e1dbd6d0c7c0bbb2a9a29992877d706a60574d41382d21180e00000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5dbcec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0dde5e5ddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000000000000000e1a26313c4754616d7a86929facb9c5cfdbe6e5e5e5e5e5e5e5e5e5dfd2c5b9ac9f92867a6d6154473c3121140a000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e8e1dad5d2d1cececececececececececececececececec1b4a79b8e8174685b4e4135281b0e000006111c2c38444f59636f7c89939da7b1bac3ccd6dbe1e7dbd2cdc5beb9b8b4b3b4b6b9bbc0c7cfd3dbe4e4e1d8d1cbc0b7afa59f92857a6d61564c41362a170d03000000131f2c3946525f6c7985929facb8c5d2dfe5e5dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000030e18212d3946525e6873808d98a2aebbc5cfdfe8e5e5dfd2c6b9ac9f93877b6e62564c413127313c4854606b7683909da8b2bdc9d5e1e5e7dcd1c6bbafa3998e81746a5f53473c32261b0f04000000131f2c3946525f6c7985929facb8c5d2dfe5e5dbcec2b5a89b8f8275685c4f4235291c0f000000000000000613202d394653606c7885919eabb8c4cfdee9e2d6cabeb3a99a8e81746a5f57504a4a5057606a717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d6054473a2d211406000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f424d57606c77828f98a2aeb8c2ced8e2efedecebeceef2f7fefffff6eaddd0c3b7aa9d9084776a5d5144372a1e1100000000000b17222d3844505c66707d89939ea8b2bcc6cfd8e0e8ece7e2dbd6d3d2cfcdcccdcfd1d2d5dae1e5ebe9e1dbd6cbbfb5aba0968d8073695f53453c311f150b0100000000000009121b22282d30313333333333333333333333333333333331302d29221b120e171e252a2d2e33333333333333333333333333333333333332312e29221b120a131c232a2e3132333333333333333333333333333333302f2c28211a1108000000000008111a22282d3031333333333333333333333333333333333333332e2d29251e160e040009121b22292d3031333333333333333333333333333333333333302f2c272119110700000000000006101820262b2e2f3c4855626f7b8895a2aebbc8cfcfcfcfcfcdc0b3a79a8d8074675a4d4134333331302d28221a12090000000000000000000007121d27313c464f59616c727f879298a1a8afb9bdc4cad0d5dae0e2e7e8e3e0dfdedddcdddedfe0e4e8e7e2dfdad5d0cac3beb6afa8a09792877e716b61584e453b2f261b0f0600000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8cec2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3d0d8d8d8d8d0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000000000000000915202d3946525e6875828f9ba9b3becad6d8d8d8d8d8d8d8d8d8d8d6cabeb4aa9c8f8275685e5246392d201302000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8cec1b4a79b8e8174685b4e4135281b0e000000101b27323d4854606b74818e95a0a8b1bac2cad0d6dbe0dfd7cfcac6c5c1c0c0c3c5c7cbd1d9e1e2dfd9d4cfc6bfbaafa59d928a7e71685e52443b3025190500000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8cec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000009141f2a36424d57616e7a86929faab4becdd7d8d8d8d8d3c7bcb1a79b8f8275695f53443a301f2c38444f5964717d8a96a0acb9c5cfdad8d8d8d7cbc0b5ab9f92877b6e62584e43372b20150a000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8cec2b5a89b8f8275685c4f4235291c0f000000000000000815222e3b4855616e7b8897a1adb9c6d2dfebdfd2c6b9ada297897c6f625857575757575758616c717272727272727272727272727272727272726d685d5245382d22170b000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f46535e69727f8b949faab4bfcad4e0e8e3e0dfdedfe2e6ecf3fbfff6eaddd0c3b7aa9d9084776a5d5144372a1e11000000000006111c28343f4a54606b75818e96a1aab4bdc6ced7dde3e8ede7e2e0dfdcdad9dadbdedfe2e6eceae4e0d7d0cabfbbaea3999184796d60574d42332a200d0300000000000000000910171d212425262626262626262626262626262626262524211d171109050d13191e20212626262626262626262626262626262626262524211d181109010a11181e2225262626262626262626262626262626262423201c161008000000000000000810171c2023242626262626262626262626262626262626262621201d19130c040000000911171d2124252626262626262626262626262626262626262322201c160f070000000000000000060e151b1f222f3c4855626f7b8895a2aebbc2c2c2c2c2c2c2c0b3a79a8d8074675a4d413427262424211d1710090000000000000000000000010b151f2a343d47505a626d727d8691969ea5acb2babec5c9cfd3d6dbdedfe2e6e4e4e5e4e4e6e2dfdedbd6d3cfc9c5bebab2aca49f9691857d716c61594f463c33291d140a0000000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbc2b5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7c3cbcbcbcbcbcbc3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000000000005111d2935414c5664717d8a97a2adbac6cbcbcbcbcbcbcbcbcbcbcbcbc6baaea2988a7e7164564c41362a1e1105000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc1b4a79b8e8174685b4e4135281b0e0000000b16212c38434f59606d79839096a0a8b0babec5cad0d4d8dddbd6d2d1cecccdcfd2d3d7dcdedbd6d3cec8c2bcb4aea59d938e81746c61564c4132291e140800000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbc2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000020e1a26313a46525e6974808d98a2aebcc5d0cbcbcbcbcbcbc4b7ab9f95897c6f63574d4232291e27323d4653606c7884919ea9b3bec9cbcbcbcbcbd1c7bbafa3998e81756a5f53473d32271b0f040000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbc2b5a89b8f8275685c4f4235291c0f000000000000000a1724313d4a5764707d8a97a9b2bec9d5e1ebded1c5b8ab9e9285796c64646464646464646464646465656565656565656565656565656565656564605b544a3f33281c0f030000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f505a616e7b86929fa6b0bcc6d0dce3dcd7d4d2d2d3d6dbe1e9f2fbf6eaddd0c3b7aa9d9084776a5d5144372a1e110000000000000b17232e38424f59616d7a849198a2abb4bcc3ccd2d8dde4e5e9eaebe8e7e6e6e8ebebe9e6e2dfd9d4cec5bebaada49f92877d6f675d51453c3121180e00000000000000000000060c1115171819191919191919191919191919191919181715110c06000002080d111314191919191919191919191919191919191919181715110c06000000070d12161819191919191919191919191919191919171614100b05000000000000000000050b10141617191919191919191919191919191919191919191413110d08020000000000060c11151718191919191919191919191919191919191919161613100b0500000000000000000000040a0f15222f3c4855626f7b8895a2aeb6b6b6b6b6b6b6b6b6b3a79a8d8074675a4d4134271a181715110c0600000000000000000000000000030d18222c353e48515b626b707c848e939ea1a8aeb4b9bec4c7cad0d2d3d6dbd7d8d8d8d7dad6d2d1d0cac6c4bdb9b3ada8a09a938e847b6f6b615a50473e342b21170b020000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfb5a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab7bfbfbfbfbfbfbfbfb7aa9d9084776a5d5144372a1e11000000000000000000000000000000000000000000010d1925303a4653606d7985929fabb8bfbfbfbfbfbfbfbfbfbfbfbfbfbfb8ab9f9285796d6053473a3025190d01000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb4a79b8e8174685b4e4135281b0e000000040f1b27323d45515d676e7b8491959ea6aeb3babec5c8ccd2d2d3d7dcd7d8d8d7d7dad5d2d1d0cac6c3bcb8b1aaa39f938e81786d605a50443a3020170d0200000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfb5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000005121e2a36424d57616e7b86929faab4bfbfbfbfbfbfbfbfbfbdb2a89d9083766b6054453c3120171f2b3844505b66727e8b97a1adb9bfbfbfbfbfbfbfbfc0b5ab9f93877c6f62584e43372b21160b0000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfb5a89b8f8275685c4f4235291c0f000000000000000c1926333f4c5966727f8c99a5b2bfcfdae6e9dccfc3b6a99c90837670707070707070707070707070707070707070707070707070707070707070706c665b5044382b1f12060000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4d57626c76828f98a2aeb8c2ced7e1d9d1cbc7c5c5c6cad0d7e0e9f3f6eaddd0c3b7aa9d9084776a5d5144372a1e1100000000000006111c26303d46525e686f7c869299a2aab2bbc0c7ccd2d5d9dcdedfe0e3e8e6e1dfdedcdbd6d2cdc8c2bcb3aea39c928b7f726b60554b40332a1f0f0600000000000000000000000005080a0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a0805000000000000010507070d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0b09050100000000000106090c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a0907040000000000000000000000000004080a0a0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0707050100000000000000000005080a0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a09070400000000000000000000000000000915222f3c4855626f7b8895a2a9a9a9a9a9a9a9a9a9a9a9a79a8d8074675a4d4134271a0e0a08050000000000000000000000000000000007101a232d363f495159616a6f7a818991969fa2aaadb3b8babfc2c5c6cacfcacbcbcbcacfcac6c5c2bfbab8b2ada9a29f969188817a6e69605950483e352c22190f05000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2a89b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909daab2b2b2b2b2b2b2b2b2b2aa9d9084776a5d5144372a1e110000000000000000000000000000000000000000000008131f2c3845515c6774818e9aa8b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a89b8e8174675d514538291e130800000000000000000000000000000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a79b8e8174685b4e4135281b0e000000000a16212935404b555e696e7b838f949fa2aaaeb4b9bbc0c4c5c7cbd1cacbcbcbcacfc9c6c5c2bfbab8b1aca79f98928c81786d665c50483e32291e0e050000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000714212d3a46535f6974818e98a3aeb2b2b2b2b2b2b2b2b2b2b2aca0968a7d7064594f43332a1f0f1c28333f4a54606d7985929eaab4b2b2b2b2b2b2b2b2b2b2afa49a8f82756a6054473d32271b0f0300131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2a89b8f8275685c4f4235291c0f000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7e9dccfc3b6a99c90827d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d796c605346392d2013060000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c525e69717e8b949faab4bfcad4e0d9cfc7c0bbb9b8babec5ced7e1ecf7eaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000a141e2935414c565f6a707e879298a0a8afb5bbc0c7c9cecfd1d2d4d7dddad5d2d1d0cfcac6c3bcb8b0aaa29f918c80736d62594f43392f21180e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b88959c9c9c9c9c9c9c9c9c9c9c9c9c9a8d8074675a4d4134271a0e010000000000000000000000000000000000000008111b242d373f474f585f686d757d848c92989ea1a9acaeb4b6b8babebdbebebebebebdbeb9b8b6b4aeaca8a19e97928c847d746d675f574f473e362c231a100700000000000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a59b8f8275685c4f4235291c0f020004111e2a3744515d6a7784909da5a5a5a5a5a5a5a5a5a5a5a59d9084776a5d5144372a1e110000000000000000000000000000000000000000000004101c2834404b55636f7c8996a0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a196897d7063554b403529170d0200000000000000000000000000000000000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59b8e8174685b4e4135281b0e00000000040c18242f39434d575e696e7a828b92989fa2aaacafb6b7b9bbbfbdbebebebebdbdbeb9b8b6b4aeaca7a09d9590867f746d665c544a3f362c20170c000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a59b8f8275685c4f4235291c0f02000000000000000000000000000000000000000006121f2b37434e58616e7b87929faaa5a5a5a5a5a5a5a5a5a5a5a5a99e9184786c6053463d3220180b17222d3845515d6773808c98a2a5a5a5a5a5a5a5a5a5a5a5a5ac9e94897c6f62594f44382c20130700131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a59b8f8275685c4f4235291c0f000000000000000f1c2936424f5c6975828f9ca8b5c2cfdbe8eaddd0c4b7ab9f94908a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a877a6e6154473b2e2114080000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5a616e7b85929fa6b0bcc5d0dcdcd1c7bdb5afacabaeb3bcc5d0dbe6f2eaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000020c1925303a444e58616c707d8691969fa4abafb6b9bdc1c2c4c6c7ccd2cfc9c6c5c3c1beb9b8b1aba69f98928a7f736e635b51473d31271d0f06000000000000000000000000000000000000000000000003060809131313131313131313131313131313130908060300000000000001040607131313131313131313131313131313130c0b0906010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607090b0c0d0e0e0e0d0c0c0a080705010000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b888f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8d8074675a4d4134271a0e01000000000000000000000000000000000000000009121b252d353e464e565e616b707980858c91979b9fa2aaa9abadb3b0b1b1b2b1b1b0b3adaba9aaa29f9b96918c857f79706b605d554d453d352c241a11080000000000000000000000131f2c3946525f6c79869298989898989898989898989898988f8275685c4f4235291c0f020004111e2a3744515d6a77849098989898989898989898989898989084776a5d5144372a1e1100000000000000000000000000000000000000000000000c18232e394854606b7784919898989898989898989898989898989898989184786c605346392f24180c0000000000000000000000000000000000000000000000131f2c3946525f6c798592989898989898989898989898989898989898989898989898989898989898989898989898988e8174685b4e4135281b0e000000000007121d27313b454d575e686d767e858d92989c9fa4acaaacaeb5b0b1b1b2b1b1b0b3adaba9aaa29f9b95908a837c726d605c544a42382e241a0e05000000000000131f2c3946525f6c79859298989898989898989898989898988f8275685c4f4235291c0f0200000000000000000000000000000000000000000814212e3a47535f6a75818e99989898989898989898989898989898978b7e72665b5044382b1f1206111c2935404b55616d7a8692989898989898989898989898989898988f82766b6054483b2f22150900131f2c3946525f6c79859298989898989898989898989898988f8275685c4f4235291c0f00000000000000101d293643505c6976838f9ca9b6c2cfdce9ece0d3c7bcb0a69f9c9797979797979797979797979797979797979797979797979797979797979795887c6f6255483c2f2215090000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756857626c76828f98a2aeb8c2ced7e2d7cbc0b5aba39f9fa2aab3becad6e2eeeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000008131e28323c46505a616b707c848e93999fa4acacb2b4b6b7b9bbc0bababeb9b8b6b4b3adaba7a09d948f857e736d635c52493f352b1f150b00000000000000000000000000000000000000000000040a0f131516202020202020202020202020202020201515120f0a04000001080d11131420202020202020202020202020202020181815120d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507080d1113141618191a1a1b1b1a1918161414110d0808060200000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b82838383838383838383838383838383827f7265584b3f3225180c0000000000000000000000000000000000000000000009131b232c343c444c525961676d737a7f858a8f9298999c9fa2a9a3a4a5a5a5a4a3a9a19e9c9998928e8a847f7a736d676059514c433c332b231a1208000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275685c4f4235291c0f020004111e2a3744515d6a77838c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c84776a5d5144372a1e11000000000000000000000000000000000000000000000007121d2c38434f596673808c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8073665b5044382b1d12070000000000000000000000000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8174685b4e4135281b0e0000000000010b151f29333b454d565e616c717a80858b90939a9a9d9fa3aba4a4a5a5a4a4a3a9a19e9c9998928e89837e766f6a625b514a423930261c120800000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275685c4f4235291c0f0200000000000000000000000000000000000000000815222f3b4855626e7b868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c85796d60544a3f33281c0f030c18242f3946525e6874808c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c897c6f6356493c3023160900131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275685c4f4235291c0f00000000000000111d2a3744505d6a7783909daab6c3d0dde9f0e4d8cdc2b9b0aba9a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a296897c6f6356493c302316090000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685e69717e8b949faab3becad4e0d9d0c7bbafa399929298a2aebac6d3dfeceaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000020c16202a343e485059616a6f7981878f939a9ea0a8a7a9abacafb5aeadb3adaba9a8a9a29e9a959089827b716c635b524a40372d23190d03000000000000000000000000000000000000000000070e151b1f21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d22211f1b150e06040c13191d20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2524221d181109010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080d111314191d2021232526272728272726252321201e191514120e09040100000000000000000000000000000000000000000000000000000000000714212d3a46535e696e7676767676767676767676767676767676726d62564a3d3124180b000000000000000000000000000000000000000000000109111a222a323a41464f555d60686d73797d8286898d8f929795969798989897969597928f8d8985827d79726d68605d554f45413a312a21191108000000000000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7064574a3d3124170a0000000b1825313e4b5864717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164584b3e3125180b0000000000000000000000000000000000000000000000000f1b27323d4754616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b6e61544a3f33281c0b0100000000000000000000000000000000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d7063564a3d3023170a000000000000030d172129333b444c525a62686d737a7f83878b8e91929996979798989897969597928f8d8985817d77716c625f585144403930271e140a00000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7064574a3d3124170a000000000000000000000000000000000000000000091623303c4956636f7d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d70675c5142382d22170b0007121d2a36414c56616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d7063564a3d3023170a000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d7064574a3d3124170a00000000000000111e2a3744515d6a7784909daab7c3d0ddeaf5e9ded4cbc2bcb7b6b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a396897d7063564a3d3023170a0000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568616e7b85929fa6b0bcc5d0dcddd2c7beb2a89f928685929fabb8c5d2deebeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000040e18222c363e474f5860676d747c82878c9196979a9c9e9fa4a1a1a1a9a19e9d9b9897928d89837d766e69615a514940382e251b110700000000000000000000000000000000000000000007101820262b2e2f393939393939393939393939393939392f2e2b262018100d161e24292c2d3939393939393939393939393939393932312e29231b13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f13191d202124292c2d2f313333343434333332302e2d2a2522211e1a15110d080100000000000000000000000000000000000000000000000000000005121e2a36424d575e61696969696969696969696969696969696965625b51453a2e221509000000000000000000000000000000000000000000000000081018202830363d434b51565e61666d7075797d80838587898a8b8b8b8b8b8a88878582807d7975706d66605d56514b433d352f281f180f0700000000000000000000000000000b1824313e4a56626d7272727272727272727272727272727272706c6155493c3023160a0000000a1724303d4956616c7172727272727272727272727272727272716c6256493d3024170a0000000000000000000000000000000000000000000000000a16202d3a46525e696e72727272727272727272727272727272727272726e695e5342382d22170b0000000000000000000000000000000000000000000000000b1824313e4a56626d72727272727272727272727272727272727272727272727272727272727272727272727272727272706b6155483c2f23160900000000000000050f172129323a414650565e61686d72767b7e81848687898a8b8b8b8b8a8a88878583807d7975706b64615a534e463f342e271e150c0200000000000000000b1824313e4a56626d7272727272727272727272727272727272706c6155493c3023160a0000000000000000000000000000000000000000000915222f3b4854606b6f72727272727272727272727272727272727272706b60554b402f261c110600010d1925303a46535e696e72727272727272727272727272727272727272706b6055483c2f231609000b1824313e4a56626d7272727272727272727272727272727272706c6155493c3023160a00000000000000101d2a3743505d6a7683909da9b6c3d0dce9f6eadfd5ccc3bdb8b7afafafafafafafafafafafafafafafb6b8bcbdbdbdbdbdbdbdbdbdbdbcafa296897c6f6356493c302316090000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686c75828f97a2adb8c2ced7e1d8ccc0b6aca0968d8083909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000007101a232c353d464e555d606a6f757b8084888b8e8f919399949494939792908e8b8885817c77706b615e57504840372e261c1209000000000000000000000000000000000000000000040e18222a32373b3c464646464646464646464646464646463c3a37312a2218161f282f35393a464646464646464646464646464646463f3d3a342d251b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000060b11171b1f24292d2e2f35393a3c3e3f40414141403f3f3d3b3936302e2d2b26201d19130e080200000000000000000000000000000000000000000000000000020e1a25313b454d53545c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c585651493f34291d120500000000000000000000000000000000000000000000000000060e161e252a313a40454c52545c6064676d707376787a7c7d7e7e7f7e7e7d7c7a787673706d6764605c54524c4540393129241e160d060000000000000000000000000000000916222e3a46515b62656565656565656565656565656565656564615a5044392d2014080000000815212d3945505a61646565656565656565656565656565656564625a5045392d21150800000000000000000000000000000000000000000000000005111e2a36424d575e616565656565656565656565656565656565656565615e574d422f261c11060000000000000000000000000000000000000000000000000916222e3a46515b62656565656565656565656565656565656565656565656565656565656565656565656565656565656361594f44382c2014070000000000000000050f17202830353f444c52565d6065696e717477797b7c7d7e7e7f7e7e7d7c7a787673706d67636059555047433c3428231c150c030000000000000000000916222e3a46515b62656565656565656565656565656565656564615a5044392d20140800000000000000000000000000000000000000000007131f2c38434f596063656565656565656565656565656565656565656360594f43392f1d140a00000008131e2a36424d575e61656565656565656565656565656565656565656360594f44382c201407000916222e3a46515b62656565656565656565656565656565656564615a5044392d20140800000000000000101c2936434f5c6976828f9ca9b5c2cfdce8f1e5d9cec3bab2acaaa2a2a2a2a2a2a2a2a2a2a2a2a2a2a2aaacb1b9c3cdcacacacacacac8bbafa295887c6f6255493c2f2216090000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568717e8b949ea9b3becad3e0dbd4c8bbafa49a91847984909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000008111a232c343c434b51585f62696e73777b7e818384868687878787868583817f7c79746f6a636159534d453e362e251c140a000000000000000000000000000000000000000000000a15202a343c434749535353535353535353535353535353534847433c342a201e28313a414552535353535353535353535353535353534b4a463f372d23180d010000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b22272b3035393a3e414547494b4c4d4d4e4e4d4c4b494746413f3b3a37312c29241e19140c070000000000000000000000000000000000000000000000000009141f29333b42464850505050505050505050505050505050504b4a453f372d23180c010000000000000000000000000000000000000000000000000000050c13191f282f353a41464b5153555c60636669686d6f707172727271706f6d68696663605c5553514a45413a352f271f19130c040000000000000000000000000000000006121e29343f4951565859595959595959595959595959595959575550473e33281c100400000005111d28343e4850565859595959595959595959595959595959585650483e34291d1105000000000000000000000000000000000000000000000000020e1a25303b454d5254595959595959595959595959595959595959595954534d453b311d140a0000000000000000000000000000000000000000000000000006121e29343f4951565859595959595959595959595959595959595959595959595959595959595959595959595959595956554f473d33271c1004000000000000000000050e161e2529323a41464c5254575e616467666d6e70717172727171706f6d68696663605d55544f49453e37312a2218120b030000000000000000000006121e29343f4951565859595959595959595959595959595959575550473e33281c1004000000000000000000000000000000000000000000030f1b27323d474f54565959595959595959595959595959595959595956554f473d31271d0b02000000020e1a25313b454d53545959595959595959595959595959595959595956554f473d33271c10040006121e29343f4951565859595959595959595959595959595959575550473e33281c1004000000000000000f1c2935424f5c6875828f9ba8b5c2cedbe8ede1d4c8bdb2a8a09d9696969696969696969696969696969da0a7b1bcc8d4d6d6d6d6d5c9beb3a994887b6e6155483b2e2215080000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756e7b85929fa6b0bcc5d0dcdfd5c9bdb2a89f93887d7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000008111a222b313a40454e53575f6166696e71747678797a7a7b7a7a79787675726f6c66626058554f46423b332c241c130a02000000000000000000000000000000000000000000030f1b26323c464e53556060606060606060606060606060606055534e463c3126242f3a434c515f60606060606060606060606060606060585651493f34291d120600000000000000000000000000000000000000000000000000000000000000000000000000060b141b22272d33373a4146474b4c51545658595a5a5b5a5a59585654524c4c4847423c39352f2a251f18120b030000000000000000000000000000000000000000000000030d17212931363a3b43434343434343434343434343434343433f3d3a342d251b11060000000000000000000000000000000000000000000000000000000002080d161d24293036394045464b5153565a565e61626364656565646362615e565a5653514b46444039352f29241d150d08010000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49443e352c22170b00000000000c17222d363e45494b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b49453e362d22170c000000000000000000000000000000000000000000000000000009141f29333b4246474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4846423b33291f0b0200000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a48443d352c21160b0000000000000000000000040c1319202830363a4145474d535458545c6061636464656565646362615e565a5653514b48443d39332b2620181007000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49443e352c22170b00000000000000000000000000000000000000000000000a16212b353d4348494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a48443d352c1f150b000000000009141f29333b4246484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a48443d352c21160b0000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49443e352c22170b00000000000000000e1b2734414e5a6774818d9aa7b4c0d2dde8ebded1c5b8aca096918989898989898989898989898989899095a0acb8c4d1dee3e3dfd2c6b9ada197877a6d6054473a2d2114070000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827575828f97a2adb8c1ced7e0d6cdc4b9aca1968d80747784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000810191f282f353c43474d5355575f61646769666c6d6e6e6e6d6d666a686562605b54544e48443d363129211a120a010000000000000000000000000000000000000000000006131f2b37434e585f626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c625f584e43372b2935414c555d6b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e2215090000000000000000000000000000000000000000000000000000000000000000000000000710181d262d33383f44464c525457555d606264666667676766666563615e565855534d4745413a363028231d150c060000000000000000000000000000000000000000000000050f171f252a2d2e363636363636363636363636363636363632312e29231b120900000000000000000000000000000000000000000000000000000000000000040c13181e252a2e34383a4045474a4d4c525456575858585858575554524c4d4a4645403a38342e29241e18120b03000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c39332c231a1005000000000006101b242d34393d3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d39342d241b11060000000000000000000000000000000000000000000000000000020d17202930363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b3a36312921170d00000000000000000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c38332c231a100500000000000000000000000002080e161e252a3035393b4246484b4a50535456575858585857575554524c4d4a4745403938332d28221b150e06000000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c39332c231a10050000000000000000000000000000000000000000000000040f19232b32383b3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c38332c231a0d030000000000030d17212931363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c38332c231a0f0500000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c39332c231a100500000000000000000c1825323f4b5865727e8b98acb6c0ccd8e4eaddd0c4b7aa9d91847d7c7c7c7c7c7c7c7c7c7c7c7c7c7d83909daab6c3d0dde9ebded1c5b8ab9e928578685d5245392c2013070000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757e8a939ea9b3becad3e0dacfc4bbafa59e9184796d7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000070d161d242931373b4246484d5355585b545b606061616160605c545b585553504a47433d38332a251f170f080000000000000000000000000000000000000000000000000815212e3b47535f6a7679797979797979797979797979797979766a5f53473a2e2c3945515d677679797979797979797979797979797979726d62564a3d3124180800000000000000000000000000000000000000000000000000000000000000000000030b1218222a2f383f44495053565d616468676d6f717273747474737272706e686965615f5754524c46413b342e271e1810080000000000000000000000000000000000000000000000050d141a1e212129292929292929292929292929292929292524221d18110900000000000000000000000000000000000000000000000000000000000000000001070d13191d23282c2f34383a3d40414647494a4b4b4c4b4b4a49474641403d3a38342e2c28231c19130c07010000000000000000000000000000000000000000000009131b23292e31323232323232323232323232323232323231302d28221a11080000000000000009121b22282d30313232323232323232323232323232323231302d29221b120900000000000000000000000000000000000000000000000000000000050e171f252a2d2e32323232323232323232323232323232323232322e2d2a251f170f050000000000000000000000000000000000000000000000000000000009131b23292e3132323232323232323232323232323232323232323232323232323232323232323232323232323232302f2c27211a1108000000000000000000000000000000050c13191e24292c31363a3b3e3f444648494a4b4b4c4b4b4a49474641403d3a38352f2c27211d170f0a040000000000000000000000000000000009131b23292e31323232323232323232323232323232323231302d28221a11080000000000000000000000000000000000000000000000000007101921272c2f3032323232323232323232323232323232323232302f2c27211a110800000000000000050f171f252a2d2e32323232323232323232323232323232323232302f2c27211a1108000000000009131b23292e31323232323232323232323232323232323231302d28221a1108000000000000000000091623303c4956636f7c899aa4afbbc8d4e0ecdfd2c5b9ac9f92867a6f6f6f6f6f6f6f6f6f6f6f6f6f7784919daab7c4d0ddeae9dccfc2b6a99c8f837669564c4135291d11040000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827a85929ea6b0bbc5cfdcdfd5c9beb2a99d93897d70677784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000040c131820262b31363a3b4246484b4e4a5053535454545453504a4e4c4846443f3837322c27211a140d05000000000000000000000000000000000000000000000000000916222f3c4955626f7c868686868686868686868686868686867c6f6255483c2f2d3a4754606d7a888686868686868686868686868686867f7265584b3f2f24190d010000000000000000000000000000000000000000000000000000000000000000030c151d2328343c414950535b6063686d7174787a7c7e7f80808181807f7e7c7a7875726e6965605d56524d454039302a221a120a010000000000000000000000000000000000000000000003090e1214151d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d181815120c0600000000000000000000000000000000000000000000000000000000000000000000000002080d12181c1f23292c2d303036393a3c3d3e3f3f3f3e3d3c3a393530302d2c28231f1c18120d0801000000000000000000000000000000000000000000000000010911181e222425262626262626262626262626262626262423201c1710080000000000000000000910171d212425262626262626262626262626262626262524211d171109000000000000000000000000000000000000000000000000000000000000050d141a1e2021262626262626262626262626262626262626262621211e1a140d050000000000000000000000000000000000000000000000000000000000010911181e2224252626262626262626262626262626262626262626262626262626262626262626262626262626262323201c161008000000000000000000000000000000000002080d13191d20252a2d2e2e34383a3b3d3e3e3f3f3e3e3d3c3a393630302d2c29241d1c16110c05000000000000000000000000000000000000010911181e222425262626262626262626262626262626262423201c171008000000000000000000000000000000000000000000000000000000070f161b1f2223262626262626262626262626262626262626262323201c160f08000000000000000000050d141a1e2121262626262626262626262626262626262626262323201c160f08000000000000010911181e222425262626262626262626262626262626262423201c171008000000000000000000000714212d3a4754606d7a86939facb9c6d2dfece0d3c7bbaea3998b7e7167636363636363636363636d7a86939facb9c6d2dfece3d6cbbfb4aa9a8d8074675a4d413024190d010000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f81828f97a2adb8c1cdd7e1d7cdc5b9ada1978e81746b6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000001070d151a1f262a2d31363a3b3e413f4446474748474746443f423f3c3938332d2b27201c160e090300000000000000000000000000000000000000000000000000000713202d3a4653606d798592939393939393939393939393938b7e7165584b3e2f2c3945515d67778491939393939393939393939393938e817468564c4135291d110400000000000000000000000000000000000000000000000000000000000000030d151e272e343f464e535b60656c70757a7e818487898b8c8d8d8e8d8d8c8b898785827f7b77726d68615e56514b433c342c241c130a0100000000000000000000000000000000000000000000000205070810101010101010101010101010101010100c0b09050100000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013181c1f2023252a2d2e2f303132323231302f2e2d292523201f1c1812100c070000000000000000000000000000000000000000000000000000000000060d1216181919191919191919191919191919191919171614100b050000000000000000000000060c1115171819191919191919191919191919191919181715110c06000000000000000000000000000000000000000000000000000000000000000002090e11141419191919191919191919191919191919191919191514120e09030000000000000000000000000000000000000000000000000000000000000000060d12161819191919191919191919191919191919191919191919191919191919191919191919191919191919171614100b05000000000000000000000000000000000000000002080d11141a1e212123282b2d2e30313132323231302f2e2d2a2523201f1d1812100b0500000000000000000000000000000000000000000000060d1216181919191919191919191919191919191919171614100b050000000000000000000000000000000000000000000000000000000000040a0f13151619191919191919191919191919191919191919171614100b05000000000000000000000003090e12141519191919191919191919191919191919191919171614100b05000000000000000000060d1216181919191919191919191919191919191919171614100b0500000000000000000000000713202c3945525d687683909da9b6c2cdd8e4e3d7cbbfb5ab9d9184796d605c545656565659606a727f8c99a4afbbc7d4e0ece0d3c7baaea3988a7d7164574a3e31241708000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebded2c5b8ab9f92858f939ea9b3becad3dfdacfc5bbafa59e91847a6d606a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000000030a0f141a1e21262a2d2e312d3338393a3b3b3b3a3a38342e322f2d2b28221c1b16100b050000000000000000000000000000000000000000000000000000000006121f2c3844505c667683909d9f9f9f9f9f9f9f9f9f9f9f9a8e817467554b40352935414c556874818e9b9f9f9f9f9f9f9f9f9f9f9f9d918477685d5245392c201306010101010100000000000000000000000000000000000000000000000000020b151f273039404551585f656c71787d82868a8e9196959799999a9a9a9999989697928f8b88847f7a746e68605c554e463e362e251c13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070c10131417191d202123242525252525242221201d19171313100c070400000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a0a080400000000000000000000000000000005080a0b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a0805000000000000000000000000000000000000000000000000000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0807050200000000000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a0907040000000000000000000000000000000000000000000000000104090e121415171c1f202123242525252524242221201d19171413100c0701000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a0a0804000000000000000000000000000000000000000000000000000000000000000000030709090c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a090704000000000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a0907040000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a0a08040000000000000000000000000004111d2935414c5666727f8c99a7b1bcc7d4dfe7dcd1c6b8aca0968d80746d66615e565c60636b707c86929fabb5c0ccd7e3ebdfd2c5b8ac9f92867a6d6053473a2d201407000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebecdfd3c6baada29792979ea5afbbc5cfdce0d5c9beb3a99e938a7d70685d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000000000003090e12141a1e21222522282b2d2d2e2e2e2d2d2b28232522201f1c17110f0a04000000000000000000000000000000000000000000000000000105080b0b0e101c28343f4a546774808d9aa7acacacacacacacacacaa9d908377675d5145382c2f3f4c5865727f8b98abb4acacacacacacacacac9f93867a6d6054473a2d21140e0e0e0e0e0e0c0c09060100000000000000000000000000000000000000000a141d273139434b515b636a6f787e84898f92999b9ea1a8a4a5a6a7a7a7a6a5a5a9a29e9c9895918b86817b726d675f58504840372e251b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607080d1113141617181819181817161413110d08070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507060b101213151617181819181817161413110d0807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3c4855626f7b88959fabb8c3ced9e5e3d4c8bdb2a89d928d8079716e686a676d70757d859198a2aebdc7d2dde8e2d5c9bdb2a89c8f8275675d5145392c201306000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeee2d6cabeb3a9a29fa2a9afb7c1cdd7e1d7cec5b9ada1978e81756c61566a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000000000000000205090e12141518171c1f202021212121201f1c17191513120f0b06000000000000000000000000000000000000000000000000000000060c111517181b1b17232e3e4b5764717e8a97a9b3beb9b9b9b9b9b9b9ac9f92867a6d6053473a2d2f3c4956626f7c8999a3aebab9b9b9b9b9b9bbafa49a897d706356493d30231b1b1b1b1b1b1b191816120d0700000000000000000000000000000000000006111c262f39434b555c606d727c828b91959c9fa3ababadb2b1b2b3b3b4b4b3b2b1b3adaba8a7a09d98928d867f796f6a615a514940372d241b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707090a0b0c0c0c0b0a09070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a13131313131313131313131313131313130e0d0b07030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607090a0b0c0c0c0b0b0a0907060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607080a0b0b0c0c0b0b0a09070705010000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c090400000000000002050708131313131313131313131313131313131313130e0d0b08030000000000000000000000000002050708080808080808080808080808080808080808080808080808080808080808080808080808080808080808080807070501000000000000000000000002080d101213131313131313131313131313131313130f0e0c09040000000000000000000000000000000815212e3a47535f6a7683909da7b1bcc8d4dfe5d9cec3baaea49d928d847e7a787778797c81889197a1aab4bfd0d9e3e3d9d0c7b9aca0968a7e7164554b4035291d1104000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2e6dbcfc5bbb3adabadb3bbc1c9d3dfdbd0c5bcb0a69e92857a6d615a5d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000000000000000000000000000000002050708060b0f121314141514141312100b0609060603000000000000000000000000000000000000000000000000000000000911171d212425272727272e3b4855616e7b8897a2adb9c6c6c6c6c6c7bbafa399897c6f6356493c302d3a4653606d7986929facb9c5c6c6c6c6ccc0b6ac998c7f7266594c3f3025272727272727272625221e18110a01000000000000000000000000000000040e17222d38424b555d676d747f8790949da0a8acafb5b7b9bdbebfc0c0c1c0c0bfbebeb9b8b5b1acaaa29f98928c847c716c635b51493f362d22180c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b1013161620202020202020202020202020202020201a1a17130e080100000000000000000000000000000000000000000000000000000000000000000000000000000000040607080d111314161718181919181817161413100d0707060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b1915100902000003090e121415202020202020202020202020202020202020201b1a17140e080100000000000000000002080e11141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141413110d08020000000000000000060d14191c1f1f202020202020202020202020202020201c1b19151009020000000000000000000000000006121f2b37434e5864707d8a95a0acb8c1cdd6e0dfd5ccc0b6aea49d95918b8785848486898e939aa1a9b3bcc5d0e2e8ddd2c7bdb2a89e9184786d6053463a2f24180d01000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf7ece1d7cdc5bebab8babec5cdd3dbe0d6cabeb3a99e948a7e71685e525d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000000000000000000000000000000000030606070808080707060300000000000000000000000000000000000000000000000000000000000000000009121b22292d303134343434343a47535f697885929eabb8c5d1d2d2d7cbc0b5ab988c7f7265594c3f30343845515c677783909daab6c3d0d2d2ddd2c2b5a89b8f827568574d4236343434343434343432312e2a231c130a0000000000000000000000000000020c162028333f4a545d676d79818c92999fa6acb1b9bbc0c4c5c9cfcccccdcdcdcccccfcac6c5c2bcb8b4aeaaa29f9691867e736d635b51483e342a1e150b0000000000000000000000000000000000000000000000000000000000000000030606080a0b0c0d0d0d0d0c0b0a0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090b0d0f1112121313131211100e0b08080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b2022232d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726231f19120b0200000000000000000000000000000000000000000000000000000000000000000000000004070c10131316191d20212224252525252524242220201d18161312100c0600000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c09040000000106090b0c13131313131313131313131313130f0e0c090400000002070a0c0d13131313131313131313131313131313130807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c03050d141a1e21212c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726241f1a130b0200000000000000050d14191e2021212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121201d19130c050000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c03000000000000000000000000030f1a26313c4653606c7884919da5afbbc4ced7e1ded2c8c0b6aea8a09d989792919192999b9fa4acb3bbc4ced7e2ddd7ccc0b5aba0968b7e72665c504438281d130700000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f3e9dfd7cfcac6c5c6cacfd7dfe2d7cec6baada2978f82756c61564c5d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b242d34393d3e414141414141424d576976828f9ca9b5c2cfdce8dcd1c1b4a89b8e817568564c41414141404b556774818d9aa7b4c0d0dbe6ded1c4b8ab9e918578695e52464141414141414141413f3e3a352d251c11070000000000000000000000000008131e28323a44505b666d79828e939fa3abb0b8bdc3c7cbd1d2d5dad8d9dadadad9d8dbd6d2d1cec8c6bfbab4aea8a098928a7f736d625a50463c30271d12070000000000000000000000000000000000000000000000000000000406060b0f1213151718191a1a1a191918161414110e0807050200000000000000000000000000000000000000000000000000000000000000000000000000000003060a0f121515181a1c1e1e1f20201f1f1e1c1a181514120f090603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111921272c2f3039393939393939393939393939393939393433302b241d140b01000000000000000000000000000000000000000000000000000000000000000000070c1013181c1f202324292c2d2f30313232323231302f2d2c292423201f1c17110f0a030000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b1915100902070d1216181920202020202020202020202020201c1b18150f0902080e1317191a20202020202020202020202020202020201514120e0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c0f171f252a2d2e393939393939393939393939393939393939393433302b241d140b010000000000050e171e252a2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a251e170e050000000006101a222a30353839393939393939393939393939393939393534312c261e150c020000000000000000000000000a151f2b3744505b65707d89939ea9b3bcc6cfd8e0dad2c8c0bab1acaaa9a19e9d9e9fa3abacafb6bec4cdd6e0ddd5cbc3bbafa4999184796d60544a3f3428160c0100000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fbf1e9e1dbd6d3d2d3d6dbe1e7dbd0c6bcb0a69f92857b6e615a50515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000000000020507081313131313131313131313131313131313130b0a080500000000000000000000000000000000000000000000000000000000000000010c17222d363f45494b4e4e4e4e4e4e4e4e596673808c99a6b3bfcfdae5ddd1c4b7aa9e918477685e524e4e4e4e4e4e5864717e8b97aab3becad6e2dfd2c5b9ada196877b6e61544e4e4e4e4e4e4e4e4e4e4c4a463f372d23180d010000000000000000000000010d1924303a44505a606c78818f949da5afb5bdc2c8ced4d7dcdfe1e5e5e6e6e7e7e6e5e6e2dfded9d4d0cac5bfbab2aaa29f918b7f726c62584e42392e23180c02000000000000000000000000000000000000000000000001070c101314171c1f20222325262627272626252321201e191514120e09030000000000000000000000000000000000000000000000000000000000000000000000060b1012131a1f21222527292a2b2c2c2d2c2c2a29272522211f1a15120f0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19232b32383b3d4646464646464646464646464646464646413f3c362f261d120800000000000000000000000000000000000000000000000000000000000002080d12181c1f23282c2d302f35393a3c3d3e3f3f3f3e3e3d3c3a39352f302d2c28231c1b16100c0600000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c11181e2225252d2d2d2d2d2d2d2d2d2d2d2d2d2d282725201b140c12191f2326272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e1417212931363a3b4646464646464646464646464646464646464641403c362f261d130800000000030d1720293036393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a3936302920170c020000020d18222c343b4144464646464646464646464646464646464642413d3730271e1409000000000000000000000000030f1b27333f4953616b74818e97a1aab4bdc6ced7dfdad2ccc3bdb8b7b3adabaaabacaeb5b9bbc0c7d0d6dfdcd7cbc3b9b0a69f93877c6f675c5142382e2317040000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffbf3ece6e2dfdedfe2e6eae0d6cabfb4aa9f948b7e71695e5248515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000000002090e121415202020202020202020202020202020202020181714110c06000000000000000000000000000000000000000000000000000000000005111d29343f485056585a5a5a5a5a5a5a5a5a64707d8a97a8b2bdc9d5e1ded2c5b9aca096877a6d615a5a5a5a5a5a5a5a626e7b8898a2aebac6d3dfe1d5c9bdb2a9978a7d70645a5a5a5a5a5a5a5a5a5a5a595751493f352a1e1206000000000000000000000005111d2935414c56616c74808d939ea6afbbc0c7cfd4d9e0e3e8ebe9e9e7e3e0dfdfe0e3e7e9eaebe5e2dbd6d0cac3bcb4aea39f93887e716a5f544b4034281f1409000000000000000000000000000000000000000000040a0f12181c1f2022282b2d2e303133333333333232302e2d2a2521211e1a140f0b0600000000000000000000000000000000000000000000000000000000000002080d11171c1f20262b2e2f32343537383839393938373634312f2e2b26211f1b150f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d44484953535353535353535353535353535353534d4c4740382f24190e0300000000000000000000000000000000000000000000000000000001070c13191d23282c2e34383a3d40414547494a4b4b4c4c4b4b4a49474540403c3a38342e2c271f1c17110b06000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e151b23292e313239393939393939393939393939393534312c251e151c242a2f323339393939393939393939393939393939392e2d2a251f170f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b1f29333b424648535353535353535353535353535353535353534e4c4741382f241a0e030000010b151f29323b41464747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474746413a32291e1308000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b10040000000000000000000000000b17222d38414f59616d7a859198a2abb4bcc5cdd6daded5cec8c5c4beb9b8b7b7b9bbbfc6c8ccd2d9e1d8d1cbc2b9b1a79f948d80746b60554b4030261c11060000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffdf7f2eeecebeceeede2d8cec6baaea2988f82766c62564d42515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000000000050d141a1e20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211d171008000000000000000000000000000000000000000000000000000000000815212d3945505a6264676767676767676767676e7a8796a1adb9c5d2dfe1d5c9bdb2a896897d70676767676767676767676c7985929fabb8c5d2dee6dacfc0b3a6998d807367676767676767676767676765635b51463a2e22160900000000000000000000020d17212d3946525d68707e8a929da5afb8c1cbd1d9e1e5eae9e4dfdddcdcd7d3d2d2d3d7dcdddde0e4eae7e2dbd6cec6bfbaafa49a92867c6f665c51453b30251a0e02000000000000000000000000000000000000040a0f161b1d23292c2d2d3338393b3d3e3f404040403f3e3d3b3936302e2d2a251f1c17110a02000000000000000000000000000000000000000000000000000000070c13191c23282b2d31373a3c3e4042444545464646454443413e3b3a37312e2b26201b160d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b27323d474f545660606060606060606060606060606060605a58524a40362b1f13070000000000000000000000000000000000000000000000000000030b12181e25292e34383a404546494d4c52545557585858585857575553514b4c4946443f3838322c28231c17110a020000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e252d343a3e3f464646464646464646464646464642413d3730271e262e363b3f4046464646464646464646464646464646463b3a36302921170d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2125313b454d53545f6060606060606060606060606060606060605a58524a41362b1f1408000007121d27313b444c5254545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454524c443a3025190d01000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c21150900000000000000000000000006111b262f3d46525d686f7c869299a3aab3bbc2cacfd5dad9d4d1cfc9c6c5c4c4c5c7cbd1d4d8ddd8d3cfc6bfbbb0a7a0959082796d60594f43392e1e140a000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffefbf8f8f8f3e7dcd0c6bcb0a69f92867b6e615a504444515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000000050f171f252a2d2e39393939393939393939393939393939393931302d28221a12080000000000000000000000000000000000000000000000000000000b1724303d4956626c7174747474747474747474747884919eabb7c4d1dee5d9cebfb2a6998c7f74747474747474747474747476838f9ca9b6c2cfdce9dccfc2b6a99c8f8276747474747474747474747474726d63574a3e3125180c0000000000000000000009141f2b37424e57616d7a85919ea4aeb7c1cad7dce3eaebe5ded8d3d0cfd1cbc7c5c5c7cbd1d0d1d4d8dfe6ece7e0d7d0cac0b6aca3989083796d60574d42362a1f14090000000000000000000000000000000002080d161b20272b2f34383a3d3f4446484a4b4c4d4d4d4c4c4b494746413f3b3a36312b28221c140b07010000000000000000000000000000000000000000000000030b12181e24292e34383a3d4347484b4d4f51515253535252514f4d4b4847433c3a37312c272119130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f5960636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645c52473c3023170b00000000000000000000000000000000000000000000000001070d151d24293035394045464b51535659565d6062636465656565646362605d55595653504a48433d38342e27221b140b060000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930262d373f464a4c53535353535353535353535353534f4d484239301f2e3840474b4d53535353535353535353535353535353534846423b33291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d31252a36424d575e616c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645c52473c3024170b00000c18232f39434c565e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161615e564c41362a1d110500101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c000000000000000000000000000a141d2935414c56606a707d879298a1a9b0b9bec5c9cfd3d6dbdad5d2d1d0d1d2d3d7dcd9d5d2cdc7c2bdb5aea69f9591837a6d675c51473d30271d0c02000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffffff4eae1d6cbbfb4aa9f948b7f72695e53483f44515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000000020d17212930363a3b4646464646464646464646464646464646463e3d39332c241a100600000000000000000000000000000000000000000000000000000b1825313e4b5864717e81818181818181818181818084919eabb7c4d1deeaddd0c4b7aa9d91848081818181818181818181818083909daab7c3d0ddeadfd2c5b8ac9f9286808181818181818181818181817f7265594c3f3226190c000000000000000000020e1a25303a47535f6a74818e97a1adb6c0c9d3dce8eee8e0dad5cdc7c4c2bebfbab9b9babfbfc3c4c8cdd5dae1e9e9e2dbd2c7beb4aaa0958d8073695e52463b30251a0e020000000000000000000000000000040c131921272c3237394045474a4a505355565859595a5a5959585654524d4b4846423b38332d261d18120b03000000000000000000000000000000000000000000060c151d23283035383f44464a4e5355585a5c5d5e5f5f605f5f5d5c5a5855534e4847433c383229251e160e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b707979797979797979797979797979797979746e64584c3f33261a0d0000000000000000000000000000000000000000000000040c13181f272f353a41464b5153555c60636669686d6f70717272727171706f6d67696663605c54544f46443f38332d261d17110a0200000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c343f4951565860606060606060606060606060605b59534b42312836404a52585a60606060606060606060606060606060605f524d453b30251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134282d3a46535e696e79797979797979797979797979797979797979746e64584c4033261a0d0004101c2934404b555e686e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d685e5246392d20130700121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e00000000000000000000000000020b1924303a444e58616b717e8692979fa6adb3b9bdc4c6cad0d0d2d2d4d7d7d3d2d1cfcec9c5c2bbb7b0aba39f948f837b6e685d554b40342b1e150b00000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffff8ede3d8cfc6baaea3989083786c60574d423644515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000009141f29333b4246485353535353535353535353535353535353534b49453e362c22170c00000000000000000000000000000000000000000000000000000f1c2835424f5b6875818d8d8d8d8d8d8d8d8d8d8d8d9196a1adb9c5d2dfebded1c5b8aca096918d8d8d8d8d8d8d8d8d8d8d8d8d9095a0acb8c5d1deeadfd3c6baaea298928d8d8d8d8d8d8d8d8d8d8d8d8d83776a5d5044372a1d1104000000000000000005121e2a36424d57626e7b87939fa9b3bec8d2dce5eee7ded6cfc9c2bbb7b6b2b4aeacacaeb4b2b6b8bcc3c9cfd7dfe8ede4d9d0c6bcb1a79f92867b6e61574d42362a1e120500000000000000000000000000070e161e242932383d43474b515357545b606163646666666666656563615e565854534d46443f382f29241d150d0600000000000000000000000000000000000000080f181e272e343a41454a505357585f626567686a6b6b6c6c6c6b6a696764625f5855534e48433d353028201911080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d86868686868686868686868686868686868074675a4d4134271a0e01000000000000000000000000000000000000000000050d161d2429313940454c52545c6064676d707376787a7c7d7e7e7f7f7e7e7d7c7a7876736f6d6663605953504a443f382f27221b140b0400000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d313a46515b62656c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53433a2f3b47525c63666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986868686868686868686868686868686868175685c4f42352b37434e58616e7b868686868686868686868686868686868686868074675a4e4134271b0e0006131f2c3845515c67767a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a6d6154473a2e21140700131f2c3946525f6c7985868686868686868686868686868686868275685c4f4235291c0f000000000000000000000000000008131e28323c464f59616c717d858f949ea1a9adb2b8babec1c3c5c6c7cccbc7c5c5c2c0bdb9b7b0aba69f99928c82796e695e564c43392e22190c0300000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffdf3e7dcd1c6bdb1a79f92867b6e665b50453b3144515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e1100000000000000000000020e1a25303b454d525f606060606060606060606060606060606060575550483e33281d1105000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9a9a9a9a9a9a9a9a9a9a9a9ea1a8b2bdc9d5e1ede1d4c8bdb2a8a09d9a9a9a9a9a9a9a9a9a9a9a9a9a9da0a7b1bcc8d4e0ede2d6cabfb4aaa29f9a9a9a9a9a9a9a9a9a9a9a9a9083776a5d5044372a1d110400000000000000000714202d3a46525e6974818e99a4afbbc4cfdae4eee7ded5ccc4bdb9b0aba9a5aaa39f9fa3aba5aaabb1b9bec5cdd6dee8ebe2d8cfc3baaea3988d8074695e52463a2d201409000000000000000000000000081019202830353d43484e54555c606367666c6e707172737373737271706e686865615e5753504a423d352f271f180f06000000000000000000000000000000000009121a212a303940454c52545c6064686a6f71737577787879797978777674716e6a67625f58544f46413a322b231a120800000000000000000000000000000000000000000001050707090909090909090909090909090909090909090a1623303d495663707c899393939393939393939393939393938d8074675a4d4134271a0e020000000000000000000000000000000000000000060f171f282f353d434b51565e61666d7075797d80828587888a8b8b8b8b8b8a8a888685827f7c79746f6b65605c545049413c332d261d160d06000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d41343e4a56626d727979797979797979797979797979756f65554b40353f4b58636e73797979797979797979797979797979797976695e52463a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f42352e3b47535f6a75818e9993939393939393939393939393939392857a6d6154473a2e211407000714202d3a4753606d7986878787878787878787878787878787878787878787878787878787878787878787878787878787878787878784786b5e5145382b1e1200131f2c3946525f6c79859293939393939393939393939393938f8175685c4f4235291c0f0000000000000000000000000000020c16202b343e47505a616b6f7b828b92979ea1a8abaeb4b4b7b8b9bbc0c0bbb9b8b6b4b2acaaa69f9c94908780786d675e574d443a30271d10070000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffff5ebe1d7cbbfb5ab9f958c7f72695f544a3f333744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e110000000000000000000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d211408000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba7a7a7a7a7a7a7a7a7a7abadb2bac4cfdae5f1e5d9cec3bab2acaaa7a7a7a7a7a7a7a7a7a7a7a7a7aaacb1b9c3ced9e4f0e7dbd0c6bcb4aeaca7a7a7a7a7a7a7a7a7a7a79d9083776a5d5044372a1d110400000000000000000815212e3b4854616e7b86929fabb5c0cdd6e1eceae1d5ccc3bab2ada69f9c98959892929995989d9fa7adb3bbc4ccd6e1ebeae1d7cbbfb4aa9f92867b6e6154483b31261a0e020000000000000000000008111a222b323a41454f54586062676d707377797b7d7e7f8080807f7f7e7c7a7875726e6964605b544f454039312921180f0500000000000000000000000000000009121b242c333c434b51565d60666d7075787b7e8082848485868685858482807e7b77746f6a636059524c443d352c241a120800000000000000000000000000000000000002080d11131416161616161616161616161616161616161616161623303d495663707c89969f9f9f9f9f9f9f9f9f9f9f9f9f9a8d8074675a4d4134271a110e090200000000000000000000000000000000000710182129313a41454f555d60686d73797d8285898c8f92979596979898989897969596918f8c8985817c77716d66605b534d443f382f281f180f060000000000000000000000131f2c3946525f6c7986868686868686868686868686868686868175685c4f4236424d5765727f86868686868686868686868686868175675d514539404d5a66738086868686868686868686868686868686867b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f423538444f59626f7c87939f9f9f9f9f9f9f9f9f9f9f9f9f9fa0958b7f72685e5246392d201307000714202d3a4753606d7a86939494949494949494949494949494949494949494949494949494949494949494949494949494949494949184786b5e5145382b1e1200131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f000000000000000000000000000000040e19222c353e48505960696e767e858c91969b9fa2aaa8aaabacafb5b5afacaba9a7a8a09e9a948f8a837c736d665d554d453b32281e150b000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffff9eee3d9cfc7bbaea3999083786d60574d42382d3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000714202d3a46525e6976797979797979797979797979797979797979716c6155493d3023170a000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b4b4b4b4b4b4b4b4b4b7b9bdc4ccd6e0ebf6eae0d5ccc3bdb8b7b4b4b4b4b4b4b4b4b4b4b4b4b4b7b8bcc3cbd5dfeaf5ede2d7cec6bfbab8b4b4b4b4b4b4b4b4b4b4aa9d9083776a5d5044372a1d11040000000000000005111d2a36414c5666727f8c99a3aebdc7d2dfe8ede3d8cfc3bab2a8a19e948f8b8886868687888c90959ea1a9b2bac4cfd9e3eee7dcd1c6baaea3988c7f7366574d42362a1e120500000000000000000008111a232c343d444c525960636a6f74797d80838688898b8c8c8d8d8c8c8b898785827f7b76706c666059514b433b332921170e050000000000000000000000000009121b242d363e464e555c60686d73797d8185888b8d8f90919292939292908f8d8b8884807c766f6b615e564f473e362c241a100700000000000000000000000000000000050c13191d202122222222222222222222222222222222222222222223303d495663707c8996a3acacacacacacacacacacaca79a8d8074675a4d413427201e19140d05000000000000000000000000000000071119222a333b434b515960676d737a7f858a8e9298999c9ea1a9a3a4a5a5a5a4a4a3a9a19e9c9998928e89847e78716c655f575049413a312921180f0600000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f423a46535e6976839093939393939393939393939392867a6d6053473a404d5a6673808d939393939393939393939393939393877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4230384854606b76828f99a4afacacacacacacacacacacb0a69d9183786d60564c4135291d1105000714202d3a4753606d7a8693a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19e9184786b5e5145382b1e1200131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f0000000000000000000000000000000007101a232c363e464f575e616c717a7f848a8e9298999b9d9f9fa4a1aba39f9e9c9a9896918d88827d786e6a605c544c433b332920160c03000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffdf4e8dcd1c7bdb1a79f92877c6f665c50453c2f263744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8686868686868686868686868686868686867e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c0c0c0c0c0c0c0c0c4c5c9cfd6dee8f2fcf1e7ded5cec8c5c4c0c0c0c0c0c0c0c0c0c0c0c0c0c3c5c8ced5dde7f1fcf3e9e0d7d0cac6c5c0c0c0c0c0c0c0c0c0b6aa9d9083776a5d5044372a1d1104000000000000000713202d3946525e687683909cabb5bfd0d9e3f1e7dcd1c6bdb2a8a0969189837f7b7a79797a7c7f838a9297a1a8b2bdc7d1dce8ede2d7cbbfb4aa9d908377695f53463a2d2114070000000000000000060f1a232c353e464e565d606b6f767c81858a8d9092989697999999999998989697928f8b87827d786f6b605d554d453b332920170d02000000000000000000000006101b242d363f4850585f676d727a80848a8e9197989a9b9d9e9e9f9f9f9e9d9c9a9796918d88827c756d68605950483e362c23190e040000000000000000000000000000050e171e252a2d2e2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f303d495663707c8996a3afb9b9b9b9b9b9b9b9b9b3a79a8d8074675a4d41342e2d2a251f170e0500000000000000000000000000061019232b343c454d555d606b707980858c91979b9fa2aaa9abadb3b0b1b1b2b2b1b1b0b2adaba9aaa29f9b95918b847e786e69605b534c433b332a21180f06000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f423b4854616e7b87959f9f9f9f9f9f9f9f9f9f9fa2988a7e7164564c41404d5a6673808d999f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f423842505a63707d89949eabb5c0b9b9b9b9b9b9b9bfb4ab9e93897d70665c50443a3025190d01000714202d3a4753606d7a8693a0adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000008111a242c343d454d535a61676d72797e8285898c8e9092939994949992928f8d8b8884807c76706c655f58504a423a312921170e0400000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffff5ebe2d7cbc0b5aba0958c80736a5f544a3f332a2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b87939393939393939393939393939393938a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cdcdcdcdcdcdcdd1d2d5dae0e8f0fafff9f0e7e0d9d4d1d0cdcdcdcdcdcdcdcdcdcdcdcdcdd0d1d4d9dfe7eff9fffbf2e9e2dbd6d3d2cdcdcdcdcdcdcdcdc3b6aa9d9083776a5d5044372a1d1104000000000000000714212e3a4754616d7a86939facb9c6d1dfebefe3d7cbbfb5aba09691847d76726e6d67676d6f72777d859196a1abb5c0cbd7e4eee7dcd1c6b8aca095887b6e6155483b2e22150700000000000000020c18212c353e474f5860686d747c82898e92989a9d9fa3aaa4a5a6a6a6a6a5a4a9a29f9b9a938f8a837d746d675f574d453b32291e130800000000000000000000030c18222c363f48505a616a6e797f858c91969b9ea1a9a6a8aaababacacacabaaa9a7a8a09e9a948f89817a6f6b615a50483e352b20160c02000000000000000000000000020c1720293036393a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3d495663707c8996a3afbcc6c6c6c6c6c6c6c0b3a79a8d8074675a4d413c3b3a36302920170d020000000000000000000000050e18222b353d464e575e676d747d848c92989ea1a9acaeb4b5b8b9bebdbebebebebebdbdbdb9b8b5b4aeaba7a09d96918a837b726c655d564d453c332a21180d040000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f42424d5766727f8c99a7b1acacacacacacacacb4aa9b8f8275685d5245404d5a6673808d99a6acacacacacacacacacacaca194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f423f4a54616c7683909da6b0bdc7d2c6c6c6c6c6c7baaea3998f82756b60544a3f32281e130800000714202d3a4753606d7a8693a0adb9babababababababababababababababababababababababababababababababababababab7ab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000008121a222b333b424650555d60666d7175797d7f8183858687878786868583817e7b77746f6a63605b534e443f3830281f170f050000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffff9eee4d9d0c7bbafa3999083796d60584e42382e212a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b87949f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedadadadadadadedfe1e5ebf2fafefffff9f1eae5e1dedddadadadadadadadadadadadadadddee0e4eaf1f9fdfffffbf3ede7e2dfdfdadadadadadadad0c3b6aa9d9083776a5d5044372a1d1104000000000000000b1824313e4b5764717e8a99a4afbbc7d4e0edede0d3c7bbaea39991847b706b6562605d5d6062656c707b849199a3afbbc7d2dde8ede2d4c8bcb1a7988c7f7265594c3f2e23180c000000000000000a141e2a333d474f59616a6f7a81878f949b9fa2aaaaacaeb4b1b2b3b3b3b2b2b1b3adabaca49f9c95908981796e695f574d443a3025190d040000000000000000000b151e2a343e48505a626c717c838c92979ea1a9abadb3b3b5b7b7b8b9b9b8b8b7b5b3b2acaaa69f9c938e847d716c615a50473d32281e130800000000000000000000000008131e29323a414647494949494949494949494949494949494949494949494949495663707c8996a3afbcc9d2d2d2d2d2cdc0b3a79a8d8074675a4d49494746423b32291f140900000000000000000000030c17202a343d474f585f696e79818891969fa2aaadb3b8babfc2c5c6c9cfcacbcbcbcbcacfc9c5c4c2bebab8b1aca8a09e9490867f776d685f574d453c332a20160c0200000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4247535f697783909daab6b9b9b9b9b9b9b9b9b9ac9f92867a6d605447404d5a6673808d99a6b3b9b9b9b9b9b9b9b9b9aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4244505c66717e8a959fabb8c2d0d9d2d2d2d5c9beb3a99f92867b6e61594f42382e20160c0200000714202d3a4753606d7a8693a0adb9c6c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c4b7ab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000081019212931363e434c51545c6064666d7072757778797a7a7a7a79787674726e6a67625f58535049413c342e261e160d05000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fefefff4e8ddd2c7beb2a89f92877c6f665c51463c30261c2a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1acacacacacacacacacacacaca4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe5e5e5e5e5e5e5e5e6e7e9edf2f8fffffcf6f1edebeae7e7e7e6e5e5e5e5e5e5e5e5e5e5e5e5e5e6e8ecf1f8fffffef8f2efecebe7e7e7e7e5e5ddd0c3b6aa9d9083776a5d5044372a1d1104000000000000000d1a2733404d5a6673808d99abb5c0ccd7e3f0ecdfd2c5b9ac9f92877c6f6960595553515154555a61696f7c87929facb6c0ccd8e4f0e4d9cdc1b4a89b8e817568544b4034281c1004000000000006111c26303c454f59616b707c848e939a9fa6abaeb3b6b8babfbebfbfc0c0bfbfbebebab8b6afaca7a09d938e837b6e695e564c41362a1f160c010000000000000007121d27303c46505a626c717e8690959fa2a9adb2b8b9bec0c2c3c4c5c5c6c5c5c3c2c0bdb9b7b0aba59e9691877e716c61594f443a3024190d0400000000000000000000010d1925303a444c5254555555555555555555555555555555555555555555555555555663707c8996a3afbcc9d6dfdfdfdacdc0b3a79a8d8074675a55555554524d443b3025190e020000000000000000000b151e29323c464f59606a6f7b838d939aa0a8aeb3b9bec4c6cad0d1d2d5dad7d8d8d8d7d7dad5d2d1d0cac6c3bcb8b2aca69f98928c827a6e695f574d453b32281e140a00000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f424855616e7b8895a0acb8c4c6c6c6c6c6c6c7baaea3998b7e7164564c414d5a6673808d99a6b3c0c6c6c6c6c6c6c6baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f404b55606d7884919ea7b1bccad3e2ebe5dbd2c6b9ada1978d8073695f53473d30261c0e040000000714202d3a4753606d7a8693a0adb9c6d3d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d1c4b7ab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000070f171f252a313a41454a5153545c606366686a656c6d6e6d6d676b696765625f5855544e46443f382f28231c140c0400000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2f2f2f2f0e4d8ccc0b6aca0968d80736a60544b40342a1e142a3744515d6a7784909daab7c3d0ddeaeaddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aeb9b9b9b9b9b9b9b9b9b9b1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1ced8d8d8d8d8d8d8d8d8d9dadde1e7eef6fefffffdf5eee7e1dddad9d8d8d8d8d8d8d8d8d8d8d8d8d8d9dce0e6edf5fdfffffef7efe8e3dedcdbd8d8d8d0c3b6aa9d9083776a5d5044372a1d110400000000000004101c2834404a546975828f9ca8b5c2d2dde8ede0d4c8bcb1a79a8d80746a5f574f4847454547495057606a74808d9aa4afbbc8d4e0edeaddd0c3b7aa9d908477665c5145382c1f130600000000000b17232e38424d57616b707d8691969fa4acb0b8babec3c5c7cbd0cccccccccccbcfcac6c5c0bbb9b1aba59d9590847b6e685e52463f31281d1207000000000000000c18232e39434e58616c717e889298a0a7adb3b9bdc4c6c9cfced0d1d1d2d2d2d1d0cfcec9c5c2bbb7afa9a19992877e716b60564c41352920150a0000000000000000000005111d2a36414c565e61626262626262626262626262626262626262626262626262626263707c8996a3afbcc9d6e2ece6dacdc0b3a79a8d80746762626262615e564d42362a1e1105000000000000000007121c27303b444e58606b707c8490959fa4acb2babec5c9cfd3d6dbdedfe1e6e4e4e2e1e1e1e6e1dfdedbd6d3cec8c3bdb8b0aaa39f948f847b6e695f574d443a30261c1106000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f434e5866737f8c99a7b1bcc8d4d2d2d2d2d7cbbfb4ab9c8f8276685e52464d5a6673808d99a6b3c0ccd2d2d2d2d2c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f45515d67727e8b96a0acb9c2cddce5eae0d4c8bcb1a79e91857a6d60574d42352b1e150a000000000714202d3a4753606d7a8693a0adb9c6d3e0e0e0e0e0e0e0e0e0e0e0e0e0e5e1deddd6d5d5d5d5d5d5d5d5d5d5d5d5d5d5d1c4b7ab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000050d141a1f282f35394044464b515356595b535b60606161605c555c5a5855534e4947433c37332d261d17110a020000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e5e4dbd4c8bbafa49a9184796d60584e42392e22181e2a3744515d6a7784909daab7c3d0dde5e5ddd0c3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac6c6c6c6c6c6c6c6bdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cbcbcbcbcbcbcbcbcbcbcdced1d6dce4ecf6fffff5ece3dcd5d1cdcccbcbcbcbcbcbcbcbcbcbcbcbcccdd0d5dbe3ebf5fffff7ede5ddd7d2cfcecbcbcbcbc3b6aa9d9083776a5d5044372a1d110400000000000006121f2c3844515c667884919eabb7c4d1deeaeaded1c5b8aca095887b6e62584e453d3a39393a3e454e58616e7b87939facb9c6d2dfececdfd2c5b9ac9f9286796d6053463a2d2013070000000003101c28343f4a545f69707d879298a1a8afb6bec2c6cad0d2d3d6dcd8d9d9d9d9d8dbd6d3d2ccc8c3bcb8afa7a09691847a6d615b5143392f24180d01000000000004101c2834404b555f6a717e88939aa2aab1babec5c9cfd2d5dadbdddededfdfdfdedddcd9d5d2cdc7c1bbb2aba39992867d6f685d52453c32271b0f030000000000000000000713202d3946525e686d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f707c8996a3afbcc9d6e2efe6dacdc0b3a79a8d80746f6f6f6f6f6e695e52463a2d20140700000000000000020b18232e39424c565f6a707d869196a0a7afb6bec3cad0d5dae0e2e7e3e0dfdcd9d7d5d5d4d4d5d7d9dcdfe0dfd9d4cec8c2bcb4aea69e9691847b6e695f564c42382e23170c030000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f47535f6a7784909daab7c3cdd9e4dfdfe7dcd1c5b9ac9f92867a6d6154474d5a6673808d99a6b3c0ccd9dfdfdfd4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4c56606d7985919ea8b2bdcbd4dfede2d8cec6b8ab9f958b7e71675d51453c31231a0c03000000000714202d3a4753606d7a8693a0adb9c6d3e9f2ededededededededf0e7e0d9d4d2d1c9c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c4b7ab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000003090d161e24292e34383a4045464a4c4e49505354545453514b504e4b4847433c3b37322b27221b140b0600000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d5c9bdb2a89f93887d6f675d51463d30271d101e2a3744515d6a7784909daab7c3d0d8d8d8d8d0c3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac7d2d2d2d2d2d2cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5bebebebebebebebebebebec0c1c5cad2dae4f3fdf8eee3dad1cac5c1c0bebebebebebebebebebebebebfc0c4cad1d9e3f1fafaefe5dbd3ccc6c3c1bebebebebeb6aa9d9083776a5d5044372a1d11040000000000000713202d3a4653606d7986939facb9c6d2dfeceaddd0c3b7aa9d908477695f53463c332d2c2c2d333d46535f697683909da9b6c3d0dce9ede0d3c7bbaea399887b6e6255483b2f2215080000000006121f2b3844505c666e7b859299a2aab2bbc0c7d0d3d6dbdfdfdfd9d6d4d3d4d7dddee0dfddd8d4cdc8c0b9b1a8a0968f82756d62554b4035291d1004000000000006131f2c3845515c676f7c86929aa4acb4bcc3cacfd5dadfe1e0dfdbd7d5d4d5d8dddee0e4e1ded8d3cdc4bdb4aba39891847a6d60584e43372b1f15090000000000000000000714212e3a4754616d7a7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7f8b98a5b1becbd8e4f1e7dbcec1b4a89b8e817c7c7c7c7c7c7b6e6154473b2e211408000000000000000a141d2834404a545e686f7c859298a1a9b1bbc0c7d0d6dbe1e6e4e2dcd6d3d2cfcccac9c8c7c8c8caccd0d2d4d8dde0d9d4cfc6bfbab0a8a09691847b6e685d544a3f34281e150b0000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4855626f7b8895a0acb8c5d5dfeaf5ecede0d3c7bbafa3998b7e7265564d4d5a6673808d99a6b3c0ccd9e6ece1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f525e68737f8c97a1adbac3cedde6e7dbd0c6bcafa59d9083786c60554b41332a1f110800000000000714202d3a4753606d7a8693a0adb9d0d7e0e7f0f7fffafafafcf1e7ded5cec8c5c4bcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb7ab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000000000040c13191c23282c2e34383a3d3f423f444647474747454043413f3b3a37312e2b261f1b17110a020000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcdc4b9aca1968d80746b60554b40342b1e150b1e2a3744515d6a7784909daab7c3cbcbcbcbcbcbc3b7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac7d4dfdfdfdfd7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b2b2b2b2b2b2b2b2b2b2b2b2b3b5b9c0c8d2e1ebf5f2e7dcd1c8c0b9b4b3b2b2b2b2b2b2b2b2b2b2b2b2b2b4b8bfc7d1dfe8f2f3e8ddd3c9c1bab6b5b2b2b2b2b2b2aa9d9083776a5d5044372a1d11040000000000000714212e3a4754616d7a879aa4afbbc8d4e0ede7dacdc1b4a79a8e817467574d42342a202020212a36424d576774808d9aa7b3c0cddae6efe3d7cbbfb5ab96897c6f6356493c3023160900000004101d2935404b55606d78839097a2abb4bcc4ccd2d9dfe2dbd6d3d2cdc9c7c6c7cad0d1d4d9dfe4e0d9d4cbc3bab2a89e948b7f72675d5145392c20150a0000000004111d2935414c55606d79839198a2acb6bec6ced6dbe1e4ddd8d4d2cecac8c7c8cbd0d1d4d9dfe7e3dfd6cfc6bdb4aaa1968e81746a6054473c31261a0e0200000000000000000c1825323f4b5865727f888888888888888888888888888888888888888888888888888888888b919ba7b3bfccd8e5f2e8dccfc2b6aa9e938e888888888888807366594d4033261a0d00000000000006111b262f3844515c666e7a849197a2aab2bbc3ccd2d9e2e6e6dfd8d4d0cbc7c5c2bfbdbcbbbbbbbcbdc0c3c6c8ccd2d6dce1d8d1cbc1bab2a8a19691837a6d665c50443d30271c120700000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4e586673808c99a7b1bcc8d4e7f1fbfcefe3d7cbc0b5ab9c8f8376685e524d5a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4d57616d7a85929fa9b3beccd5e0efe2d6cabfb4aa9e93897c6f655b50433a2f21180e0000000000000714202d3a4753606d7a8693a0adbfc6ced5dee5eef8fefffff6eae0d5ccc3bdb8b7b0afafafafafafafafafafafafafafafafafab9e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000001080d12181c1f23282c2d30332d3337393a3b3a3a38342f34322f2e2b26221f1b150f0b0600000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbbafa59e9184796d60594f43392f22190c111e2a3744515d6a7784909daab7bfbfbfbfbfbfbfbfb7aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1ecece4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba5a5a5a5a5a5a5a5a5a5a5a5a5a6a8aeb6c0cfd9e3eeede1d5cac0b6aea8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a8adb5bfccd6e0ebeee3d7ccc1b7afaaa8a5a5a5a5a5a5a59d9083776a5d5044372a1d11040000000000000815212e3b4854616e7b8794a1b6c0ccd8e4f0e5d8cbbfb2a5988c7f7265594c3f31261813131a26313e4b5864717e8b97a4b1becad7e4f3e7dcd1bdb0a3968a7d7063574a3d3024170a00000006131f2c3945515d67727f8b959fa9b3bdc6ced8dde4e0d7d0cac6c5c0bcbababbbec3c5c8ced5dde4e4ddd5ccc4bab0a69e9285796d6053473c32271b0f030000000613202c3945515d67727f8c95a0aab4bec7d0d7e0e6e2d9d2ccc8c6c2bdbbbbbcbec3c4c8cdd5dde3e8e1d8d0c6bcb2a89f93877c6f62574d42372b1e120600000000000000000c1825323f4b5865727e8b959595959595959595959595959595959595959595959595959595989ba3acb7c3cfdbe7f4ebded2c6baafa59e9b95959595958c807366594d4033261a0d0000000000000b17222d38414e57606d78839096a1a9b3bcc4cdd8dde4e8e1dad5cdc8c6bfbab8b5b3b1afaeaeaeafb0b3b6b9bbc0c7cbd0d8e0dcd7ccc3bab2a9a0958f82786d60584e42392e23180c02000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f535f6a7784919eaab7c3ced9e5f7fffff3e8dcd1c6b9ac9f93877b6e61544d5a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c535e6974808d98a2aebbc4cfdee7e6dcd3c6baaea2988e81756b6053493f31281d0f060000000000000714202d3a4753606d7a8693a4aeb4bcc3ccd3dce7edf4fcfdf1e5d9cec3bab2acaaa3a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29e9184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000070c1012181c1f20232622272b2d2d2e2e2d2c2923272522211f1a15130f0a03000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2a99d93897d70675d51473d31271d1007111e2a3744515d6a7784909daab2b2b2b2b2b2b2b2b2b2aa9d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e98989898989898989898989898989a9da4aebdc7d1dce8e9ddd1c5b9aea49c99989898989898989898989898999ca3adbac4cfdae5ebded2c6baafa59e9b98989898989898989083776a5d5044372a1d11040000000000000915222f3c4855626f7b8895a2aebbd2dde8f4e4d7cabeb1a4978b7e7164584b3e3125180b091724313d4a5764707d8a97a3b0bdcad6e3f8e3d7cabdb0a4978a7d7164574a3e3124170b0000000714202d3a4753606d7985929ea7b1bcc5cfd8e0e8ddd4cec5bfbab8b3afaeadaeb1b7b8bcc3cbd3dbe4e7ded6ccc1b9ada1978c7f7266584e43372b1f13060000000714212d3a4754606d7a85929ea7b1bcc6d0d9e2e9e0d7d0c7c0bbb9b5b1afaeafb1b6b8bcc3cbd1dae3eae2d8cfc4bbafa49a8f8276695f53473a2d21140900000000000000000c1825323f4b5865727e8b98a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a5a7acb5bec9d4dfebf7eee2d7cbc1b7afaaa8a2a2a2a2998c807366594d4033261a0d0000000000030f1b27333f49535f6a737f8c959fa8b2bcc5ced6dfe8e6dfd6cfc9c3bcb8b4aeaca9a6a4a2a2a1a1a2a4a6a9acafb6babfc6ced4dcded5ccc4bbb1a89f948c7f736a60544a4034281e1308000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f55626f7c8896a0acb8c5d5dfeaf5fffff9ede0d4c7bbafa4998b7f7265574d5a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c58616e7b86929faab3becdd6e1ebe2d5c9bdb2a89f92867b6e61594f41382d1f160c000000000000000714202d3a4753606d7986929fa2aab2bac1cad6dbe2eaf2f9ede1d4c8bdb2a8a09e96959595959595959595959595959595959595959184786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000000004070c1013131719171b1f20212121201f1c181b181514120f0906030000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a1978e81746b60554b40352b1f150b00111e2a3744515d6a7784909da5a5a5a5a5a5a5a5a5a5a5a59d9084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875818b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8d929dabb5c0cbd7e3e7dacdc1b4a89c928d8b8b8b8b8b8b8b8b8b8b8b8b8c919ca8b2bdc9d5e1e8dccfc3b6aa9e938e8b8b8b8b8b8b8b8b8b83776a5d5044372a1d11040000000000000916232f3c4956626f7c8995a2afbcc8d5e2f9e3d7cabdb0a4978a7d7164574a3e3124170b0a1623303d495663707c8996a3afbcc9d6e2efe4d7cbbeb1a4988b7e7165584b3e3225180b000006121e2b37424e5765727f8b97a1adb9c3ced7e1e8dfd4cbc3bcb4aeaca6a3a1a0a1a4aaacb1b9c1c9d3dde7e8ded5c9beb3a99e9184776a6054473b2e221508000006121e2b37424d5765727f8b97a1adb9c3ced8e2ebe2d7cec5beb6afaca8a4a2a1a2a5aaacb1b9bfc8d1dbe4eae1d8ccc0b6ac9f93877b6e6155483b31261a0e02000000000000000c1825323f4b5865727e8b98a5afafafafafafafafafafafafafafafafafafafafafafafafafb1b3b7bec7d0dae5f0fcf3e8ddd3c9c1bab6b4afafafa6998c807366594d4033261a0d000000000005121f2b3744505b656e7b86929fa7b1bac4ced7e0e8e6ddd4cdc5beb9b1abaaa39f9c9997969594959597999d9fa4acaeb4bcc2cad2daded6cdc3bab0a69f92877c6f665c51443a3025190d010000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4e586673808d99a8b2bdc8d4e1edf9fffffcf0e3d7ccc0b5ab9c908376695e535a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5f6a75818e99a3aebcc5d0dfe8e3d9d0c7b9aca1968c7f73695e52463d2f261b0d04000000000000000613202d394653606c78808a9298a0a8b0b8c0cad0d8e0e8f0ebded2c5b8aca0969189888888888888888888888888888888888888888884786b5e5145382b1e1200131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000000000000000000000406070a060b0f12131414141413100c070c080806020000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79869298989898989898989898989898989891847a6d60594f433a2f23190d0304111e2a3744515d6a77849098989898989898989898989898989084776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000a1724303d4a5763707d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f808d99a3afbbc7d4e0e6d9ccc0b3a6998d807f7f7f7f7f7f7f7f7f7f7f7f7f8c96a1adb9c5d2dfe8dbcec1b5a89b8e817f7f7f7f7f7f7f7f7f7e7164574b3e3124180b00000000000000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000814212e3a47535f6a7783909da9b3becbd4e0e9e1d6cdc3b9b1aaa29f9a96949394979da0a7afb7c1cbd5dfeae6dacfc5b9aca096887c6f6255493c2f22160600000814212d3a47535f697783909da9b3becbd5d6d6d6dbd0c5bcb4aca49f9b97959495989da0a7aeb6bfc9d2e0e9e8ddd2c7bbafa49a8d807366574d42362a1e1205000000000000000c1825323f4b5865727e8b98a5b1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbebfc3c9d0d9e2ecf7fff9efe5dbd3cbc6c2c1bbbbb3a6998c807366594d4033261a0d00000000000613202d394653606c78839098a3aeb9c2ccd6e0e9e6ddd4cbc2bbb3ada79f9d98928f8c8a89888888898a8d90939a9fa3aab0b8c0c8d2dadfd5ccc2bbafa3999184786d60564c41362a1d13070000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c54606a7884919eabb7c3ced9e5f1f8f6f6f6f4e8ddd2c6b9ac9f93877b6e61545a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756859626f7c87939fabb4bfced7e1e8ddd2c7bdb0a69e9184796d60574d42342b1d140a000000000000000005121f2b3744505b656c737e8691969ea6aebabfc6ced6dee6eaddd1c4b7aa9e91847d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c6f6255483c2f22150900131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000030506070807070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8a7e70685d52473d31281d11070004111e2a3744515d6a77838c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c83776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000916232f3c4855616b707272727272727272727272727272727986929facb9c5d2dfe3d7cabdb0a4978a7d7272727272727272727272727884919eabb8c4d1dee6dacdc0b3a79a8d80747272727272727272716c6155493d3023170a00000000000000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000815222f3b4855626e7b8895a0acbbc5cfdde6e6dacfc4bbb1a79f98928d898787888b90959ea5afb9c3ced9e5ece1d5c9bdb2a8998c807366594d402d22170b00000815222e3b4855616e7b88959fabbbc5cfc9c9c9c9c9cabeb4aaa29a938f8a8888898b90959ca4aeb7c0ced7e2ede4d8ccc0b6ac9d918477695f53463a2d211407000000000000000c1825323f4b5865727e8b98a5b1bec8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8cbcccfd4dae2ebf4fefffff7ede5ddd7d2cfcec8bfb3a6998c807366594d4033261a0d000000000713202c38444f5964717d8a949faab4bfcbd4dee8e8ded4cbc2b9b1a9a19e95908b8682807e7c7b7b7b7c7d8083878d92989fa6aeb6c0c8d2dcded7cbc0b5aba0968c7f72685e52463a2f24180d0100131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c53626f7c8996a1acb9c5d5e0eaf0eceae9eaecede0d4c8bbafa49a8c7f7265575a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568606b76828f9aa4afbdc6d1e0e9e3d7ccc0b5ab9f948a7e71675c51453b3022190b020000000000000000030f1b27333f49535b606c717c848f949ca4aeb4bcc4ccd4dde5ded2c5b8aca09691847d726f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6a5f53473a2e21150800131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e716c61564c41352b1f160c0000000b1825313e4b5864717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164584b3e3125180b000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000714202c38444f5961636565656565656565656565656565677784909daab7c3d0dde6dacdc0b3a79a8d8074676565656565656565656875828f9ba8b5c2d1dce7ddd0c3b6aa9d908377676565656565656564615a5045392d21140f0a040000000000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000c1926323f4c5965727f8c98a7b1bccdd7dadadad5c9beb3a99f959086807c7b7a7b7e838e939ea7b1bcc8d4e0ede5d9cec2b5a89c8f82756953493f33271b0f03000b1825323e4b5865717e8b98a7b1bcbcbcbcbcbcbcbcbcbaaea2989288827e7c7b7c7f838c929ca5afbcc6d0dbe7e8ddd2c7b8aca096887b6e6155483b2e221508000000000000000c1825323f4b5865727e8b98a5b1becbd5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d8d8dbdfe5ecf4fdfffffffff7efe8e2dedcd9ccbfb3a6998c807366594d4033261a0d000000000916222f3b4854606b7683909da6b0bcc6d1dde6ebe0d6ccc2b8b0a79f97928a837e7a7673716f6f6e6e6f7173767b808690949da4aeb6c0cad4e0dcd1c7bdb2a89f92857a6d61554b4035291d110400131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5b6574808d9aa8b2bdc9d5e7e9e4e0dddcdde0e4e4d8ccc0b6ac9d908377695f5a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756865707d89949facb6c0cfd8e2e7ded4c7bbafa4998f82766c61554b4033291f1007000000000000000000000b17222d384149505a616a6f7a828d929fa2aab2bac2cbd3dbe1d4c8bdb2a8a09691877f776d68626262626262626262626262626262625f584e43372b1f120600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000000000000000005090d0f101313131313131313131313131313131312110f0c070100000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4a56626d7272727272727272727272727272727272716c625a50443a2f231a0d040000000a1724303d4956626c7172727272727272727272727272727272716c6156493d3024170a000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000004101c28333e474f555758585858585858585858585858556774818e9aa7b4c1cfdbe6dcd0c3b6a99d908376665c585858585858585965727f8c98abb5bfcbd7e3dfd2c5b9ac9f9286796d60585858585858575550483e3428221f1b160f0700000000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0004111d2935404b556875828f9ba8b5c2cdcdcdcdcdcdc6b9ada19790837b73706e6d6e7178818e95a0acb8c5d1deebeaded1c4b7ab9e918478655b5044372b1f1205000e1b2734414e5a6774818d9aa7afafafafafafafafafafb0a69f92867d75716f6e6f7278808c939daab4bfcad6e2eee4d4c8bdb2a8978a7e7164574b3e3124180b000000000000000c1825323f4b5865727e8b98a5b1becbd8e2e2e2e2e2e2e2e2e2e2e2e1e0e0e0e0e0e0e0e0e0e0e0ebeceef2f7fdfffffffffff9f3eeeae6d9ccbfb3a6998c807366594d4033261a0d00000005111d2a36414c5663707d89959fabb8c2cfd8e2efe5dacfc4bab0a69f9590857e77716d67666463626162626466696e737b828d929da4aeb8c2ced7e2d9cfc3baaea2988c8073675d5145392c20130600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c606c7884919eabb8c4cedae5ded8d3d1d0d1d3d8deddd2c7b8ab9f95887b6e615a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686c7883909da6b0bec7d2e1eadfd6cabeb3a99f93877c6f625a5043392f21170d000000000000000000000006111b262f383f4450585f686d78808a9298a1a8b1b9c1c9d7dcd9cec3bab2a8a199928c827a6e69605855555555555555555555555555534e463c31261b0f0300131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000000000000030a1015191c1d202020202020202020202020202020201f1e1b18130c05000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b62656565656565656565656565656565656564625a50473e32281e1108000000000815212d3945505a62646565656565656565656565656565656564615a5045392d211508000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000b16212c353e44484a4c4c4c4c4c4c4c4c4c4c4c4c4c5864717e8b97a9b3becad6e2dfd2c5b9ac9f9286796d60534c4c4c4c4c4c56636f7c8999a3aebbc7d3e0e0d3c7bbaea399897c6f63564c4c4c4c4c4b49453e36302f2e2b2720191007000000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c000613202c3945515d677885919eabb8c0c0c0c0c0c0c0c0b8ab9e91857a6e6863616061666d7983919daab7c4d2dde8ecdfd2c6b9ac9f9386796c605346392d20130600101d2a3743505d6a7683909da3a3a3a3a3a3a3a3a3a3a3a39f948a7d706b64626162666c74818e98a2aebac6d3dfece5d9cec0b3a69a8d8073675a4d4034271a0d000000000000000c1825323f4b5865727e8b98a5b1becbd8e4eeeeeeeef3ece6e2dfded4d4d4d4d4d4d4d4d4d4d4d4dedfe2e6ecf3fafffffff6eee7e2dedbd9ccbfb3a6998c807366594d4033261a0d0000000713202d3946525e6875828f9ca7b1bccad4e1eaede1d5c9bdb2a89f9490837a716c64605d5557565555555657575e61696e78808d929da6b0bcc5d0dbe1d6cabeb3aa9f92857a6d6053473a2d20140700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756854636f7c8996a1adb9c5d6e0ddd4cdc7c4c3c4c7cdd4ddd4c8bcb1a7998c7f7366586673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827566717e8a959fabb8c2d0d9e4e5d9cec6baada2978e81746a5f53483e31271d0f050000000000000000000000000a141d262d333e464e565d666c737e8691969fa7afb7bfcbd1d8d5ccc3bab2aba39f948f837b6f6a615950494949494949494949494847433c342a20150a0000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000040c141b212628292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2b28241e170f0600000000000000000000000000000000000000000000000000000000000000000000000006121e29343f4951565859595959595959595959595959595959585650483e352c20160c000000000005111d29343e4850565859595959595959595959595959595959585650483e34281d1105000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000005101a232c33383c3d3f3f3f3f3f3f3f3f3f3f3f3f4855626e7b8897a2adbac6d3dfe0d3c7baaea398897c6f6256493f3f3f3f4753606d7a86929facb9c5d2dfe3d7cbbfb5ab988c7f7265594c3f3f3f3f3e3d3d3d3d3d3c3b37322b22190f040000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c000714202d3a4753606d7a8697a1adb4b4b4b4b4b4b4b4b4b2a8988b7f72685e565454545c67717e8b98acb6c0ccd8e4ede0d4c7bbafa499877a6d6054473a2d21140700111e2b3844515e6b77849196969696969696969696969696968f82766c61595555545b616d7a86929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000c1825323f4b5865727e8b98a5b1becbd8e4f1fbfbf1e9e1dbd6d2d1c8c7c7c7c7c7c7c7c7c7c7c7d1d2d5dae1e8f1fafff6ede4ddd6d1cecdc7bfb3a6998c807366594d4033261a0d0000000714212e3a4754616d7a87939facb9c2cddfe6f3e8ded2c5b9ada1969082796e68615a53514b4d4d4d4d4d4d4d4d53575e666d74808d949faab4bfcad6e2dbd0c5baada297897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c6674818d9aa8b2bdc9d5ddd4cbc2bcb7b6b7bcc2cbd4d8cdc3b7aa9d9083776a5f6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756d7884919ea7b1bccad3e2ebe1d4c8bdb1a89f92857a6d61584e43362c1f150b00000000000000000000000000020b141b2227343c444c545b606c717c8490959ea5aebbbfc6cfd7d5ccc4bdb5afa69e9590857c706b615a50483e3c3c3c3c3c3c3c3c3a37312a22180e040000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000000000000000030c161e262d323536393939393939393939393939393939393837342f2921180f050000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b49453e362d231a0d040000000000000c17222d363e45494b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b49453e362d22170c00000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000008111a21282c2f3032343d4347494a4a4a4a4a4a4a53606c7985929fabb8c5d2dee3d7cbbfb4aa988b7f7265584c4a4a4a4a4a515d677783909daab6c3d0dde7dcd1c1b5a89b8e827568574d4a4a4a4a4a4a4a4a4a4a4947433d342b20160a0000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c000916222f3c4955626f7c8895a9a7a7a7a7a7a7a7a7a7a7a7a196877a6d61564d48474b55616e7b879aa4afbbc8d4e0ede3d7ccc0b5a194877a6e6154473b2e21140800121f2c3945525f6c7885898989898989898989898989898989897e71645a5049484a525d6874818e9ba7b4c1cedae7e9ddd0c3b6aa9d9083776a5d5044372a1d11000000000000000c1825323f4b5865727e8b98a5b1becbd8e4f1fdf3e9dfd7cfcac6c5bbbababababababababababac5c6c9cfd6dfe8f3f9eee4dbd2cbc5c2c1babab3a6998c807366594d4033261a0d000004101c2934404b5564717e8b99a4afbbc7d4e0edebe0d3c7bbb0a69e91847a6d675e565050555759595959595959595959545c606d78829098a2aebac6d3dfe1d6cabeb3a996897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568606d7985929eabb8c4cfdad5cbc2b9b1aba9abb1b9c2cdd8d1c5b8aca095887b6e626673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275727f8b96a0acb9c2cddce5ebded1c5b8aca0958c7f72685e52463c32231c140c0400000000000000000000000000020a1117222a323a424a505a616a6f7a838e939ca4aeb5bdc5ced6d6cfc7c0bbb0a7a09791867d716c615a50483e352f2f2f2f2f2f2e2b2620181006000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000000000a141e2830383e4143464646464646464646464646464646464544403a332b21170c01000000000000000000000000000000000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d39342d241b11080000000000000006111b242d34393d3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d39342d241b100600000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000810161c202327323d464e545657575757575757575b6576828f9ca9b5c2cfdce7dcd1c1b5a89b8e8175685657575757575757556774818d9aa7b4c0d0dbe7ded1c4b8ab9e918478695e575757575757575757575756544e463d32271b0f0300091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c000a1723303d4a5663707d89969a9a9a9a9a9a9a9a9a9a9a9a9a918478685e52443b3a4653606d7986939facb9c6d2dfece0d4c8bbafa49a877a6d6054473a2d21140700091623303c4956636f7d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c796d6054473e3b414c5664717e8b97a4b1becad7e4ebded1c4b8ab9e9184786b5e5245382b1f12000000000000000c1825323f4b5865727e8b98a5b1becbd8e7f3f7ece1d7cdc5beb9b8aeadadadadadadadadadadadb8b9bec5cdd6e1ecf3e7ddd2c9c0bab5b4adadada6998c807366594d4033261a0d000006131f2c3845515c6775828f9babb5c0ccd7e3f0e5dacec3b7ab9f94897d70685e554c505a616466666666666666666666666666666e7b86929facb8c5d2dfe6dbcfbcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756863707d8997a1adb9c6d6d9cdc3b9b1a79f9d9fa7b1bcc7d3d4c8bcb1a7998c8073666673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757985919ea8b2bdcbd4dfece0d4c8bcb1a79d9184786d60564c423b342e261e160e05000000000000000000000000000006101820282f383f4450585f686e79818c929fa3abb3bcc5cdd6d9d1cbc1b9b1a9a19892877e716c615a50473e342b22222222211f1b150e0600000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000000000000000005101b26303a42494e505353535353535353535353535353535352504c453d33291e130700000000000000000000000000000000000000000000000000000000000000000000000009131b23292e31323232323232323232323232323232323231302d29221b120900000000000000000009121b22292d30313232323232323232323232323232323231302d28221b12090000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000000000000050b10141f2b37434e5860626363636363636363636673808c99a6b3bfccd9e6ded1c4b7ab9e9184786863636363636363636364717e8a97aab4bfcad6e2dfd2c5b9ada196877b6e6363636363636363636363636260584e43372b1f130600091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c000b1724313e4a5764717e8a8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d83776a564c41343a4653606d7986939facb9c6d2dfecdfd2c6b9ac9f9386796c605346392d201306000915222f3b4854606b6f707070707070707070707070707070706d675d514539303c4956626f7c8995a2afbcc8d5e2ebded2c5b8ab9f9285786c5f5245392c1f12000000000000000c1825323f4b5865727e8b98a5b1beccd6e1ebf2e6dbcfc5bbb3adaba1a1a1a1a1a1a1a1a1a1a1a1abadb3bbc5cfdae6eee2d6cbc0b7afa9a7a1a1a1a1998c807366594d4033261a0d00000714202d3a4753606d7985929facb8c5d2dde8ede1d5c9bdb2a89c8f82766b61564c4955616c71737373737373737373737373737373737f8c99a6b2bfccd9e2d6c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686674818e9aa9b3bec9d5d4c8bcb1a79f9590959fabb7c3ced9cec3b7aa9d9184776a6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaded1c4b7ab9e918481828f97a1adbac3cedde6eaddd1c4b8ab9f95897d70665f57524d443f38302820170f050000000000000000000000000000060d161d262d333e464e565e676d75808b9299a2a9b3bbc4ccd5dcd7cbc3bbb2aaa29992877e716c61594f463d33291f151515120f0a040000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000915212d38424c545a5c606060606060606060606060606060605e5c574f453a2f24180c000000000000000000000000000000000000000000000000000000000000000000000000010911181e222425262626262626262626262626262626262524211d17110900000000000000000000000911171d212425262626262626262626262626262626262524211d171009000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000815222e3b4754606a6f70707070707070707070707d8996a3b0bcc9d6e3ded2c5b9aca196877a7070707070707070707070707b8898a2aebac7d3e0e1d5c9bdb2a8978a7d717070707070707070707070706f6a6054473b2e22150800091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00091623303c4956636f7d818181818181818181818181818181817f7266594c3f3f444a54616e7b879aa4afbbc8d4e0ebded1c5b8ab9e928578665b5044382b1f1206000713202c38444f59606363636363636363636363636363636363605d554c41352e3b4855616e7b8894a1aebbc7d4e1ecdfd2c5b9ac9f9286796c5f5346392c2013000000000000000c1825323f4b5865727e8b98a5afbac4cfd9e3eee2d6cabeb3a9a29e9594949494949494949494949ea1a9b3bec9d5e2eaded1c5baafa59d9a94949494948c807366594d4033261a0d00000916232f3c4956626f7c8998a2aebac6d3e3eeebded2c5b9aca196897d7063594f444b5764717e80808080808080808080808080808080808d9aa7b3c0cddae2d6c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686d7985929eabb8c5cfdad1c4b8aca0959083909da8b2bdc8d4d1c5b8aca096887c6f6673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebded2c5b9aca196918d8f949fa9b3beccd5e0efe9ddd0c3b6aa9d908378736e69615e57504a423a322921170d040000000000000000000000000000040b141c2228343c444c555c606e737e879297a1a9b2bac4ccd5ddd5cdc4bcb4aba39992877e706c61584e453b31271d1207060300000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000d1926323e49545e66696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6861574c4034281b0f0300000000000000000000000000000000000000000000000000000000000000000000000000060d1216181919191919191919191919191919191919181715110c0600000000000000000000000000060c1115171819191919191919191919191919191919181715110c0600000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c7d7d7d7d7d7d7d7d7d7d7d7e8a97a4b1bdcad7e4e1d5c9bdb2a8998c7f7d7d7d7d7d7d7d7d7d7d7d7d7d86929facb8c5d2dfe5dacfc1b5a89b8e817d7d7d7d7d7d7d7d7d7d7d7d7d7c6f6256493c2f23160900091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c000915222f3b4854606b6f74747474747474747474747474747474726d63574b4c4a50545c66717e8b98acb6c0ccd8e4eadccfc2b5a99c8f827669544a3f33281c0f03000814202b36414b53595b5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b59534b42322e3b4855616e7b8894a1aebbc7d4e1ebdfd2c5b8ac9f9285796c5f5246392c1f13000000000000000a1723303d4a5663707d89939da8b2bdc7d1dce8dfd2c6b9ada297928887878787878787878787879297a1adb9c6d2dfe8dbcec2b5a99d938e878787878787807366594d4033261a0d00000b1825323e4b5865717e8b98aab4bfcad6e2f5eaded1c4b7ab9e9184786c605346424f5c6875828c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8d929da9b5c1cedae2d6c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568707d8a97a2adb9c6d6d6cbbfb4aa9d90837c8996a0acb8c7d1d4c8bdb2a8998d80736673808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebede1d5c9bdb2a8a19e9a9c9fa6b0bbc4cfdee7f1eaddd1c4b8ab9f959084807b756e69605c544c443b33291f160c020000000000000000000000000000020a1117222a323b434b515b636c717d859297a1a8b2bac4ccd6dfd6cec6bdb5aba39992877e706a60574d43392f241810060000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000020f1c2835414e5a667076797979797979797979797979797979797873685c5044372b1e110500000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a0805000000000000000000000000000000000005080a0b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a0805000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828a8a8a8a8a8a8a8a8a8a8a8a909aa6b2bfcbd8e5e5dacec4b4a89c918c8a8a8a8a8a8a8a8a8a8a8a8a8a9298a2aebac7d3e0e8dccfc2b6aa9e938e8a8a8a8a8a8a8a8a8a8a8a8a8a8276695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0007131f2c38434f5960636767676767676767676767676767676766635b575858545c60666d7883919daab7c4d2dde8e0d4c8bcb1a7998c807366594d402d22170b00000b1824303c48535d64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53443b363c4956626f7c8995a2afbcc8d5e2ebded1c4b8ab9e9185786b5e5245382b1f12000000000000000916222f3c4854606b74818e96a0abb5c0cbd7e0ded1c5b8ab9e92857b7a7a7a7a7a7a7a7a7a7a7a85929eabb8c5d1dee7dacdc1b4a79a8e817a7a7a7a7a7a7a6d6053473a2d20140700010e1a2734414d5a6774808d9aa7b3c0d0dbe7f3e7dacdc0b4a79a8d8074655b5044424f5c6875828f9999999999999999999999999999999a9da4aeb9c5d1dde2d6c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756774818e9ba9b3becad6d3c7baaea3988b7f7784919dabb5c0cbd7cec3b7ab9e9184786a73808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf1e5dacec4bab2acaba7a9abb0b8c2cdd6e1f0f4ece0d4c8bcb1a79f96918d87817b736d665d564d453b31281e140a00000000000000000000000000000000061019202931394045525a626b707c859196a0a8b2bac4ccd6e0d7cfc7bdb5aba39992867c6f695e554b40352922180b0200000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976828686868686868686868686868686868685786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f96969696969696969696979aa2acb7c3cedbe7ebe0d0c4b8ada49c99969696969696969696969696969fa2aab4bfcad6e2ebded2c6baafa59e9b9696969696969696969696968f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00030f1b27323d474f54565a5a5a5a5a5a5a5a5a5a5a5a5a5a585f62646464656567666d7078818e95a0acb8c5d1e4e2d8cec6b8aca095897c6f6256493c2f23160600000e1a2733404c59646f7479797979797979797979797979797979756f65564d4441464e5865717e8b98a4b1becbd7e4eaddd0c4b7aa9d9184776a5e5144372b1e11000000000000000714202c38444f59606d79849199a3afbbc3ced8dfd2c6b9ada2978e81746e6e6e6e6e6e6e6e6e7885919eabb8c4d1dee6dacdc0b3a79a8d80746e6e6e6e6e6d675d5145392c2013060003101d293643505c6976838f9ca9b6c2cfdce9efe3d7cbc0b5ab978a7d716453493f424f5c6875828f9ba6a6a6a6a6a6a6a6a6a6a6a6a6a6a7a9aeb6c0cbd6e1e2d6c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756d7985929fabb8c5cfdbd2c5b8ac9f92867a727f8c99a3afbbc7d4d2c5b9aca196897c6f73808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf6ebe0d6ccc4bdb9b7b4b5b7bbc2cad4dfe8e6e7eae4d8cdc3b9b1a8a19e9a938e8680786d685e574d433a30261c110600000000000000000000000000000000070e171f272f3440485059606a6f7b849196a0a8b2bac4ced7e1d9cfc7bdb5aba39891857b6e675d51453f342a1d140a00000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f93939393939393939393939393939185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607080a0b0b0c0c0c0b0b090807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca3a3a3a3a3a3a3a3a3a4a6acb4bec8d3dfebece1d5cabfb6ada8a6a3a3a3a3a3a3a3a3a3a3a3a3a3acaeb4bcc6d0dbe7eee2d7ccc1b7afaaa8a3a3a3a3a3a3a3a3a3a3a39c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000a16212b343d4348494e4e4e4e4e4e4e4e4e4e4e4e4e535f6a6f71717171727375797d838e939da7b1bcc8d4e0d8d0c6bcb1a79d9184776a6054473b2e22150800000e1b2834414e5b677481868686868686868686868686868686868175695e55504c5257606a75828f9ca8b5c2cfdbe8e8dccfc2b5a99c8f8276695c4f4336291c100000000000000004101c27333d45515d676f7d87929fa7b1bcc6d0dbd6cabeb3a99d93897d70676161616161616b7885919eabb8c4d1dee6dacdc0b3a79a8d80746761616161605d554b4035291d11040005121e2b3845515e6b7884919eabb7c4d1deeaede0d4c7bbafa399887b6e6155483b424f5c6875828f9ba8b3b3b3b3b3b3b3b3b3b3b3b3b3b3b5b9c0c8d2dce7e2d6c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275707d8a98a2aebac6d7d5c9bdb2a89b8e81756e7b86929facb9c5cfd5c9bdb2a89a8d807373808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f2e8ded6cec9c5c4c0c2c3c7ccd4d8d8d8d9dbdededfd4cbc3bab2adaca49f98928c827a6e695e564c42382e23170b0200000000000000000000000000000000050d151d2329363e474f585f696e7b849196a1a8b2bcc5cfd9e1d9cfc6bdb4aaa1979083796d605b51463c2f261b1106000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9c9f9f9f9f9f9f9f9f9f9f9f9f9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507060b10121315161718191918181716151312100c070705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b0b0b0b0b0b0b0b0b1b2b7bec6d0dae5f0f1e6dbd1c8bfb8b4b2b0b0b0b0b0b0b0b0b0b0b0b0b0b8babfc6ced8e2edf3e8ddd3c9c1bab6b5b0b0b0b0b0b0b0b0b0b0a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000040f19222b32383b3c4141414141414141414141414855626f7c7e7e7e7e7f8082858990959da5afb9c3ced9d7cec6beb4aaa0958b7e7165584e43372b1f130600000e1b2835414e5b6874818e929292929292929292929292929292867b6e67605c565e61696f7c87939facb9c6d2dfece7dacdc0b4a79a8d8174675a4e4134271b0e00000000000000000b16212935414b55606b73808c959faab4bfcad6dbcfc5bbafa59e9184796d60595454545e6b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a54545453514b433a2f24180d010005121f2b3744505b657885929fabb8c5d2deebecdfd2c5b9ac9f9286796d6053463a424f5c6875828f9ba8b5bfbfbfbfbfbfbfbfbfbfbfbfc0c1c5cbd2dae4e2e2d6c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827575818e9baab3becad6d2c5b9aca096897d706976828f9ca9b3becad6cec4b8ab9e91847873808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f9efe7dfd9d4d1d0cbcbcbcbcbcbcbcbccccced1d2d5dad4ccc4bdb9b6afaaa39f948f847b6e685d544a3f34281f14080000000000000000000000000000000000030b1218242d353d464e575f696e7b849196a1aab3bdc7d1dce1d8cfc6bcb2a99f958e81756d62584e41382d22170b010000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9acacacacacacacacacacab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000205090e121415171c1f202223242525262525242322201f1c181514120e0905020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5bdbdbdbdbdbdbdbdbfc3c8d0d8e2ecf6f8ede3dad1cac4c0bfbdbdbdbdbdbdbdbdbdbdbdbdbdc5c7cad0d8e0eaf4faefe5dbd3ccc6c2c1bdbdbdbdbdbdbdbdbdb6a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000007101921272c2f303434343434343434343434404c5966737f8a8a8a8b8b8d8f92979d9fa7afb7c1cbd6d1cbc4bcb4aca2989083786c6053463d32271b0f0300000e1b2835414e5b6874818e9b9f9f9f9f9f9f9f9f9f9f9f9f9f98908279706d666a686d727b84919aa4afbbc8d4e0ede1d5c9beb3a9988b7e7265584b3f3225180c0000000000000000050d18242f3a434f59606d78839098a2aebac1cdd7d7cdc0b9aca1968d81746b60554b525e6b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d47474745403a31281d130700000613202d394653606c7986939facb9c6d2dfecebded1c4b8ab9e918578665c504438424f5c6875828f9ba8b5c2cccccccccccccccccccccccdced1d6d5d5d5d5d5d5c9bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757985929facb8c5d0d7ccc0b5ab9e9184786c64717e8a97a2adb9c6d2d2c5b9ada196897c73808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f1e7ddd5cec8c5c3bfbfbfbfbfbfbfbfbfc0c1c4c5c9ced5d6cfc9c7c0bbb4aea69f9690837a6d665c50443b3025190e0100000000000000000000000000000000000107121b232b343c454d575e696e7b849198a2abb5c0cbd7dde1d8cec4bbb1a79e938b7f726a5f53493f33271d12070000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6b9b9b9b9b9b9b9b9b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000002090e11141a1e202123282b2d2e3031323232323231302e2d2c282321201e1a14110e0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5c2c9c9c9c9c9c9cacbced3dae2eaf4fefff5ece3dbd5d0cdccc9c9c9c9c9c9c9c9c9c9c9c9c9d2d3d6dbe2eaf2fcfff7ede5ddd7d2cfcec9c9c9c9c9c9c9c9c2b6a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000000070f161b1f22232727272727272727272733404c5966737f8c979798989a9c9ea2a9abb1b9c1c9d0cac7c0bbb2aaa39a92867c6f665b5044382b20150a0000000e1b2835414e5b6874818e9ba7acacacacacacacacacacacaa9f9490837d797776777a7f859196a0acb6c0ccd8e4ebdfd2c6b9ada197887c6e6255483b2f22150800000000000000000007131d28313d44515c666e7b86929fa6b0bbc5cfdad5c9bdb2a89f93887d70675d51525e6b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d413b3a39352f281f160c0100000714212d3a4754606d7a879aa4afbbc8d4e0edeaddd0c4b7aa9d9184776a544a3f34424f5c6875828f9ba8b5c2c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8bcafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757e8a98a2aebac6d3d4c7bbafa4998c7f7365606d7985929eabb8c3ced5c9bdb2a89a8d8174808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf5eadfd5cbc3bcb8b7b2b2b2b2b2b2b2b2b2b3b4b7b9bdc4c9ced6d5d2ccc6bfbab0a8a0958f82786d60564d41362a1e130800000000000000000000000000000000000000091119222a333c454d575f696f7c869299a3afbbc0cbd5e1e0d6cdc3b9afa59f92867c6f655b5044392f24180c0000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2c6c6c6c6c6c6c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000040a0f14191e20252a2d2e2e34383a3b3d3e3e3f3f3f3e3e3c3b3a38342e2e2d2a25201e1a140f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5c2cfd6d6d6d6d6d7d8dbdfe5ecf4fdfffffef5ede6e1dcdad9d6d6d6d6d6d6d6d6d6d6d6d6d6dfe0e2e7edf4fcfffffff7efe8e2dedcdbd6d6d6d6d6d6d6cfc2b6a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000040a0f1315161b1b1b1b1b1b1b1b1b2633404c5966737f8c99a4a4a5a6a8abadb3b8bcc3cbcec5bebab5afa8a19892887e706a5f544a3f3328190f040000000e1b2835414e5b6874818e9ba7b4b9b9b9b9b9b9b9b9b9b9b0a69f95918a85848384878b9297a0a8b2bec7d2dde8eaded1c4b8ab9e9185786a5f53473a2e211408000000000000000000010c161f2834404a545f69727f8b949ea9b3bec9d5dacec4bbafa49a9184796d60594f5e6b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d41342d2c29241d160d040000000814212e3b4754616e7a8794a1b6c0ccd8e4f0e9ddd0c3b6aa9d9083776a5d50442e424f5c6875828f9ba8b5bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275828f9baab4bfcad6d2c6b9ac9f93877b6e615c6774818d9aa7b1bcc8d4cfc4b8ab9e928578808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf0e5d9cec3b9b1acaaa5a5a5a5a5a5a5a5a5a6a8abacb2b9bdc4ccd5ddd8d0cbc2bab1a79f948b7f72685e52463a2f24190d0100000000000000000000000000000000000000071018212a333b454d575f6a707d87929fa5afb9c3cfd8e2dfd4cbc1baaea3989083776c60554b4035291c110600000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfd2d2d2d2d1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000000000000000000000000000000000003090e151b1f252a2d30363a3b3e3f444648494a4b4c4c4b4b4a49484644403e3b3a36302d2a251f1b150e09030000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5c2cfdbe3e3e3e3e4e8e8e8eaebedf1f6fcfffff8f1ece9e6e5e3e3e3e3e3e3e3e3e3e3e3e3e3e8e8e8eaebedf0f6fcfffffaf3eeebe8e8e3e3e3e3e3e3dccfc2b6a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000000000000030709090e0e0e0e0e0e0e0e192633404c5966737f8c99a6b1b2b3b5b8b9bec5c8cdd0c5bcb3adaba39f9691867e716c61584e42382d221707000000000e1b2835414e5b6874818e9ba7b4c1c5c5c5c5c5c5c5c5c2b8b0a7a09d9892909091939a9ea1a9b2bac4d0d9e4eae1d4c8bcb1a79a8d817467584e43372b1f120600000000000000000000040d18232e39424d57626d75828f97a1adb9c0ccd5d8ccc0b6aca0968d80746b60555e6b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d413427201d18130c04000000000814212e3b4754616e7a8794abb5bfcbd7e3efeaddd0c4b7aa9d9184776a5e514430424f5c6875828f9ba8afafafafafafafafafafafafafafafafafafafafafafafafafafa396897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827986929facb8c5d0d5c9beb3a99c8f8276695e55626f7c8895a0acb8c6d1d2c6b9ada197897d808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebede0d4c8bcb1a7a09d989898989898989899999b9ea1a8acb2bac3ccd5dfdcd6ccc3b9b0a69f92857b6e61554c4135291d11040000000000000000000000000000000000000000060f182129333b454e58606b717e8b939da7b1bdc6d1dce7ddd6cbbfb4aa9f958b7e71675d5145382e23170c00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdcdfdfded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000000000060b141a20262b30363a3b4246484b4a5053555657585859585857565553514a4b4846423b3a36302b26201a140b0600000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5c2cfdbdcdcdcdcdcdcdcdcdedee1e5ebf2fafffffdfbf3ece7e2dfdedcdcdcdcdcdcdcdcdcdcdcdcdcdddee0e5eaf1f9fffffffaf7f0e9e3dfdddcdcdcdccfc2b6a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000010101010101010d192633404c5966737f8c99a6b2bec0c2c5c6cacfd4d6cabeb3a9a29f99928d847c716c615a50463c2f261c1106000000000e1b2835414e5b6874818e9ba7b4c1ced2d2d2d2d2d2d2cac2b9b1acaaa29f9d9d9e9fa4acadb3bbc4ccd6e2ebe2d8cfc6b8aca095897c6f6356493c31261a0f02000000000000000000000007121c27303c45515b616e7a85929ea5afbac4cfd9d2c7beb2a89f93887d6f675d5e6b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a110d070100000000000714202d3a4753606d7a8699a3aebbc7d3e0edebded1c4b8ab9e9185786b564c4136424f5c6875828f9ba2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a296897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827e8b98a3aebac7d3d2c6b9ada1978a7d71645754606a7783909dabb5bfcbd5c9beb3a99a8e81808d99a6b3c0ccd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaded1c5b8aca095908c8c8c8c8c8c8c8c8c8d8e91969ea0a8b2bac3ced9e5ded5cbc2baaea2988d8174675d5145392c2013060000000000000000010407070b0b0b0b0b0b0b0b0b0b0f172129333c464f59626d74818e95a0abb4bfcbd7dfe7dcd0c6bcb1a79e9185796d60544a3f34281c1003000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000000000000000000000000020a11171f262a32373b4246474d525458545c606163646565656565646361605c545854524d4746423b37322a261f17110a020000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5c2cfcfcfcfcfcfcfcfcfcfd1d2d5dae0e8f0fafffbf2e9e2dbd6d3d2cfcfcfcfcfcfcfcfcfcfcfcfcfd0d1d4d9dfe7f0f9fffff7eee6ded8d3d0cfcfcfcfcfc2b6a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000d192633404c5966737f8c99a6b2bfcccfd1d2d6dbdfd3c6baada297928d8780796f6a615a50483e342a1d140a00000000000e1b2835414e5b6874818e9ba7b4c1cedadfdfdfdfdfdfd4cbc3bcb8b4aeacaaa9aaacafb6b9bec5cdd6dee7e7dcd1c6bdb1a79d9184776b6054483b2f20150a000000000000000000000000000b151e2a333f46525e68707d8a939da8b2bdc7d1d9d0c4bbafa49a9184796d60586b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000006131f2c3845515d677986929facb9c5d2dfececdfd2c5b9ac9f928679685e524639424f5c6875828f959595959595959595959595959595959595959595959595959595959595897c706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82828f9caab4bfcbd6d1c5b8ab9e9285796d60534e5865727f8c99a3aebbc7d3cfc5b8ab9e9285808d9aa6b3c0cdd9e6ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaddd0c3b7aa9d90837f7f7f7f7f7f7f7f7f8081848a9196a0a8b2bdc8d4dfe7ddd6cabeb3aa9f92867a6d6054473a2d22170b00000000000001080d11131418181818181818181818181818212a343d47505a606d79839099a3aebac3ced9e5e2d8cec2b9ada1978c7f72665c5044382c1f1307000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000060b141b222731363c43474d5254575e616567666d6e70717172727271716f6e6d666865615e5754524d47433c363128231c140c0500000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5c2c2c2c2c2c2c2c2c2c2c2c4c5c9ced6dee8f2fcf3e9e0d7d0cac6c5c2c2c2c2c2c2c2c2c2c2c2c2c2c4c5c8ced5dee7f1fcfaf0e6dcd4ccc7c3c2c2c2c2c2c2b6a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000d192633404c5966737f8c99a6b2bfccd9dedfe2e6ded2c5b8ab9f9285807b736d67605850483e362c22180b0200000000000e1b2835414e5b6874818e9ba7b4c1cedae7ecece5ded7d3d0cec8c6bfbab8b7b6b7b9bbc0c7cacfd7dfe7e3dcd7cbbfb4aba0958a7e7164594f43382c1f0e0300000000000000000000000000030c18212a36414c56616c74818e96a0abb5c0cbd7d8ccc0b6aca0968d80736a606b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000004101d2935404b556b7885929eabb8c5d1deebece0d3c7baaea399877a6d6154473a424f5c68758288888888888888888888888888888888888888888888888888888888888888887d706356493d3023160a00131f2c3946525f6c7985929facb8c5d2dfebe9dccfc3b6a99c908287929facb9c5d0d4c8bcb1a79a8d8073665c514754616d7a86929facb9c5cfd2c6b9ada2979084909daab7c3d0ddeaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827572727272727272727375787d849196a0acb8c2cdd8e4e6dbd0c5baaea2988b7e7265544a3f33281c0f0300000000040c13191d20212424242424242424242424242424242b353f45515d676e7b86929fa8b1bdc8d4e0eae0d5c9beb3a99e9184796d6053463a2f24180d010000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000000000000000000000000070f181d262d333b42464e54565e6166696e717477797b7c7d7e7f7f7e7e7d7c7b797774716e6966615e57544e46423b342e261e170f07000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8b5b5b5b5b5b5b5b5b5b5b5b5b7b9bdc4ccd6e0ebf6ece2d7cec5bebab8b5b5b5b5b5b5b5b5b5b5b5b5b5b7b8bcc3ccd5dfeaf6f4e9ded4cac2bbb7b5b5b5b5b5b5b5a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000d192633404c5966737f8c99a6b2bfccd8dddfe0e4d9ccc0b3a6998d8079736d665f574f473e362c241a10070000000000000e1b2835414e5b6874818e9ba7b4c1cedae7efe5dcd3ccc7c3c2c5c7cac6c5c3c3c4c6c8ccd2d6dae1e4e0d8d1cbc0baaea3999083786c6053463d32271b0f000000000000000000000000000000060f1925303b44505a606d79849199a3afbbc2ced8d2c7beb2a89f93877c6f676b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000c18242f44515e6a7784919daab7c4d0ddeaefe3d7cbbfb4ab978a7d7064574a3d3b4855616e7b7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c796d6053473a2d20140700131f2c3946525f6c7985929facb8c5d2dfebecdfd2c5b9ac9f92869299a3aebbc7d3d1c4b8ab9f95887b6f62544b46525e6875828f9ba9b3bec9d5cabeb3a9a0959095a0acb8c5d1deeaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686565656565656666656c707a84919da7b1bcc8d4e0ece1d6cabfb4aa9c8f8276665b5044382b1f1206000000040d161e24292c2d313131313131313131313131313131313135404b555f6a737f8c95a0acb8c4cedae5e6dacfc4b9ada1978a7d7064554b4135291d11040000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000000000000000000081119212a2f383f444d53585f62696e72777b7e81848688898a8b8b8c8b8b8a89888683817e7b77726e69625f58534d443f383029211910080000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca8a9a9a9a9a9a9a9a9a9a9a9a9abacb2bac4cedae5f1e7dbd0c5bcb4aeaba9a9a9a9a9a9a9a9a9a9a9a9a9aaacb1b9c3ced9e5f0efe3d8ccc2b8b0aba9a9a9a9a9a9a9a99c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000d192633404c5966737f8c99a6b2bfc8ccd2d2d4d8ddcdc1b4a89c928d857f796e6a60594f463d33291f14090000000000000e1b2835414e5b6874818e9ba7b4c1cedae7e9ded3cac1bbb7b5b9babfc6cfd0d0d1d2d4d8dde0dfddd8d4cfc6bfbbaea49f92867c6f655b5044372b21160a0000000000000000000000000000000008141e29323e45515d676f7c87929fa7b1bcc6d0d9d0c3bbafa4999183796d6b7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000000071c2935424f5c6875828f9ba8b5c2cedbe8f3e7dcd1c0b3a6998d807366594f433a46535f696e6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6d675d5145392c20130600131f2c3946525f6c7985929facb8c5d2dfebede0d4c7bbafa3999299a3abb5bfcbd6cabfb4aa9d9083766a5f5342414c5664707d8a97a1adb9c6d2cfc5bbb1a7a09da0a7b1bcc8d4e0edede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c595959595959535b60686f7c89959fabb8c4d1ddeae7dbd0c5b8ab9f9285786c605346392d2013060000010c1620282f35393a3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3c39434e57606d7984919da8b2bdc9d5e1ebe1d5c9beb2a99c8f8275675d5145392c2013060000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000000000000000009121a232b333c414950575f616a6f757b7f83878b8e9092999697989898989897969992908e8b87837f7b756f6a615f57504a423b332b221a120800000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9c9c9c9c9c9c9c9c9c9c9c9c9c9c9ea1a8b2bdc9d5e1ede2d6cabeb4aaa29f9c9c9c9c9c9c9c9c9c9c9c9c9c9da0a7b1bcc8d4e0edecdfd3c7bbb0a69f9c9c9c9c9c9c9c9c9c8f8376695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000010404040404040d192633404c5966737f8c99a6b2b9bbc0c2c6c8ccd2d0c5b9aea49c98928c837c706b60584e453b31251a0e0500000000000e1b2835414e5b6874818e9ba7b4c1cedae7e3d7ccc1b8b0aaa8acaeb4bdc4c9ced2d3d6dbd8d4d2d2ccc8c2bdb5aea49d928c7f726a5f53493f3327190f0400000000000000000000000000000000020d17202935404b55606a73808c959faab4bfcad6d7ccc0b5aba0958d80736a7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000d1a2633404d596673808c99a6b3bfcedae5f1e9ddd0c3b6aa9d9083776b6054483d424d575f616262626262626262626262626262626262626262626262626262626262626262605d554b4035291d110400131f2c3946525f6c7985929facb8c5d2dfebefe3d7cbc0b5aba39fa3abb5bdc6d1d3c6baaea2988b7e7165584e433a4653606d7985929eabb8c3cdd7cdc3b9b1acaaacb1b9c3ced9e4f0ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4c4c4c4c4c495056606a7683909da9b6c3d0dce9ecdfd3c6baaea298887c6f6255483c2f221509000008131e28323a4145474b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a49443e45515c66717e8a96a1acb9c5d2deebe6dacfc4b9ac9f92867a6d6054473a2d2114070000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000009121b242c353d454d535b60696e757c81868c9095989a9d9fa3aba4a4a5a5a5a4a4aba39f9d9b9895908c87817c756e69605c544d453d342c241a1208000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f8f8f8f8f8f8f8f8f8f8f8f8f8f8f9196a1acb9c5d2deebdfd3c6baaea298928f8f8f8f8f8f8f8f8f8f8f8f8f9195a0acb8c5d1deebe9ddd0c3b7ab9f948f8f8f8f8f8f8f8f8f8f8276695c504336291d1000091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000002070b0d0d11111111111111192633404c5966737f8c99a6acacafb6b5b9bbc0c7d0cac0b6aeaaa29f9591857d706a60574d42362a22170b00000000000e1b2835414e5b6874818e9ba7b4c1cedae7dfd3c7bbb0a69e9c9fa3abb2b9bdc3c5c6cad0ccc8c6c4c0bbb9b0aba39f928d80746d62584e41382d221707000000000000000000000000000000000000050e18242f3a434e58606d78839098a2aebac1cdd6d2c7bdb1a79f92877c6f7885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000b1724313e4a5764717d8a97a8b2bdc9d5e1edeaded1c4b8aca095897c6f63584e433b454d5355555555555555555555555555565858585858585858585858585858585858585653514b433a2f24180d0100131f2c3946525f6c7985929facb8c5d2dfebf4e8dcd1c7bdb5afacafb5bdc6cfd8d2c5b8ac9f92867a6d6054473c3844515c6673808d9aa7b1bcc8d4d5cbc3bcb8b7b8bcc3cbd5dfeaf5ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423f3f3f3f3f444e586773808d9aa6b3c0cdd9e6eee2d6cabeb4aa978a7e7164574a3e3124170b00010d19242f3a444c52545757575757575757575757575757575757554f47404b54606d7884919eabb7c4cfdae5ebe0d3c7baaea3988a7d7064574a3d312417080000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000000000000000008111b242d363e474f575f656c727b82878e92999da0a7a7aaacaeb5b0b1b2b2b1b1b0b4aeacaaa7a7a09d99938e88827b736d665e574f463e362c241a11080000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000d1a2633404d5966738082828282828282828282828282828284919eabb7c4d1dce7ded2c5b8ab9f92868282828282828282828282828283919daab7c4ced9e5e8dccfc2b5a99c8f828282828282828282828073665a4d4033271a0d00091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c000000000000080e1317191a1e1e1e1e1e1e1e1e2633404c5966737f8c999f9f9fa4aca8acafb6bec4ccc8c0bcb3aea7a09792867c6f695e53463e33281c1003000000000e1b2835414e5b6874818e9ba7b4c1cedae7dcd0c3b7aa9e948f9299a0a8acb2b6b8babfbbc0bbb9b7b6afaca69f99928b80776c605b51463c2f261b11060000000000000000000000000000000000000007131d28313d44505c666e7b86929fa6b0bbc5cfd9d0c3bbafa3999083797885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000815222f3b4855626e7b8896a1acb9c5d2deebece0d4c8bcb1a79b8e81756a60554b423b4246484949494949494949494f5960636565656565656565656565656565656565656260584e43372b1d13070000131f2c3946525f6c7985929facb8c5d2dfebf9eee3d9cfc7c0bbb9bbc0c7cfd8d4c8bdb2a89b8e8174675d51453934404a54626f7c8895a0abb8c6d1dcd5cec8c5c3c5c8ced5dde7f1fbede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423532322d333f4c5865727f8b98a5b2becbd8e5f2e7dbd0beb1a4988b7e7165584b3e3225180b0004111d2935414c565d60646464646464646464646464646464646461594f4444505c66727f8c99a8b2bdc9d5e1eee3d7cbbfb4aa9a8d8073675a4d402f24190d0100131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000000000006101a232d373f48505960696e777f868e939a9fa3abacb1b4b7b9bbbfbdbebebfbebebdbfbab9b7b4b1acaba49f9b938f867f786e69605950483e362c23190f0600000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000c1925323f4b57636e737676767676767676767676767676767f8b98abb4bfcbd7e3ded2c5b8ab9f9285787676767676767676767676767d8a96a8b2bdc9d5e1e1d5c8bbaea295887c767676767676767676736e63584b3f3226190c00091623303c4956636f7c8996a2afbcc9d5e2efe3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2efe4d8cbbeb1a5988b7e7265584b3f3225180c00000000020a12191f2326272a2a2a2a2a2a2a2a2a33404c5966737f8c929292939a989c9fa4acb2bac4cecec5bebab1a9a29892857b6e615a5044392d1f1509000000000e1b2835414e5b6874818e9ba7b4c1cedae7dbcfc2b5a89c8f828691969ea0a8a9acaeb4aeb6afacaaaca49f9c9490877f746c655b50493f342a1d140a0000000000000000000000000000000000000000010c161f28343f4a545f69727e8b949ea9b3bec9d5d7cbc0b5aba0958c807885919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000814212e3a47535f6a7884919eabb7c4cfdbe6f0e4d9cdc3b9ac9f92877c6f675d544b423c3a3b3c3c3c3c3c3c3d454e57606b707272727272727272727272727272727272726f6a6054473b2e2215080000131f2c3946525f6c7985929facb8c5d2dfebf8f5ebe1d9d1cbc7c5c7cbd1d9ded1c5b8aca096897c6f63554b41352e3947535f6a7783909daab4bfcbd7dfd9d4d1d0d1d4d9dfe7eff9faede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235313131313f4c5865727f8b98a5b2becbd8e5f8e5d8ccbfb2a5998c7f7266594c3f3326190c000713202c3945525d686d71717171717171717171717171717171706c6155493f4a54626f7b8896a1adb9c5d2dfebe7dcd1c3b6a99c90837669554c4135291d110400131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000000000000040e18222c353f49515a616b707b828b92989fa4acafb5b8bcc1c3c5c7cbd1cbcbcbcbcbd1cbc7c5c3c1bcb8b5afaca59e98928c827b6f6b615a50483e352b21180c03000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000a16232f3b47525b636669696969696969696969696969696f7c8999a3aebac7d3e0dfd3c6baada297887b6e696969696969696969696d7a8796a0acb9c5d2dee4d7cbbeb1a4988b7e71696969696969696966635c52473b2f23170a00091623303c4956636f7c8996a2afbcc9d5e2e5e3d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5e2e5e4d8cbbeb1a5988b7e7265584b3f3225180c000000000a141c242a2f3334373737373737373737373f4c5966727f8685858686888b8f939aa0a8b2bcc6d0d0cac3bbb3aaa2978f82766c6155493c31261a0e020000000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e7c848b91969a9c9fa2aaa2a1a49f9e9b9a93908a837c726d605b53493f372d22180b02000000000000000000000000000000000000000000040d17232e38424d57626d75828f97a1adb9c0ccd5d1c7bdb1a79f92877c85919eabb8c4d1dee6dacdc0b3a79a8d8074675a4d4134271a0e01000000000000000006121e2b37424e576774808d9aa9b3becad6e2edeae0d4c7bbafa3999184796d665c544e47433f3d3c3c3d3e43474f575f6a707d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6256493c2f2316090000131f2c3946525f6c7985929facb8c5d2dfebf8fdf3ebe3dcd7d4d2d4d7dce3d7cbc0b5ab9d9184776b6054433a2f2b37434e5865727f8b98a3aebac7d3e0e4e0dedddee0e4eaf1f9fffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423d3d3d3e3e434e586673808d99a6b3c0ccd9e6f2e5d9ccbfb2a6998c7f7366594c403326190d000714212d3a4754606d7a7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7064574a3d47535f6a7884919eabb8c4d1deebebded1c5b8ab9e928578675d5145392c20130600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000000020c16202a343e47515b626c717d8590949fa2aaafb6bbc0c7c8cdd0d2d3d7dcd7d8d8d8d7dcd7d3d2d0cec8c7c0bbb9afaaa39f9490857d716c615a50473d33291e150b000000000000000000000000000000000000000000000000000407090a15212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000000000000000007131e2a3540495257595c5c5c5c5c5c5c5c5c5c5c5c5c606d7986929facb9c5d2dfe2d6cabeb3a9978b7e71645c5c5c5c5c5c5c5c5e687784919eaab7c4d1dde7dacdc1b4a79a8e817467555c5c5c5c5c5c5a58524a40352a1f130700091623303c4956636f7c8996a2afbcc9d5d8d8d8d6cabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9d5d8d8d8d8cbbeb1a5988b7e7265584b3f3225180c00000008121c262e363b3f4044444444444444444444444a57636d7279797979797b7e82879196a0aab4bfcad6d6cdc5bcb3a99f948a7d7164574d42372b1e12060000000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e71797f84898d9092989495949a93918e8c87837d766f6a625b504941382d251b1006000000000000000000000000000000000000000000000006111c26303c45515b616d7a85929ea5afbac3cfd9cfc3bbaea399908385929eabb8c5d1dee6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000000020e1a26313d495663707d8997a2adbac6d1dce7efe3d7cbc0b5aba0968e81786d665f58534e4b4a49494a4b4e545960696e7c868b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a7d7064574a3d3124170a0000131f2c3946525f6c7985929facb8c5d2dfebf8fffdf5eee8e3e0dfe0e3e8e0d3c7bbafa3998c7f7266594f44312826313c4754616d7a86929facb9c4cfdae6edeaeaeaedf0f5fbfffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4a4a4a4a4a4b4e555f6a7683909ca9b6c3cfdce9f1e5d8cbbeb2a5988b7f7265584c3f3225190c000815222e3b4855616e7b888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a85786b554c41434e586976838f9ca9b6c2cfdce9ecdfd2c6b9ada297877a6d6054473a2d21140700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000000000008131e28323c464f59626d727e8692979fa6aeb4bbc0c7cbd1d4d9dddfe0e3e7e4e5e5e4e4e7e3e0dfddd9d4d2ccc7c1bcb4aea69f9792867e716c61594f453b30271d120700000000000000000000000000000000000000000000050b101416171d212e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000020e19242e3740474b4d4f4f4f4f4f4f4f4f4f4f4f4f515c677783909daab6c3d0dde6dbd0c0b4a79a8d817467554b4f4f4f4f4f4c566875818e9ba8b4c1d1dce8ddd0c3b7aa9d908477675d514f4f4f4f4f4d4b4740382e24190e0200091623303c4956636f7c8996a2afbcc9cbcbcbcbcbcabdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcc9cbcbcbcbcbcbbeb1a5988b7e7265584b3f3225180c0000020e19242e3840474b4d515151515151515151515151515b63666c6c6c676d6e71757c849198a2aebac7d3dfd7cec5bbb0a69c8f8376695f53473a2d2114080000000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e716d72787c80838587888888878684817f7b76716c62605851443f382f261b130a000000000000000000000000000000000000000000000000000a151e2a333f46525e68707d8a939da8b2bdc7d1d7cbbfb5aba095909297a1adb9c6d2dfe6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000000000913202d3a4653606d7985929faab4bfcbd7e3ede8dcd1c7bdb2a89e938e81786e6a625f58585656565658585f626b707b84919898989898989898989898989898989895877a6d6154473a2e2114070000131f2c3946525f6c7985929facb8c5d2dfebf8fffffff9f4efedecedefecdfd2c5b9ac9f92867a6e6154473d3221202d3946525d6875828e9ba9b2bdc9d5e1eef7f6f7f9fcfffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c575757575757585860676f7c87939facb9c6d2dfecf0e4d8ccc0b6ac978b7e7164584b3e3125180b000714212d3a4754606d7a879897979797979797979797979797928578675d5145424e5b6875818e9ba8b4c1cedbe7eee2d6cabeb3a995887b6e6255483b2f22150800131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000000030c1925303a444e58616b727f889298a2a9b0babfc6ccd2d7dce3e4eae7e3e0dfdddcdcdddedfe2e6eceae4e3ddd7d4cec6bfbab0a9a19892877e706b60574d42392e23180c0400000000000000000000000000000000000000000810161c2023242a2a2e3b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000007121c252e353b3f404343434343434343434343404b556774818d9aa7b4c0d0dbdadad0c3b6aa9d908377675c5145434343434c5965727f8c98abb5c0cbd7dadad2c5b9ac9f92867a6d60534743434343403f3b352e261c12080000091623303c4956636f7c8996a2afbcbfbfbfbfbfbfbfbdb0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afbcbfbfbfbfbfbfbfbeb1a5988b7e7265584b3f3225180c000007131f2a36404a52585a5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5f5f555c6062656a6f7c86929facb8c5d2dfe0d7cdc2b7ab9f94887b6e6155483b2e2215080000000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e7165666c6f7376797a7b7b7b7a797775726e6964615a544e463f332d2d28211a1108000000000000000000000000000000000000000000000000030c18212a36414c56616c74818e96a0abb5c0cbd7d1c6bdb1a7a09d9ea1a9b3bec9d5e2e6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000006121f2c3844505c6673808d98a3aebac6d1dce7eee3d9cfc4baafa59e938e837c746e6a67656363626365676a6f757d859196a1aaa5a5a5a5a5a5a5a5a5a5a5a5ab9d908377685e5246392d2013070000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffcf9f8f9eee1d5c9beb3a99b8f8275685e5246392d201d2935414c5663707d8a96a1adb9c5d2dfe9f5fffffffffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686464646464646465666a6f7983909aa4afbbc8d4e0edede0d4c8bbafa49a897c6f6356493c30231609000613202c3945515d677986929fa4a4a4a4a4a4a4a4a4a4a4a297877a6d605447414e5b6774818e9aa7b4c1cddae7f2e6dbcfbbafa295887c6f6255493c2f22160900131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000000000b151e2935414c565f6a707d87939aa3aab3bbc2cad0d8dde4e8e6e1dfdcd7d3d2d0d0cfd0d2d3d6dbdde0e4eae8e3e0d8d0cbc2bbb3aaa39992877d70695f544b40342820150a0000000000000000000000000000000000000008111a21282c2f303636363b4854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000000000000000000000a131c242a2f3233363636363636363636362e3e4b5864717e8b97a9b3becacdcdcdcdc5b9ac9f9286796d6053463a36363c4956636f7c8999a3afbbc7cdcdcdcdc7bbafa399897c706356493d36363633322f2a241c140a000000091623303c4956636f7c8996a2afb2b2b2b2b2b2b2b2b2b0a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2afb2b2b2b2b2b2b2b2b2b1a5988b7e7265584b3f3225180c00000b17232f3b47525c64676a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a66635b515355585f6a75818e9ba8b4c1cedbe9dfd3c7bbb0a6988b7e7165584b3e3225180b0000000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e71655b60636769686d6e6f6e6d6d666865615e575550474343433d3c39332c231a1005000000000000000000000000000000000000000000000000060f1925303a444f59606d79849199a3afbbc2ced7cfc3b9b1acaaabadb3bbc5cfdae6e6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000003101c28343f4a54616e7a86929fabb5bfcbd7e2ebebe1d6ccc1b7afa59e959086817b777472706f6f707174777c81899197a1a8b2b2b2b2b2b2b2b2b2b2b2b2afa4998c7f7266564c41362a1d11050000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffffff8ebdfd2c6b9ada1978a7d7064564c41362a1e1924303a4653606d7984919eabb8c2cdd8e4f0fefffffffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827570707070707070717173767c839095a0acb6c0ccd8e4f0ecdfd2c6b9ac9f93867a6d6053473a2d2014070004111d2935414b556b7784919eaab1b1b1b1b1b1b1b1b1b3a995897c6f62554b424e586875828e9ba8b5c1cedbe8f7e2d5c8bcafa295897c6f6256493c2f23160900131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000000007121d27303946525e686f7c869299a4acb4bcc5cdd6dbe2e8e7e1dad5d2d1cbc7c5c4c3c3c3c5c6cad0d1d4d8dfe5eaeae2dcd6cdc5bcb4aba39992857b6e665c51453c31261b0f05000000000000000000000000000000000005101a232c33383c3d434343434854616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000010a12191e232526292929292929292929292f3b4855626e7b8897a2adbac0c0c0c0c0c0baaea399897c6f6256493c2f2d3a4753606d7a86929facb9c0c0c0c0c0c0c0b5ab988c7f7265594c3f3025292726231f19120a02000000091623303c4956636f7c8996a2a5a5a5a5a5a5a5a5a5a5a5a3978a7d7064574a3d3124170a091623303c4956636f7c8996a2a5a5a5a5a5a5a5a5a5a5a5a5988b7e7265584b3f3225180c00000d1926333f4b58646e7377777777777777777777777777777777726d635746484e5764717e8b97a4b1becad7e4e4d8cdc1b4a79a8e8174675b4e4134281b0e0100000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e71655853565a565d6161626161605c545954534d5050505050504a49443e352c21170b0000000000000000000000000000000000000000000000000008131e29323e45515d676f7c87929fa7b1bcc6d0d5cbc3bcb8b6b8b9bec5cdd7e1ece6dacdc0b3a79a8d8074675a4d4134271a0e01000000000000000000000c17232e3846525e6874818e99a3aebbc3d0d9e4eee7ded3c9c1b7afa79f99928e8884817e7d7c7c7d7e8084888e939ea1a9b2babebebebebebebebebebeb9ac9f93877b6e6155483b3025190d010000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffffff7ebded1c4b8ab9e9185796d6053463b302519131f2b3844505c6673808d99a7b1bcc7d4e2edf8fffffffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe9dcd0c3b6a99d90837d7d7d7d7d7d7d7d7d7e8083889095a0a7b1bec7d2dde8f2eaddd0c4b7aa9d918477675d5145392c20130600010d18242f424f5c6875828f9ba8b5bdbdbdbdbdbdbdbdb3a6998c8073675d524d54606a7784919eaab7c4d1ddeaeee2d5c8bbafa295887c6f6255493c2f22160900131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000c18232e39424f59616d7a849198a2abb5bec6cfd7dfe7eae2dcd7cfc9c6c4bfbab9b7b6b6b7b8babec3c4c8cdd4d9dfe7ede7dfd7cfc6bdb5aba2979083796d60584e43372b21160b00000000000000000000000000000000000b16212c353e44484a505050505054616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000000000000000000000000070e1316191a1c1c1c1c1c1c1c1c1c202d394653606c7985929fabb4b4b4b4b4b4b4b4b4ab988b7f7265584c3f302c3845515d677783909daab4b4b4b4b4b4b4b4b4a89b8e827568564d41362a1e1a1917130e080000000000091623303c4956636f7c899698989898989898989898989898978a7d7064574a3d3124170a091623303c4956636f7c899698989898989898989898989898988b7e7265584b3f3225180c00010d1a2734404d5a677380848484848484848484848484848484847f726653493f4a5663707d8996a3b0bcc9d6e3e9dcd0c3b6a99d9083766a5d5043372a1d100400000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e71655d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d57554f473e33281c1004000000000000000000000000000000000000000000000000020d17202935404b55606a73808c959faab4bfcad6d5cdc8c4c3c5c6c9cfd7dfe9f3e6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000000000006111c2a36414c56626e7b86929fa8b2bec7d2dde8eee5dbd3c9c1b9b1aba39f9a95908d8b898989898b8d91959b9ea5adb3bbc4cccbcbcbcbcbcbd1c6bdb0a69b8f8275695f53463a2d1e1308000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffff8ece0d3c7bcb0a6998d8073665c504438291e14101c28343f4a54626e7b88959fabb8c6d0dbe7f3fffffffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaddd1c4b8ab9f95908a8a8a8a8a8a8a8a8a8b8d90959da0a7b1b9c3d0d9e4eeeae0d4c8bcb1a7998d807366554b4035291d1104000007192633404c5966737f8c99aab4bfcbcacacacacac4b8ab9e9185796d615e575f666f7c8996a0acb9c5d2deebeee1d5c9bdb2a994887b6e6155483b2e22150800131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000004101c2834404b54606b74818e96a1aab4bdc7d0d8e1e9e8e1d8d1cbc4beb9b8b4aeacaaa9a9aaabadb3b6b8bcc2c8ced5dee4ede9e1d8cfc6bdb3a9a0958d80736a5f53473d33271c100300000000000000000000000000000004101c28333e474f55575d5d5d5d5d5d616e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000002070a0c0d1010101010101010121f2b3744505b6576828f9ca7a7a7a7a7a7a7a7a7a7a79b8e817568564c41352935404b556774818d9aa7a7a7a7a7a7a7a7a7a7a79e918478685e5246392d20140c0a0702000000000000091623303c4956636f7c898c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8a7d7064574a3d3124170a091623303c4956636f7c898c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7265584b3f3225180c00010e1b2734414e5a6774818d90909090909090909090909090908f8275655b50444a5663707d8996a3b0bcc9d6e3eaddd0c4b7aa9d9184776a5e5144372b1e110400000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e716a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6461594f44392d20140800000000000000000000000000000000000000000000000000050e18242f39434e58606d78839098a2aebac1cdd6d9d4d1d0d1d2d5dae1e9f1f3e6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000000000e1925303b47535f6973808d96a0acb6c0ccd8dce6ede4dbd3cbc2bdb4aeaca7a09d9a9896969596989a9da0a7aaafb9bec4cdd6d8d8d8d8d8d7cbbfb4ab9e94897c6f63574d42362a1e0c02000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffff6eaddd0c4b7ab9f94887b6e62544a3f3428170d0b17232e3847535f697683909daab4bfcad6e2effbfffffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebece0d4c8bcb1a79f9d97979797979797979798999d9fa7acb1b9c3cbd5e2ebede2d8cec6b8ab9f95887c6f6255493c2f24180d0100000a1724303d4a5763707d8a98a3aebac7d3d7d7d7d2c6b9ada1978d80746d6869696e7883909da8b2bdc9d5e1edebdfd2c5b9ada196867a6d6053473a2d20140700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000006131f2c3845515c66707d89939da8b2bcc5d0d9e2eae8ded6cfc6bfbab3adababa39f9d9d9c9d9fa2a9a9abb1b8bdc3ccd2dbe4edeae1d8cfc5bbb1a79f92877c6f62594f44382c2015090000000000000000000000000000000714202c38444f596163696969696969696e7b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000003030303030303030f1b27333f49536673808d999a9a9a9a9a9a9a9a9a9a9a9a918477685d5245392c2f3e4b5865717e8b989a9a9a9a9a9a9a9a9a9a9a9a96877a6e6154473b2e2114080000000000000000000814212e3b4754616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b6e6155483b2e2215080814212e3b4754616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6255483c2f22150900000d1a2633404d596673808c999d9d9d9d9d9d9d9d9d9d9d9d9d9285786c60544b4e5764717e8b97a4b1becad7e4ebded1c5b8ab9e9285786b5f5245382c1f120500000e1b2835414e5b6874818e9ba7b4c1cedae4d7cbbeb1a4988b7e7676767676767676767676767676767676767676767676767676706c6155493c3023160a000000000000000000000000000000000000000000000000000007121d28313d44505c666e7b86929fa6b0bbc5cfdae0dedddedfe2e6ecf3faf3e6dacdc0b3a79a8d8074675a4d4134271a0e01000000000000000000000008141e2b37424d57606d7984919aa4afbbc1cad4dce8eee4ddd4cfc6bfbab9b1acaaa7a5a3a2a2a3a4a7aaacb1b6bac1c9cfd6dfe8e5e7ded5ccc3baaea3998f82756b6054453b31261a0e00000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffffbeee2d6cabeb4aa9c908376695f5342382e23170506111c2b37424d5765717e8b98a2aebac7d3e0ebf6fffffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf0e4d8cdc2b9b1aba9a3a3a3a3a3a3a3a3a4a4a6a9abb1b8bcc3cbd5dde7ede7dcd0c6bcb1a79d9083776a5f54473b2e1d13070000000714212d3a4754606d7a86929facb8c4cfdae6e1d5c9beb3a99d928d817a7776777b828f959fabbac4ced9e5f1ebded1c4b8ab9e918578675d5145382c1f130600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000000030f1c28333f4a54606d7984919da5afbac4ced7e2ebe8ded6ccc4bcb4aea9a19e999992919090909297989d9fa7acb1bac1c9d2dae4eeeae1d7cdc3bbafa3998f82766b6054483c31261a0e0200000000000000000000000000000916232f3c4855616b7076767676767676767b8794a1aebac7d4e1edf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3d4a5764707d8a8d8d8d8d8d8d8d8d8d8d8d8d8d8d877a6d6054473a2d2f3c4855626f7c888d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7d7064574a3d3124170a0000000000000000000714202d3a46525e696e72727272727272727272727272727272726e695f53463a2d2114070714202d3a46525e696e72727272727272727272727272727272726f6a5f53473b2e21150800000b1825313e4b5864717e8b97abaaaaaaaaaaaaaaaaaaaaaaa197897d70665c55585f6974818e9ba7b4c1cedae7ebded1c5b8ab9e9285786b5f5245382c1f120500000e1b2835414e5b6874818e9ba7b4c1cedae7ddd1c4b7aa9e918483838383838383838383838383838383838383838383838383837d7064574a3d3124170a0000000000000000000000000000000000000000000000000000010c161f28343f4a545f69717e8b949ea9b3bec9d5dee7e9ebeceef2f7fdfff3e6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000000000000020e1a26313c45515c67707d88939fa5afb8c2cad8dde4ebe6e1d8d1cbc7c3bcb8b7b4b1b0afafb0b1b3b7b8bcc3c6ccd5dae1e8eee8ded6ccc3bab0a69f92867c6e62594f4433291f140900000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffff9ecdfd3c6baaea2988b7e7164574d4230261c1106000e1a26313c4754606d7a86929facb8c4cedae5f1fffffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf5eadfd4cbc2bcb8b6b0b0b0b0b0b0b0b0b0b1b3b6b7bcc2c8ced5dde7eae2dcd6cbbfb4aa9f958a7d7064584e43372b1f0c010000000613202c3945515d6775828f9ba9b3bec9d5e0e6dacfc4bbaea49d938e86838284888f949fa7b1bcccd6e0ebf6e8dbcfc2b5a89c8f827569554b4035291d100400131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000006121f2b3844505b66727f8b95a0acb7c1ccd6e0e9eae1d6ccc4bab2aaa39f97918d89868483838485888b90959da0a8afb7c0c8d2dce5e1e9dfd7cbc0b5ab9f94897d7063574e42372b1e120600000000000000000000000000000a1724303d4a5763707d838383838383838383909da9b6c3d0dce9f6f0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614212e3a4754616d7a818181818181818181818181818181817b6e6155483b2e2d394653606c78808181818181818181818181818181817d7063574a3d3024170a00000000000000000005111e2a36424d575e616565656565656565656565656565656565615f574d42372b1e120505111e2a36424d575e616565656565656565656565656565656565625f584e43372b1f120600000916232f3c4956626f7c8999a3aeb7b7b7b7b7b7b7b7b7b3a99d9083786d6766666a6f7b86929facb9c5d2dfeceaddd1c4b7aa9e9184776b5e5144382b1e110500000e1b2835414e5b6874818e9ba7b4c1cedae7ded2c5b9aca09691909090909090909090909090909090909090909090909090908b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000040d17232e38424d57626d75828f97a1adb9c0ccd5e1eaf5f8fafefffffff3e6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000000000009151f2834404b55606b73808c939ea6b0b8c1ccd2d9e2e8eae2dcd7d3cec8c5c3c0bebcbcbcbcbec0c4c5c8ced2d7dde6ebeae3dcd7ccc4bab2a89f948c7f726a5f53473d3221170d0300000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffffff8ebded2c5b8ab9f92857a6d6053473c3120150a00000915202c3945515d6775818e9ba8b2bdc9d5e4eef9fffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f0e6ddd4cdc8c4c3bdbdbdbdbdbdbdbdbdbec0c3c4c7cdd4d9dfe7e6e1d8d1cbc0baaea3989083766c6155463c32261b0f0000000004111d2935414b5564717e8a97a1adb9c4cfdae5e1d6cdc0b6aea59d9992908f91959c9fa6b0b9c2cddee7f2ece0d4c8bcb1a7998c7f7266594c3f2f24180c0000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000000000613202d394653606c7884919ea8b1bdc9d2dee8ede3d8cfc4bab2a8a198928c85807c7977767677797b7f838991959ea5aeb6c0cad4d4d4d4d4dcd1c7bdb0a69c8f82766a5f53473a2e21150a00000000000000000000000000000b1825313e4b5864717e8b9090909090909090959fabb8c4d1ddeaf7f0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e686d747474747474747474747474747474746e695f53463a2d2b3844505b666c74747474747474747474747474747474706b6155483c2f231609000000000000000000020e1a25303b454d5254595959595959595959595959595959595955534d453c31261a0e02020e1a25303b454d5254595959595959595959595959595959595955534e463c32261b0f0300000714202d3a4753606d7a86929facb9c3c3c3c3c3c3c3c3b8ab9f958e8179747273757c849198a3aebac7d3e0ece9dcd0c3b6a99d9083766a5d5043372a1d100400000e1b2835414e5b6874818e9ba7b4c1cedae7e1d5c9bdb2a8a09e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000006111c26303c45505a616d7a85929ea5afbac3cfd9e3eef9fffffffffff3e6dacdc0b3a79a8d8074675a4d4134271a0e01000000000000000000000000030c18232e39434f59636d75818e949fa6afbbc0c7d0d7dce3e8e7e3e0d9d4d1d0cdcbc9c9c8c9cbcdd0d1d4d9dfe2e8ebe5e1d9d1cbc2bab2a8a0968f82786c60584e43352b210f060000000000131f2c3946525f6c7985929facb8c5d2dfebf8fffffffffff9ede0d4c8bcb1a79a8e8174675d5145392c201303000004111d2935414c5563707d8996a1acb9c7d2dde8f4fffffffffffaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2f2efe6dfd8d4d1d0cacacacacacacacacacbccd0d1d3d8dee4e4e0dad5cfc6bfbaaea49f92867b6e62594f44342a20150a00000000010d18242f3a4753606d7985919ea8b2bdc9d5dde6dfd2c8c0b7afaba39f9d9c9da0a7abb0b8c2cbd4def0efe4dbd1c4b8aca095887b6e6255483b2f2215070000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000005121e2a36424d5764707d8a96a0acbac3cedbe4f0e7dcd1c6bdb2a8a19691867f79736f6d666a69656c6e72767d848e939da4aeb8c2cdc7c7c7c7c7c7cfc2b9ac9f93877b6e6255483d32271b0f03000000000000000000000000000b1825313e4b5864717e8b979c9c9c9c9c9c9d9fa7b1bcc8d4e0ecf9f0e4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c565e6167676767676767676767676767676767615f574d42362a28333f4a545b60676767676767676767676767676767676361594f44382c2014070000000000000000000009141f29333b4246474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4846423c332a1f1409000009141f29333b4246474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847433c342a20150a00000006131f2c3945515d677683909da9b6c2cdd0d0d0d0d0c8bcb1a79d938e84817f8082879196a0aab4bfcbd7e3efe7dacec1b4a79b8e8174685b4e4135281b0e0200000e1b2835414e5b6874818e9ba7b4c1cedae7e5d9cec4bab2acaaa9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000a151e2a333f46525e68707d8a929da8b2bdc7d1dce8f2f6f6f6f6f6f3e6dacdc0b3a79a8d8074675a4d4134271a0e010000000000000000000000000007121d27303d47525b606d79828f949ea5afb6bec3cbd1d8dde4e6eae5e0dedddad8d6d5d5d6d7dadddee0e5eae8e4e0d9d5cfc7c0bbb0a8a09691847a6d665b50463c3123190f000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fefefefefef7eaded1c5b8aca095897c6f62554b4035291d10040000010d19242f3a4653606c7884919eacb6c0ccd8e4f0fcfefefefefaede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e5e5e4e0dddcd6d6d6d6d6d6d6d6d7d7d9dcdde0e0dfddd8d3cfc9c3bdb4aea49d928b7f726a5f53473e3322190e04000000000007131f2c3845515d67727f8b96a1adb9c0cbd4dde4dad2c9c0bdb5aeacaaa9aaacb1b7bbc2cad4dde6f0e6ddd4c8bdb2a89d908377695f53473a2e2114080000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000714212d3a46535e697683909ca8b2bdccd5dfedefe3d7cbbfb5aba19691847c726d6762605c54535b6061656b7079818d929da6b0bbbabababababababababbafa49a8d807366584e43372b1f1306000000000000000000000000000b1825313e4b5864717e8b97a4a9a9a9a9a9a9abb1b9c2cdd8e4f0fcf0e4d7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a444c52545a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534d453b3126222d38424a50535a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a57554f473e33281c100400000000000000000000020d17202930363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b3a37312a21180e030000020d17202930363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b37322a22180e0400000004101d2935404b5566737f8c99a6b0bcc7d3ddddddd8cdc2b9afa59d96918d8c8c8f9299a0a8b2bcc6d1dce7ece0d4c8bcb1a7988b7f7265584c3f3225190c0000000e1b2835414e5b6874818e9ba7b4c1cedae7ebe0d6ccc4bdb9b7b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b1a4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000030c18212a36414c56616b74818e96a0abb5c0cbd7e0e9e9e9e9e9e9e9e6dacdc0b3a79a8d8074675a4d4134271a0e0100000000000000000000000000000b151e2b354045515c676d7a828e939fa4acb2bbc0c7ccd2d6dbdfe1e6e8eae7e4e3e2e2e3e4e6eae9e7e3e0ddd8d4cec9c3bdb5afa69f9691847b6e685d544a3f342a201107000000000000131f2c3946525f6c7985929facb8c5d2dfebf2f2f2f2f2f2efe3d7cbbfb4ab9d9084776a605443392f24180d0100000008131f2b3744505b6573808c9aa4afbbc8d4e0ecf8f2f2f2f2f2ede1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7dcd7d3d2d0cdc7c4beb9b1aba39f928d80736d62574e42352c21100700000000000004101d2935404b55606d7984919ea4aeb9c2cbd5dde6dbd2cfc6bfbbb9b6b5b7b8bcc3c7ccd4dce6eee8ded4cbc3b8aca0968b7e7164574d42372b1e12060000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000000000815212e3b4854616e7b87949fabbac3cedee7f1e9e0d3c7bbaea39991847b6f6a605d5553504a495053555961676d77808d949fa9b3aeaeaeaeaeaeaeaeaeaeb6ac9e9184786a6054473b2e221508000000000000000000000000000b1825313e4b5864717e8b97a4b1b6b6b6b6b6b8bcc2cbd4dfeaf5fff0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323a4146474e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4846423b332a1f1c262f383f44464e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4a48443e352c21160b000000000000000000000000050e171f252a2d2e32323232323232323232323232323232322e2d2b261f180f0600000000050e171f252a2d2e32323232323232323232323232323232322f2e2b262018100600000000000c18242f3b4855626e7b88949fabb7c2cfd8e3eadfd4cbc0b7afa8a19e9a99999c9fa3abb2bac3cfd8e2ede4dbd1c4b8ab9f95887b6e6255483b2f2215080000000e1b2835414e5b6874818e9ba7b4c1cedae7f2e7ded6cec9c5c4c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3beb1a4988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000060f1925303a444f59606d79849199a3afbbc2ced7dddddddddddddddddacdc0b3a79a8d8074675a4d4134271a0e010000000000000000000000000000030c19232834404b555d686d78818d939aa0a8afb5bbc0c7cad0d2d5dadbdddedfe0e3e4e0dfdedddcdcd6d3d2ccc8c4bdb9b1aba39f948f847b6e695f564c42382d22180e00000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e5e5e5e5e0d3c7baaea3998c7f7265584e4331281d120700000000030f1b27333f4953616e7b87939facb9c5d0dbe7e5e5e5e5e5e5e5e1d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcad1cbc7c5c4c1bbb7b2ada7a099928b80746e645b51453c31231a1000000000000000000c18242f3945515c67707d8a929da7b1b9c3cbd5dae0e1d8d1cbc7c5c3c2c4c5c8ced3d8dee6ebe3ddd7ccc3b9afa59d9184796d6053463c31261a0e020000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000000000000000000000004111d2935404b5565727f8b98a6b0bcccd5e0f0ece2d4c8bdb2a89f92877c6f695f58514b46443f3f4446484f555d656c77828f97a2a1a1a1a1a1a1a1a1a1a1a1a1a1a196897c6f6256493c2f231609000000000000000000000000000b1825313e4b5864717e8b97a4b1bec3c3c3c3c4c8cdd4dde6f0fbfdf0e4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c1720293036393a414141414141414141414141414141413b3a36312a2118141d262d333839414141414141414141414141414141413d3c38332c231a100500000000000000000000000000050d141a1e2021262626262626262626262626262626262622211e1a140e06000000000000050d141a1e2021262626262626262626262626262626262622211f1b150e060000000000000714212e3a47535f697683909ca6b0bdc6d1dce7e6ddd2c9c0bab2adaba7a5a6a8acafb5bdc3ccd5e1eae6ddd5c9bdb2a89d908377695f53473a2e2114080000000e1b2835414e5b6874818e9ba7b4c1cedae7f4f0e7e0d9d5d2d1d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0cbbeb1a4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000008131e29323e45515d676f7c87929fa7b1bcc5d0d0d0d0d0d0d0d0d0d0cdc0b3a79a8d8074675a4d4134271a0e01000000000000000000000000000000071118232e39434c565d666d77808891969fa3abafb6babec4c6c9cfced0d1d2d4d7d8d4d2d1d0cfd0cbc7c5c0bbb9b2aca7a099928c827a6e695f574d443a2f261c0f0600000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d8d8d8d2c5b9ac9f92867a6d6154473d3221160c0100000000000b17222d3846535f697683909caab4bfcad6d8d8d8d8d8d8d8d8d8d4c7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbebebdbfbbb9b7b4b0aba9a19e9590867f746e645c52493f332a201108000000000000000007121d2834404b55616b74808d959fa7b1b9c1c9cfd6dae0dcd7d3d2d0cfd0d1d4d9dfe3e6e1dfd9d2ccc2bab1a79d938a7d70665c5144382a201509000000131f2c3946525f6c7985929facb8c5d2dfe7e7dbcec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000613202c3945515d6776828f9ca9b5c2cddce7f2e7dbd0c5b8aca0968c80736a5f574e45403a38343337393d434b535b656d7a8592949494949494949494949494949494948c7f7266594c3f3326190c000000000000000000000000000b1825313e4b5864717e8b97a4b1becacfcfd0d1d4d8dfe6eff8fffdf0e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a2d2e343434343434343434343434343434342e2d2a261f180f0b141c22282b2d34343434343434343434343434343434302f2c28211a110800000000000000000000000000000002090e11141419191919191919191919191919191919191514120e0903000000000000000002090e11141419191919191919191919191919191919191515120f0a040000000000000006121e2b37424d5763707d8a949fabb5bfcbd7dde4e4dbd2ccc4bdb9b8b4b2b3b5b9bbc0c7cfd5dee7e6ddd4cbc2b9aca0968b7e7165574d42372b1e12060000000e1b2835414e5b6874818e9ba7b4c1cedae7e9e9e9e9e5e1dedddcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd7cbbeb1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000020c17202935404b55606a737f8c959faab4bfc3c3c3c3c3c3c3c3c3c3c3c0b3a79a8d8074675a4d4134271a0e010000000000000000000000000000000007121d27303a444c545c656c737d848d92999fa4acadb3b8b9bec0c2c3c5c5c7cbccc8c6c5c4c2c0bfbab8b6afaca8a09e95908780786d685e574d453b32281d140a0000000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcbcbcbc9bdb2a89b8e8275685e5246392d20130400000000000006111b2a36424d5764717e8b98a2aebac6cbcbcbcbcbcbcbcbcbcbcbc7baaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b0b5aeacaaa7a69f9c97918b837c726d645c524a40372d21180e000000000000000000010c18232e39434f59606d79839095a0a7afb9bdc4cacfd3d7dcdddfdddcdddee0dfdedcdad5d2d0c7c0bbb1a89f958e81746b61544a403428180e03000000131f2c3946525f6c7985929facb8c5d2dadadadacec2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000714202d3a4753606d7a86929facb9c5d2dfeceee2d6cabfb4aa9d9184796d60584e453c352f2c28272b2d31394149535e68727f8787878787878787878787878787878787878276695c4f4336291c10000000000000000000000000000b1825313e4b5864717e8b97a4b1becad7dcdcdde0e4eaf0f6f6f6f6f0e4d7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c13191d20212727272727272727272727272727272722211e1a140e06020a11171c1f20272727272727272727272727272727272423201c161008000000000000000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c08070502000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c09080603000000000000000000020e1a26313c4855616b76829099a3aebbc0ccd2d9e2e6dfd6cfc9c5c4c0bfbfc2c5c7cbd1d9e1e7e1dbd6cbc2b9afa59e9184786d6053463c31261a0e020000000e1b2835414e5b6874818e9ba7b4c1cedaddddddddddddddddddddddddddddddddddddddddddddddddddddddddd7cbbeb1a4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000050e18242f39434e58606d78839098a2aeb6b6b6b6b6b6b6b6b6b6b6b6b6b3a79a8d8074675a4d4134271a0e0100000000000000000000000000000000000b151e28323a424b535b606b6f7980878e939a9fa2a9abadb3b3b5b7b8b9bbc0c0bbb9b8b7b6b4b4aeacaca49f9c96918a837c736d665e564d453b332920160b020000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfb9ada1968a7d7063564c41362a1d1105000000000000000e1a26313b4753606d7a85929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfbaaea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4aba39f9d9b97948f8a847e786f6a625b524a41382e251b0f060000000000000000000007121d27303e45515d676d7a8390959ea5adb2b9bec5c7cbd1d1d2d4d7ddd7d4d2d1d0cfc9c6c2bdb5afa79f969083796d60594f42392e23180600000000131f2c3946525f6c7985929facb8c5cdcdcdcdcdcdc2b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000a1623303d495663707c8998a3aebac7d3e0ececdfd3c6baaea2988b7f72665c51463c3329241f1c1b1f20282f38414c56606d787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e6154473b2e211408000000000000000000000000000b1825313e4b5864717e8b97a4b1becad7e4e9e9e9e9e9e9e9e9e9e9e9e4d7cabdb1a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1113141b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1514120e0903000000060b0f12131b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171614100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202c38444f59626f7c87929fa5afbbc0c7d0d6dbe0e0dad5d2d1cdcccccfd2d4d7dce3e2dcd7cfcac1b9b1a79d938a7d70665c5044382a1f1509000000000e1b2835414e5b6874818e9ba7b4c1ced0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0cbbeb1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000007121d27313d44505c666e7b86929fa5aaaaaaaaaaaaaaaaaaaaaaaaaaaaa79a8d8074675a4d4134271a0e010000000000000000000000000000000000030c16202830394149505960676d737c82878d92979b9ea1a9a6a8aaabacafb5b6afacabaaa9a7aaa39f9c9a938f8a847e786f6a605c544c443b332921180e04000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b6ac9e9184786c6053463a3025190d01000000000000000914202c3945515d6774818e9ba8b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929898989898989898989898989898989898989898989898989898989797969992918e8a87837e79716c666058514841382f261c13090000000000000000000000000b151e2935404b555d686e7a838e939ea1a9adb3b9bbbfc2c4c6c7ccd2ccc7c6c4c3c1beb9b8b0aba49f9590847a6d675d51473e30271c120700000000131f2c3946525f6c7985929facb8c0c0c0c0c0c0c0c0b5a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000000c1825323f4b5865727e8b98aab4bfcbd7e3efebdfd2c5b8ac9f92857a6d60544a40342a211812100f12161d262f3a44505c666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e695e52463a2d201407000000000000000000000000000b1825313e4b5864717e8b97a4b1becad7ddddddddddddddddddddddddddd7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e08070502000000000000000306060e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a0907040000000000000000000000000000000000000000000000000000000000000000000000000000000001040607090a0b0b0c0c0b0b0a0807050200000000000000000000000000000000000000000000000000000000000000000000000003101c28333e47535f6a727f8b939da5afb6bec4cacfd4d8dddedfdedad8d9dbdfdfdeddd9d4d1cbc5beb9afa79f958e81746c61544a3f3428180e03000000000e1b2835414e5b6874818e9ba7b4c1c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3beb1a4988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000010b151f28343f4a545f69717e8b939d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9a8d8074675a4d4134271a0e01000000000000000000000000000000000000040d161e272f383f444f555d606a6e757b80858a8e9197979a9b9d9e9fa3a0a0a49f9e9d9c9a9898928f8c87837d78716c656058504a423a322921180f0600000000000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a49a8c8073665b504438291e1308000000000000000004101d2935404b55636f7c8996a0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8b8a89888684817e7a76716d66605b544e463f362f261d140a01000000000000000000000000030c18242f39434c565e686e79818a91969ea1a9acaeb5b5b7b9bbc0bbc0bbb9b8b6b4b3adaba69e99938d837a6d685e554b40352c1e150b0000000000131f2c3946525f6c7985929facb4b4b4b4b4b4b4b4b4b4a89b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f12050000000000000000000000000000000000010e1b2734414e5a6774818d9aa7b4c0d1dce7f3e7dbcec1b4a89b8e8175675d5142392e22180f070303050b141d28343f4a545c60616161616161616161616161616161616161615e574d42362a1e1105000000000000000000000000000b1825313e4b5864717e8b97a4b1becad0d0d0d0d0d0d0d0d0d0d0d0d0d0d0cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608070d1013141517181819191817161414110e090605030000000000000000000000000000000000000000000000000000000000000000000b16212b37434e58626d74818e939fa4acb2b9bec5c8ccd2d1d2d6dad5d5dbd6d3d2d0cec8c6bfbab3ada59e959082796d605a5042382e23170600000000000e1b2835414e5b6874818e9ba7b4b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b1a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000030d17232e38424d57626c75828f90909090909090909090909090909090908d8074675a4d4134271a0e0100000000000000000000000000000000000000040c151d262d333d434b51585f62696e74797d8185888a8d8f9092929993939a9392918f8d8b8986837f7b76706d66605b534e443f38302820170f060000000000000000000000131f2c3946525f6c79859298989898989898989898989898989898989893877b6e61544a3f3328170c020000000000000000010d18242f394854606b77849198989898989898989898989898989898989894877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7d7d7b797774716e6864605c54504a423c342d241d140b02000000000000000000000000000007121d27313a444c565e676d747e848c92979c9fa3aba8aaacafb5aeb5afacaba9a7a9a19e9a948f8780796d685e564c43392f231a0c030000000000131f2c3946525f6c7985929fa7a7a7a7a7a7a7a7a7a7a7a79b8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000003101d2a3643505d697683909ca9b6c3cfdce9f8e5d8cbbeb2a5988b7f7265554c4130271c100700000000020b17232e38424a505354545454545454545454545454545454545454524d453b30251a0e02000000000000000000000000000b1825313e4b5864717e8b97a4b1bec3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3bdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000104060708080808070706040000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c0904000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e121415181d202022242425252525242321201e191613120f0b0600000000000000000000000000000000000000000000000000000000000000050f1b26313c46515b606c78818c939aa0a8adb3b9bbc0c3c5c6cacfc8c8d0cac6c5c3c1bdb8b4aea9a29e938e83796d675d51483e30261c110600000000000e1b2835414e5b6874818e9ba7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000006111c26303b45505a616d7a838383838383838383838383838383838383837f7265594c3f3226190c000000000000000000000000000000000000000000030b141b2227313940454e53575f62666d7074787b7e80828485868687878686858483817e7c7976726e6964605c545049413c342e261e160e05000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8276695f5342382d2217050000000000000000000007121d2c38444f5966737f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4a56626d72727272727272727272727272727272727272727272727272727272727171706e6d666864615e5653514a443f382f2b221b120b02000000000000000000000000000000010b151f28323b444c555d606c71797f858a8f92999a9c9e9fa4a1a1a1a49f9e9d9b9897918d88827c736d675e564c443a31271d1108000000000000131f2c3946525f6c7985929a9a9a9a9a9a9a9a9a9a9a9a9a9a8f8275685c4f4235291c0f0000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205000000000000000000000000000000000005121f2b3845525e6b7885919eabb8c4d1deebeee2d6cabeb4aa95897c6f6256493c2f23150b00000000000006111c2630383f44464848484848484848484848484848484848484746423b33291f140900000000000000000000000000000b1825313e4b5864717e8b97a4b1b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000004060709070d11131414151515141313100c0709080603000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b191510090200000000000000000000000000000000000000000000000000000000000000000000000001070c10151a1e212224292c2d2f30313232323131302e2d2a2523201f1b17110d080200000000000000000000000000000000000000000000000000000000000a15202a343f44505b666c777f8891969ea2a9acafb6b6b8b9bebbbcbcbbbebab8b6b4b2acaaa39f97928b81796d675d554b40362c1e150a0000000000000e1b2835414e5b6874818e9b9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000000000000a141e2a333f46525e686d76777777777777777777777777777777777777726d62574a3e3125180b00000000000000000000000000000000000000000000020a11171f272f353c43474d53545c606468696e7173757778797a7a7a797978777674726f6d6765615e5753504a443f382f28231c150c04000000000000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f62574d422f261c110600000000000000000000010f1b27323d4754616e7a7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b62656565656565656565656565656565656565656565656565656565656564646361605c545754524c46444039332d261d191009000000000000000000000000000000000000030d162029323b434b515a61676d73797e83868a8d8f919399949494999391908e8b8885807c766f6a605c554c443a32291f150b00000000000000131f2c3946525f6c79868d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8275685c4f4235291c0f0000000000000000000000000000000000000001010101010103101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1205010101010101000000000000000000000005121f2b3744505b657985929facb8c5d2dfebecdfd3c6baaea29886796d6053463a2d201307000000000000000a151e262e34383a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a36302920170d0200000000000000000000000000000b1825313e4b5864717e8b97a4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4978a7e7164574b3e3124180b00000000000000000000000000000000000000000004070c1013131619181d20202122222121201f1c18181515120f0a070300000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000000000000000000000060c12181d1f262b2e2f2f35393a3c3d3e3e3f3f3e3e3d3b3a36302f2d2b27221b19130d0701000000000000000000000000000000000000000000000000000000040e182228333f4a545b656c737d848c92979d9fa4aca9abadb3aeafafaeb3adabaaa8a8a09d98928d857e756d675d554c43392f241a0c030000000000000e1b2835414e5b6874818e909090909090909090909090909090909090909090909090909090909090909090909090909090908b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000020c18212a36414c565e61696a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a65625b51463a2e221609000000000000000000000000000000000000000000000000060d151d242931373c42474b515357575f626467686a656c6d6d6d6d676b6a69676563605c5554524d46443f38332d261d17110a0300000000000000000000000000000b1824313e4a56626d7272727272727272727272727272727272727272726f6a6054453b311d140a0000000000000000000000000b16202d3946525e686e7272727272727272727272727272727272727272726d675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e29343f49515658595959595959595959595959595959595959595959595959595959585857565553504a4b4746413b38342e28221c140b070000000000000000000000000000000000000000040e1720293139404550555d60676d71767a7d808284868687888787868583817f7c78746f6a625f58514b433a322920170d03000000000000000e1a2734414d5a677480818181818181818181818181818181817e7265584b3f3225180c0000000000000000000000000000000407090a0e0e0e0e0e0e0e101d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f120e0e0e0e0e0e0e0d0c0a06020000000000000613202d394653606c7986939facb9c6d2dfecebded2c5b8ab9f928578665c5145382c1f130600000000000000030c151c23282c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a251f170e050000000000000000000000000000000b1825313e4b5864717e8b979d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d978a7e7164574b3e3124180b00000000000000000000000000000000000001070c1013181c1f20232624292c2d2e2e2f2e2e2d2c28232522211f1a15130f0a04000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c0200000000000000000000000000000000000000000000000000000000000000030a11171d24292c31373a3b3f404547484a4b4b4c4c4b4a49474642403c3937332d29251e18120c04000000000000000000000000000000000000000000000000000000061017222d38424a535b606b70797f858b90939a9a9c9ea1a9a2a2a2a2a9a29f9d9b9896918c86807a716c605d554c433a31271d1208000000000000000d192633404c5966737f8383838383838383838383838383838383838383838383838383838383838383838383838383838383837e7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000060f1925303a444c52545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d595751493f35291e120600000000000000000000000000000000000000000000000000030b121820262b3137394045464a4d5355575a5c535b60606060605c555e5c5a585653514b4846423b38342e27221b140b06000000000000000000000000000000000916222e3a46515b626565656565656565656565656565656565656565656260584e4333291f0b0200000000000000000000000005111e2a36414c565e61656565656565656565656565656565656565656565605d554b4035291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a4a4846443f3e3b3936302c28231c17110a0200000000000000000000000000000000000000000000050e171f272f353e434b51555c6064676d70737577797a7a7b7a7a79787674726f6c65625f58544e454039302820170e0500000000000000000d1a26333f4c58646e7474747474747474747474747474747474726d62564a3d3124180b00000000000000000000000000050b101416171b1b1b1b1b1b1b1b1d293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b1f1b1b1b1b1b1b1b1b191916120d0700000000000714212d3a4754606d7a879aa4afbbc8d4e0edeaded1c4b7ab9e9184786b544b4034281c10040000000000000000030a11171c1f2021212121212121212121212121212121212121201e1a140d05000000000000000000000000000000000b1825313e4b5864717e8b909090909090909090909090909090909090909090909090908a7e7164574b3e3124180b0000000000000000000000000000000002080d12181d1f23282c2d30332f35393a3b3b3b3b3a3a38342e322f2e2b26221f1b16100c070000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e1409000000000000000000000000000000000000000000000000000000000000060c151c23282f35393c4247484c4b515355575758585858575654524d4c4946443f38353029241d160d0600000000000000000000000000000000000000000000000000000006111c262f384149505960676d727a7e83878a8d9092979495959595949792908e8b88847f7a746d68625a514b433a31281f150b00000000000000000c1925323e4b57636d73777777777777777777777777777777777777777777777777777777777777777777777777777777777777706c6155493c3023160a000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323a414647505050505050505050505050505050505050504c4a463f372d23180d01000000000000000000000000000000000000000000000000000001070c151a1f262b2e34383a3d4247484b4d4f49505353545453514b51504e4b494645403b3a36302b28231c17110a02000000000000000000000000000000000006121e29343f49515658595959595959595959595959595959595959595956544e463d3221180d00000000000000000000000000020e1925303b444c525459595959595959595959595959595959595959595953514b433a2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3e3d3b3a38342e2e2d2a251f1c18120b0600000000000000000000000000000000000000000000000000050d151d2429313940454b5153555d60646769656c6d6e6e6e6d6d666a686562605b53534e47433c342e271e160e050000000000000000000b1723303c47525c64676767676767676767676767676767676765625b51453a2e221509000000000000000000000000080f161c202323272727272727272727293643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245382b2727272727272727272625231e19120a010000000814212e3b4754616e7a8794a1b6c0ccd8e4f0eaddd0c3b7aa9d9084776a5d51442e23180c0000000000000000000000060c1012131515151515151515151515151515151515151414110e090200000000000000000000000000000000000a1724303d4a5763707d8383838383838383838383838383838383838383838383838383837d7063564a3d3023170a000000000000000000000000000001070d14191d24292c2e34383a3c40424045474748484847464540413f3c3a37312f2c271f1c18120b0300000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100400000000000000000000000000000000000000000000000000000000080f171e262e34394045474e535558555d60626364656565646463615e56595653504946413a352f281f17110a0200000000000000000000000000000000000000000000000000000a141d262f383f444f555d60676d71767a7e81838586888889898887878583817e7b77726d68615d565045403a31281f160d0300000000000000000a16232f3b46525b63666a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a64615a5044392d2014080000000000000000000000000000000000000000000000000000000000000000000000000000020c1720293036393a434444444444444444444444444444444444443f3e3a352d251b11070000000000000000000000000000000000000000000000000000000000030a0f151a1d23282c2d31373a3b3e40423f44464747474645404443413f3c3a38342e2d2a251f1c17110b0600000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4947433d342b200f06000000000000000000000000000008141e29323b4146474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4745403a31281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e3132323232323232323232323232323232323232323232323232323232323131302e2d2b282321201e1914100c0700000000000000000000000000000000000000000000000000000000030b12181f282f35394045464b5154575a535b606061616161605c545b585553504947433c373228231d150c050000000000000000000007131f2b36404a52585a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a585651493f34291d1105000000000000000000000008111a21272c2f30343434343434343434343643505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5245383434343434343434343433322f2a231c130a0000000814212e3b4754616e7a8794a1b5c0cbd7e3efeaddd0c4b7aa9d9184776a5e51443024190d0100000000000000000003090e1214151a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a181815120c0600000000000000000000000000000000000916232f3c4855616b70777777777777777777777777777777777777777777777777777777706b6054483c2f22160900000000000000000000000000040c12181e252a2f35383a404546494c4f4b5153545555545453514b4e4b4847433c3b38322c28231c150c0802000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c21150900000000000000000000000000000000000000000000000000000008111a212930383f444b5153575f626568676d6f70717172727171706e69696662605b53524c4540393127221b140b0200000000000000000000000000000000000000000000000000020b141d262d333d434b51555d6065686d717476787a7b7b7c7c7b7b7a787775716e6965615e56524c443f352f281f160d0400000000000000000007131e2a3540495257595d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d575550473e33281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a2d2e3637373737373737373737373737373737373732312e29231b1309000000000000000000000000000000000000000000000000000000000000000003090e12181c1f20262b2e2f31342d3337393a3a3a3a38342e363432302d2c2823201e1a14100b060000000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b37322b22190f000000000000000000000000000000020d1720293036393b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a39352f281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e2224252626262626262626262626262626262626262626262626262626262525242322201f1c171414110e08040000000000000000000000000000000000000000000000000000000000000001070d161d24292e34383a4145474a4d495053535455545453504a4e4c4946443f3837312b262018120b030000000000000000000000030e19242f3840474c4d4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b4a453f372d23180c0100000000000000000000050f1a232c33383c3d414141414141414141414143505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e52454141414141414141414141403e3b352e251c120700000714202d3a4753606d7a8699a3afbbc7d4e0edebded1c4b8ab9e9185786b564c4135291d11040000000000000000050d141a1e21212626262626262626262626262626262626262524221d181109000000000000000000000000000000000714202c38444f5961636a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6360594f44382c201407000000000000000000000000070d161d24293036394045474b515356595b555d606161626161605c555b5855534e4948433d38342e271e19130c05000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c000000000000000000000000000000000000000000000000000008111a232b333b424a50555d60656a6e7275787a7b7d7e7e7f7f7e7d7c7a7876736f6c65615e56514b433e332d261d140c0200000000000000000000000000000000000000000000000000020b141b2227313940454b5154565e61646769676d6e6f6f6f6f6e6d686a6865615f5754524c46413a3229241d160d0400000000000000000000020d19242e3740464b4c5050505050505050505050505050505050505050505050505050505050505050505050505050505050504a49443e352c22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000050c13191d20212a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2625221e181109010000000000000000000000000000000000000000000000000000000000000000000000070c1013131a1e2122242722272b2d2d2d2d2d2c282329272523201f1c1814120e09030000000000000000000000000000000000000000000000000009131b23292e313232323232323232323232323232323232323232322f2e2b272019100700000000000000000000000000000000050e171e252a2d2e3232323232323232323232323232323232323232322d2c29241d160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d1216181919191919191919191919191919191919191919191919191919191919181717151312100b060705020000000000000000000000000000000000000000000000000000000000000000000000040c12181d23282c2f35393a3d403f4446474748474746443f413f3c3937332d2b26201b150c07000000000000000000000000000008121d262f363c3f41414141414141414141414141414141413f3d3a342d241b110600000000000000000000000b16212c353d44484a4e4e4e4e4e4e4e4e4e4e4e4e505c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e524e4e4e4e4e4e4e4e4e4e4e4e4c4b4640372e23190d020006131f2c3945515d677986929facb9c5d2dfecebdfd2c5b8ac9f928579685d5245392c20130700000000000000050f171f252a2d2e33333333333333333333333333333333333332312e29231b120900000000000000000000000000000004101c28333e474f55575d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d56544f473d33271c100400000000000000000000010910191f282f353b41464b5153555c606366686a676d6e6e6e6e6d6d67696865625f5856544f46444039302a251e170e070000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e0200000000000000000000000000000000000000000000000007101a232c353d454d545c60676d72767b7f828486888a8a8b8b8b8b8a898785837f7c78726d68605d554f443f382f261e140a0000000000000000000000000000000000000000000000000000020a11171f272f353a4145474c5254575a555c60616262626261615d565b5855534d4746413a3530282018130c0400000000000000000000000007121c252e353b3e404444444444444444444444444444444444444444444444444444444444444444444444444444444444443d3c39332c231a100500000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1113141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d191816120d070000000000000000000000000000000000000000000000000000000000000000000000000000000406090e121415181a171b1f20202121201f1c181d1b18161313100c070502000000000000000000000000000000000000000000000000000000010911181e222425262626262626262626262626262626262626262623221f1b150f07000000000000000000000000000000000000050d14191e202126262626262626262626262626262626262626262620201d18130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0b0a08070603000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d12181c1f24292c2d312d3337393a3b3b3b3a3a38342e322f2d2b27221b1b150f0a04000000000000000000000000000000010b141d242b3033343434343434343434343434343434343432312e29231b1209000000000000000000000004101c27333d474f55565a5a5a5a5a5a5a5a5a5a5a5a5a5c6976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b5e5a5a5a5a5a5a5a5a5a5a5a5a5a5957514940352a1e12060004101d2935404b556c7885929fabb8c5d2deebece0d3c7baaea398877a6d6054473a2d211409000000000000030d17212931363a3b4040404040404040404040404040404040403f3d3a342d251b11060000000000000000000000000000000b16212c353e44484a5050505050505050505050505050505050505050505050505050504a48443d352b21160b00000000000000000000020a131b222b313940454c52555d6064676d6f737577797a7a7b7b7b7a79787674726f6a6763605953514a423e3630292019100700000000000000000000131f2c3946525f6c7986868686868686868686868686868686868175685c4f4235291c0f020000000000000000000000000000000000000000000000040d19222c353d474f575f666d72797e83888b8e91969596979898989797969792908c89847f7a736d6761595049413830261c1106000000000000000000000000000000000000000000000000000000060d151d24292f35393a4146474b4e4b515355555656555454524c4e4b4846423b39363029241e160e070100000000000000000000000000000a131c242a2f323337373737373737373737373737373737373737373737373737373737373737373737373737373737373731302d28221a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707101111111111111111111111111111111111110c0b09060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080b060b0f12131414141313100c070e0c09070604000000000000000000000000000000000000000000000000000000000000000000060d1216181919191919191919191919191919191919191919191615130f0a04000000000000000000000000000000000000000002080e1114141919191919191919191919191919191919191919191413110d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013181d20212422272b2d2d2e2e2e2e2d2c28232522201f1b17110f0a04000000000000000000000000000000000000020b12191f232627272727272727272727272727272727272524221d1811090000000000000000000000000714202c38444f59606367676767676767676767676767676976838f9ca9b6c2cfdce9ebded1c4b8ab9e9185786b676767676767676767676767676766635b51463b2f23160a00000c18242f44515e6b7784919eaab7c4d1ddeaefe3d6cbbfb4aa96897d7063564a3d31261a0b02000000000009141f29333b4246484d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b4a453f372d23180c01000000000000000000000000000005101a232c33383c3d4444444444444444444444444444444444444444444444444444443d3c38332b231a0f05000000000000000000020a141c252d343d434b51565e61676d7175797c7f828385868788888787868583817e7b78746f6b65605c545046413a322b22191107000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c0f0200000000000000000000000000000000000000000000010c161f2a343d474f5960696e787f858b9095989b9ea1a8a3a4a4a5a5a4a4a9a29f9c9996918c868079706b605b534a42382e23171006000000000000000000000000000000000000000000000000000000030b12181d24292c3036393a3e41404547484849494848474641423e3b3a36312d2a251e19130c0400000000000000000000000000000000010a12191e2325262a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2423201c171008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060707070706040000010000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c09080603000000000000000000000000000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0706040100000000000000000000000000000000000000000000000000000000000000000000060b0e11111313131313131313131313131313131313131313131308070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070d11131417171b1f202021222121201f1c17191613120f0b060000000000000000000000000000000000000000000001080e13171a1a1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b181815110c06000000000000000000000000000916232f3c4855606b7074747474747474747474747474747476828f9ca9b6c2cfdce9ebded1c4b8ab9e918578747474747474747474747474747474736d63574b3e3225190c0000071c2936424f5c6975828f9ca8b5c2cfdbe8f3e7dcd0bfb3a6998c807366574e42372b1d140a00000000050f1a25313b454d5354595959595959595959595959595959595959585651493f34291d120500000000000000000000000000000008111a21282c2f30373737373737373737373737373737373737373737373737373737302f2c27211a1108000000000000000000000a141c262e373f464e555d60686e74797e8286898c8e90929894949594949791908e8b8885817c77726d66615a524c443c342b231910070000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000007131d28313c464f59616b707b838b91979d9fa7a8abadb2b0b1b1b2b2b1b0b3adaba9a8a19e98928d847d736c655c544a3f342822180b0200000000000000000000000000000000000000000000000000000001070c13181d20252a2d2e312f34383a3b3c3c3c3c3b3a393530322e2d2a26201d19130d080200000000000000000000000000000000000000070d131619191d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d171614100b050000000000000000000000000000000000000305061113131313131313131313131313131313130909070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b12171b1d1e202020202020202020202020202020202020202020201414110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607060b0f121314141514141312100c0609060503000000000000000000000000000000000000000000000000000003070b0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0b09050100000000000000000000000000000a1723303d4a5663707d8181818181818181818181818181818184919eabb8c4d1deebebdfd2c5b8ac9f9286818181818181818181818181818181817f7366594c403326190d00000d1a2733404d5a6673808d99a6b3c0cfdae6f1e9dccfc3b6a99c9083766a5f53473b2f261b120b06080a0f17212a36424d575e6166666666666666666666666666666666666665625b51453a2e221509000000000000000000000000000000000810161c2023242a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2322201c160f080000000000000000000008121c262e384049515860676d737a80858a8f9298999b9d9fa2aaa1a1a1a9a19e9c9b9897928e89847e79716c615e564e463d352b23190f0500000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000010d18242f3a434e58616b707d8590959ea1a9abb1b5b8b9bdbdbdbebebebebdbebab8b6b2adaaa29f96918a80776d665c50443f342a1d140a000000000000000000000000000000000000000000000000000000000001070d1113191e20212423292c2d2e2f2f2f2f2e2e2d29242522211e1a14110d08020000000000000000000000000000000000000000000002070a0c0d1111111111111111111111111111111111111111111111111111111111111111111111111111111111110a0a0804000000000000000000000000000000000000060b0f12131e20202020202020202020202020202020201615130f0a0400000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c0904000000000000000003080b0d0e1313131313131313131313131313131313070704010000000000000000000306080913131313131313131313131313131313130c0b0906010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e090806030000000000000000000000000000000000000000000000000000000000000000060e161d23272a2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c21201e19140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003050607080808070706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9196a1adb9c5d2dfebece0d3c7baaea298928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d83776a5d5144372a1e1100000b1824313e4b5764717e8a97a9b3bec9d5e1eeeaddd0c4b7ab9f94887b6e62574d41382d231d171515161a2129333b46535e696e737373737373737373737373737373737373726d62564a3d3124180b0000000000000000000000000000000000050b101416171d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d171614100b0500000000000000000000060f1a242e38404a525b626a6f7980868d92989c9fa3aaa8aaacaeb4aeaeaeb3adaba9a7a9a19e9a96918b847e756d6860584f473d352b21170b02000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000004111d2935404b555f6a707d8692979fa7adb3b8bcc1c4c5c9cfcacbcbcbcad0cac6c5c3bdb9b4aea8a19e928c81786d605b51463c2f261c11060000000000000000000000000000000000000000000000000000000000000104080d11131418181c1f2022222323222121201d19181514120e09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f202b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d23221f1b160f0700000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b19151009020000000001080e14171a1b20202020202020202020202020202020201413110d08010000000000040a0f1315162020202020202020202020202020202020191816120d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d121618191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1615130f0a040000000000000000000000000000000000000000000000000000000000000e1820282e333638393939393939393939393939393939393939393939392e2d2a251e170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c999a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea1a8b2bdc9d5e1eeefe2d6cabfb4aaa29f9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9084776a5d5144372a1e1100000915222f3c4855626f7b8897a1adb9c6d2dfebecdfd3c7bbb0a69a8d8074695e53493f342e2823222223262b333b454f59616e7b8080808080808080808080808080808080807f7265584b3f3225180c000000000000000000000000000000000000000407090a1111111111111111111111111111111111111111111111111111110a0907040000000000000000000000030e18212c36404a525c636d727c848d92989fa2aaacaeb4b5b6b8babfbbbbbabeb9b8b6b4b3adaba8a09e96918a827a6f6a60594f473d33291d140a000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000030e18212c3945515d676f7c869298a2a9b1b9bec4c8cdd1d2d5dad7d7d8d8d7dbd6d3d2cfc9c6bfbab2ada49c938d80746d63584e42382d22170b00000000000000000000000000000000000000000000000000000000000000000001050707070c1013141515161615151413110d0808070502000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c090400000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b22272b2d373939393939393939393939393939393939302f2c272119100700000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c030000020b131a1f2426272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d19130c04000000070f151b1f22222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2525221e18110901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e222425282828282828282828282828282828282828282822221f1b150e07000000000000000000000000000000000000000000000000000000000710202a32393f4344464646464646464646464646464646464646464646463b3936302920170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0b0b0c0c0b0b0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0b0d0d0e0e0e0d0d0b0a0807050200000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5a7a7a7a7a7a7a7a7a7a7a7a7a7abadb2bac4cfdae5f1f3e7dbd0c6bcb4aeaca7a7a7a7a7a7a7a7a7a7a7a7a7a79d9084776a5d5144372a1e1100000613202d394653606c7885919eabb8c4d0dbe7f0e4d8cdc2b8ac9f92867b6e655b50454039342e2f2e2f31373d454d57606b75818c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8174685b4e4135281b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202a333e48525c636e737f8791969fa2aaaeb3b8babfc1c3c5c6cad0c8cfc9c6c4c3c1beb9b8b2aca8a09e938f857c706b60594f453b2f261c11060000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000915202b37434e58606d79849198a3aab3bcc2c9cfd4d8dedfe0dfdcdbdadbdddee1dfdedad5d0cac4bdb9aea59d928c7f726a5f544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000004060708090909090807070501000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b191510090200000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3337394446464646464646464646464646464646463c3b38322b23190f0400000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c02010b141d242b3033343939393939393939393939393939393939392c29241e160d040007101920272b2e2f393939393939393939393939393939393932312e29231b130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e313235353535353535353535353535353535353535352f2e2b26201910070000000000000000000000000000000000000000000000000000040f1922323c444b4f51535353535353535353535353535353535353535353534746413b32291e1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080e11141416171819191817161414110e09080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507090e1214151618191a1b1b1b1a1a18161514120e09060401000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5b2b4b4b4b4b4b4b4b4b4b4b4b4b8b9bdc4ccd6e0ebf6f8ede2d8cec6bfbab8b4b4b4b4b4b4b4b4b4b4b4b4b4aa9d9084776a5d5144372a1e11000005121f2b3744505b6574818e9aaab4bfcad6e4eee9dfd3c6baaea2988f82776c605a514b443f3c3b3b3c3d43474f575e69707d8893999999999999999999999999999999998b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c45505a636e73808c9299a0a8aeb4babec5c7cbd0d0d2d3d6dbd4dad5d2d1cfcfc9c6c3bdb9b2aca59e9791867d706b60574d42382d22170b0200000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000020e1a26313a47535f6a74808d96a0aab4bcc5ced5dae1e2dbd6d3d2cfcecdced0d1d4d9e0e3e2dbd6cfc9bfb7aea49f92867c6f665b5044382b1f160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f44465153535353535353535353535353535353534948433d352b21160a0000000000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e140908131d262f363c3f4146464646464646464646464646464646464639352f2820160c040f19222b32373b3c46464646464646464646464646464646463f3e3a342d251b11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b252d343a3e3f41414141414141414141414141414141414141413c3b37322a22190e04000000000000000000000000000000000000000000000000000a15202b34444e565c5e6060606060606060606060606060606060606060605f54524c443b3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191e2021232425252525242321201e191515120f0a04000000000000000000000000000000000000000000000000000000000000000000000000000004090e1214151a1e2021232526272728272726252321201e1a1413110d080100000000000000000000000000000000000000000c1926333f4c5966727f8c99a5b2bfc0c0c0c0c0c0c0c0c0c0c0c4c5c9cfd6dfe8f2f2f2f4eae0d8d0cac7c5c0c0c0c0c0c0c0c0c0c0c0c0b7aa9d9084776a5d5144372a1e110000030f1b27333f495364707d8a98a2aebac7d2dde8efe2d6cabfb4aa9f948c7f726c605c54504a494848494a4e535960696e7b85929aa4a6a6a6a6a6a6a6a6a6a6a6a6a69f93867b6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d57616c73808d929fa3abb2babfc6cad0d3d6dcdddfdcd9d7d7d7dadddedcdad5d2cec8c4bdb9afa9a19892867d6f695e544a3f33281e130800000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000006121e2b37424d57626e7c87929fa8b2bcc6cfd7e0e1dad5d0cac7c5c2c1c0c1c4c5c8ced3d7dee7e0dad5c9c0baaea3999083786c6053463d32271b100300000000000002080d10121313131313131313131313131313131313131313131313131313131313131313131212100f0d0a0707050100000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c0200000000000000000000000000000000000000000000000000000000000000000000000b17222d38414950535e606060606060606060606060606060606056544f473d32271b0f020000000000000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100e1a242f3841474c4e53535353535353535353535353535353535345413a32281e130a15202b343c43474953535353535353535353535353535353534c4a463f372d23180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d19232d373f464a4c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4947433c342a20150a000000000000000000000000000000000000000000000000030f1b27323d465660676b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c615e564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000060b10151a1e2122252a2d2e30313132323231302e2d2a2522211f1b15100c0700000000000000000000000000000000000000000000000000000000000000000000070c10141a1e2121252a2d2e30323334343434343332302e2d2a2521201d19130f0a040000000000000000000000000000000000000c1926333f4c5966727f8c99a5b2bfcccdcdcdcdcdcdcdcdcdcdd1d2d5dae0e8e5e5e5e5e5e5eae2dbd6d3d2cdcdcdcdcdcdcdcdcdcdcdc3b7aa9d9084776a5d5144372a1e110000000b17222d3a4753606d7986929facb6c0ccd8e4f0e7dbd0c6bcb0a69f93887e736d66605c545655555657585f626b707b849197a1acb6b3b3b3b3b3b3b3b3b3b3b3a99c8f8376685e5246392d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18212e3a47535f69717e8a929ca4afb5bdc4cad0d6dbe0ddd8d4d2cfcccacacbcdd1d2d4d9e0dfd9d4cec9c1bbb3aaa29892857b6e665b50443a3024190d01000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000814212e3a47535f6975828f99a3afbac3ced8e1dfd6cfc9c6bfbab8b6b4b4b5b7b8bdc3c7ccd3dce4e5dbd7cbbfb4ab9f958a7e7164594f44382c2013070000000000060d14191c1f1f20202020202020202020202020202020202020202020202020202020202020201f1e1d1c1a171413110d0805020000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e140900000000000000000000000000000000000000000000000000000000000000000000030f1b27333f49535b606a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6360594f43382c1e1308000000000000000000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2115141f2b36414a52585a60606060606060606060606060606060605f524c443a2f24190f1b27323c464e54556060606060606060606060606060606060585651493f34291e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2b353f495156585b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b55544e463c32261b0f03000000000000000000000000000000000000000000000006131f2b37434e586772777979797979797979797979797979797979797979797975685e5246392d2014090000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f262b2d2e3036393b3d3e3e3f3f3e3e3d3b3a36302f2e2b261f1c18120b03000000000000000000000000000000000000000000000000000000000001070c12181c1f252a2d2e30363a3b3d3e404041414140403e3d3b3a36302d2c29241e1b150e0903000000000000000000000000000000000c1926333f4c5966727f8c99a5b2bfccd8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d0c3b7aa9d9084776a5d5144372a1e1100000006131f2c3945515d6774818d9aa4afbbc8d4dfe9ede2d7cec2bbafa49a938b8079716d66646362616264666a6f757d859196a0a9b3bebfbfbfbfbfbfbfbfbfbaada2978b7e7265564d41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202d39444f59626e7b86929fa4aebbc0c7cfd6dbe2e2d9d2ccc8c6c2bfbebdbec0c4c5c8ced6dbe1e0d9d5cdc4bcb4aaa1979083786c60564c4135291d1104000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000004101c2934404b55626e7b87939fabb5c0ccd5e0ded5cdc5beb9b4aeaca9a8a7a8aaacb2b7bbc1cad2dae4e7dcd1c6bdb1a79d9083776b6054483b2f221609000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a28262421201d1914120e090300000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100400000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b656c7779797979797979797979797979797979796f6b6054483a3025190d00000000000000000000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125191724303c47525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d564c4135291d131f2b37434e5860626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313d47515b62656868686868686868686868686868686868686868625f584e43372b1f130600000000000000000000000000000000000000000000000815222e3b4754606a7784868686868686868686868686868686868686868686877a6e6154473b30251a0e02000000000000000000000000000000000000000000000000000000000000000000000002080c141c23282b31373a3b3f414647494a4b4c4c4b4a494746423f3c3b37322c28231c150c07000000000000000000000000000000000000000000000000000000030b12181d23282c31363a3b3f424648494b4c4d4e4e4e4d4d4b494846423e3a39352f2b26201a140e060000000000000000000000000000000c1926333f4c5966727f8c99a5b2bfcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc3b7aa9d9084776a5d5144372a1e1100000004101d2935404b55626e7b87939facb9c1cdd7e1ece9e0d8ccc0b6aca49f928d837d7974716f6e6e6f7073777c81889197a0a8b2bbc5d0cccccccccccccabfb4aa9f92857a6d6053473b3025190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c4955616c76828f98a2aeb6c0cbd1d9e1e7dcd4d0c7c0bbb9b6b2b1b0b1b3b7b9bdc3cacfd7dfe5dfd6cec5bcb3a99f958b7e72685d5245392c20150a000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000006131f2c3845515c6774818d9aa4afbdc7d1dee1d5ccc3bbb3adaaa29f9c9b9a9b9da0a8aab0b8c0c8d2dde6e2d8cfc2b8ab9f95897c706356493d31261a0e02000006101a222a3035383939393939393939393939393939393939393939393939393939393939393939393938373533312e2d2a25211e1a140f0a03000000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2115090000000000000000000000000000000000000000000000000000000000000000000613202d394653606c788386868686868686868686868686868686867d6f63564c41362a1c1106000000000000000000000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b1a26333f4c58646e74797979797979797979797979797979797976685d5245392c2015222e3b4754606a767979797979797979797979797979797979726d62564a3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18242f39434f59626d7274747474747474747474747474747474747474746f6a5f54473b2e22150800000000000000000000000000000000000000000000030f1b27333f4953626f7c899693939393939393939393939393939393939393998b7f7265574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000050d13191e262e34383c4247484c4d5254565758585858575654524d4c4847433c38342e271e18120b03000000000000000000000000000000000000000000000000060d151d23292e34383b4246484c4d52545658595a5a5b5a5a59585654524d4b4745413a37322a261f180f0700000000000000000000000000000c1926333f4c5966727f8c99a5b2bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb7aa9d9084776a5d5144372a1e11000000000c18242f3947535f6975828f9ba5afbbc5cfdae6efe8ddd2c7beb6afa49c95918a84817e7c7b7b7c7d8083888e939aa1a9b2bac4cdd6d9d9d9d9d9d0c7baaea2988d8073675d514539291f140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424e5764707d8a949faab4bfc8d7dce3e5dbd3cac2beb6afaca9a6a4a4a4a7aaacb2babec5cdd6dfe8e0d7cfc5bbb1a79e92857a6d6054473d32271b0f030000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000714202d3a4753606d7985929facb6c0cfd9e3d9cfc3bab2a9a19e98928f8e8d8e91969c9ea6aeb6c0cbd4deeae1d4c8bcb1a79a8d807467574e42372b1e120600020d18222c343b414446464646464646464646464646464646464646464646464646464646464646464645454342403d3a3936302d2a251f1a150c07010000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c00000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b65727f8b9793939393939393939393939393938e8175685e5246382d22170b000000000000000000000000000000000000000000131f2c3946525f6c7986868686868686868686868686868686868175685c4f4235291c1b2734414e5a67748086868686868686868686868686868686867a6d6054473a2d2116222f3c4955626f7c86868686868686868686868686868686867f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000010101010c161f2935404b55606b727f81818181818181818181818181818181818181817c6f6255493c2f2216090000000000000000000000000000000000000000000005121f2b3744505b6573808d9aa89f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c908376695e52463a2d201509000000000000000000000000000000000000000000000000000000000000000000060e171e252a30383f44464d535559565e616364646565656463615e565955534e464440393028231d150c04000000000000000000000000000000000000000000020a11171f272f34394045464d535458575e616365666767676767666563615e575854514c47433c36312a2118120b030000000000000000000000000c1926333f4c5966727f8c99a5b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2aa9d9084776a5d5144372a1e110000000007121d2b37424d57626f7c89939da9b3becad6dde6eee4d9d0c7c0bbaea7a09d97918e8b898888898a8c90959b9fa4acb3bbc4ccd5dfe8e6e8ddd2c7beb2a89f92867b6e61554b403529170d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a7683909da6b0bcc6d0dae8e7ded3c9c1b8b0aca49f9c999797989a9ea0a8adb3bbc5cdd6e1e9e1d6cdc2b9ada1978c7f7265584e43372b1f13060000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000030f1c28333f4a5464707d8a98a2aebec7d2e1dcd1c7bdb2a8a097928b868381818284888f949da4aeb8c2cdd8e4e4d8cdc3b7ab9e9184786a5f53473a2e2114080008141f2a343e464d515253535353535353535353535353535353535353535353535353535353535353535251504f4d4a4746413b3a36312b262018120b0300000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e020000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606d7a85929f9f9f9f9f9f9f9f9f9f9f9f9f9f92867a6d61544a3f33281c0f030000000000000000000000000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c1b2734414e5a6774818d939393939393939393939393939393877a6d6054473a2d2116222f3c4955626f7c889393939393939393939393939393938b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000030506080a0c0d0e0e0e07121d28313945515d676f7d888e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e82756a5f54473b2e221508000000000000000000000000000000000000000000000613202d394653606c7884919eabacacacacacacacacacacacacacacacacacac9f93877b6e6154483c31261a0e0200000000000000000000000000000000000000000000000000000000000000081018202930363e424a5053575f616569686e70717172727171706e696966625f5853514a423e342e271e160d0400000000000000000000000000000000000000040c141c2328313940454b5153575e616568696e70717373747474737371706e696864605d55534e46423b3328231d150c0300000000000000000000000c1926333f4c5966727f8c99a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59d9084776a5d5144372a1e1100000000010e1a26313c4854606a74818e97a1adb9c1cbd4dee7ebe2d9d2ccc0b9b1aca9a19e9a979695949597999da0a7acafb6bec4cdd5dee7f0e7ddd8ccc0b6aca1968c8073695e52433a2f241805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b88959fabb8c2ced8e2eadfd5ccc1b7afa69f9a938f8c8b8a8b8d91969fa2a9b3bbc5cfdae6e8dfd6cabeb3a99d9184776a6054473b2e2215080000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000006121f2b3844505b6675828e9baab4bed0d9e4d7cbc0b5aba09691857e7976757475777c828d929da6b0bcc7d3e2eaded2c5b9aca196887b6e6255483b2f221508000d1925303b4650585d5f606060606060606060606060606060606060606060606060606060606060605f5f5e5d5b595754524c4846423b373129231d150d06000000000000000000000000131f2c3946525f6c7986868686868686868686868686868686868175685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000b17222d3845515d6774808d99a4afacacacacacacacacacaea3988c7f72665b5044382b1f14090000000000000000000000000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f9f93877a6d6054473a2d2116222f3c4955626f7c88959f9f9f9f9f9f9f9f9f9f9f9f9f988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000306060b0f1213151718191a1b1b1b18242f39434f59606d7984919a9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b989183796d60584e43372b1f130600000000000000000000000000000000000000000003101c28343f4a5463707c8996a1adb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9bbafa49a8c7f7265574d42372b1e120600000000000000000000000000000000000000000000000000000000000008111a222a323a414650545c6064696e7276787a7c7d7e7f7f7e7d7c7a7976726f6a65605c544f454039302820160d040000000000000000000000000000000000040d161e262e343d434b51555c6065696e7275787b7c7e7f8081818180807e7c7b7875716d67625f58534d453f342e271e150c03000000000000000000000c1926333f4c5966727f8c9898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989084776a5d5144372a1e11000000000009151f2c38434e58616d7a85929ea5afb9c2ccd5dee6ebe4ddd8ccc3bcb8b2adaba7a4a2a1a1a2a3a6aaacb1b9bbc0c7d0d6dfe7efe6ded5cbc3bbafa49a9184796d60564d4231281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a546673808d99a7b1bccad3e0eae5d9cec3b9afa59e949087837f7e7d7e80848a9297a1a9b3bec9d5dee9e6dacfc5b8aca095897c6f6256493c2f2316090000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000613202d394653606c7985929fabb8c5d0dee0d4c7bbafa39991847b716d676867686a6f77808d949fabb7c6d0dce7e1d5c9bdb2a8978a7d7164574a3e3124170b00101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a686664615e5654534d47433c342f271f180f060000000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000006111b2935404b55616e7b87939facb9b9b9b9b9b9b9b9bfb4aa9e9184786c6053463b31251a0e0000000000000000000000000000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7acacacacacacacacacacaca093877a6d6054473a2d2116222f3c4955626f7c8895a2acacacacacacacacacacaca5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000002050a0f1215171b1f202123252627282827272935404b55606b74808d96a0aca7a7a7a7a7a7a7a7a7a7a7a7a49f92867c6e675d51463c32261b0f0300000000000000000000000000000000000000000006121f2c3844505c6674818d9aa8b2bdc9c6c6c6c6c6c6c6c6c6c6c6c6c6ccc0b6ac9d908377695f53473a2d21150a000000000000000000000000000000000000000000000000000000000007101a232b343c444c525a61666d71777b7f838587898a8b8b8b8b8a898785827f7c77716d666159514b423a32281f160c01000000000000000000000000000000030d161f2830383f444f555c60676d71767b7f828587898b8c8d8d8e8d8d8c8b898784817e7a756f6a615f575145403930271e150a000000000000000000000c1926333f4c5966727f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c83776a5d5144372a1e110000000000030f1b27323d46525e68717e8b939ea7b1bac4ccd4dde6ece8ded5cec8c4beb9b8b4b1afaeaeafb0b3b6b8bcc3c8ccd2d9e2e8ede7ddd4ccc3b9b0a69f93887d70675d51443b301f160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c667683909ca9b6c2cddce5ede0d4c8bcb1a79e938e827c767371717174787e859297a1adb9c2ccd8e3ece1d4c8bcb1a7988c7f7265594c3f322619060000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000916222f3c4955626f7c8897a2adbac6d3dfdfd2c5b9ac9f92877c6f69605c555a585f656c7883909caab4bfcbd6e3e5dacebfb3a6998c807366594d4033261a0d00121f2b3844515d69747979797979797979797979797979797979797979797979797979797979797979797878767573706d6866615e57534e454039312a2118100600000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000d18242f3a46535f6975828f9ca7b1bcc8c6c6c6c6d1c6b9aca096897d7063574d42362a1c120700000000000000000000000000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4b9b9b9b9b9b9b9b9b9ada093877a6d6054473a2d2116222f3c4955626f7c8895a2afb9b9b9b9b9b9b9b9b9b2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000003090e12151b1f2122272b2d2e3032333434343433313945515d67707d88939fa8b2b4b4b4b4b4b4b4b4b4b4b0a69d928a7e716a5f554b41342a20150a000000000000000000000000000000000000000000000713202d3a4653606d7985929eabb8c4cfdad2d2d2d2d2d2d2d2d2d2d2ddd2c7b8aba095887b6e6155483c31261b0f03000000000000000000000000000000000000000000000000000000060f19222b353d464e565e616c70787e83888c8f9297969797989898979698928f8c88837e79706b605c544c443a31281d12070000000000000000000000000000020c151f28313a424a505960676d72797e83878b8f92979698999a9a9a9a9a99989696918e8b86817c756e69625b514b423930261c11060000000000000000000916232f3c4956626f7c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164584b3e3125180b0000000000000a16212a36414c56626c75818e959fa8b2bac2cbd6dbe1e9e7dfd9d4cfc9c6c4c1bebcbbbbbcbdbfc3c4c8cdd4d8dde4ebeae2dbd6cbc2bab1a79f948d80746b60554b4132291f0d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929facb8c5d2dfebebded1c5b8aca0958e81786f6a66646465666c717b85929ea6b0bbc7d3dfece5d9cec1b5a89b8e8275685b4f422e23170c0000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000c1926323f4c5965727f8c98a9b3becad6e2dbcec1b4a89b8e81756a5f57514b4e4e535b66707d8a98a3aebac7d3e0e7dbcec1b4a89b8e8175685b4e4235281b0f00131f2c3946525f6c7986868686868686868686868686868686868686868686868686868686868686868685848382807d7a77726e69625f58514b433b332a22180f05000000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000007131d2a36424d5763707d8995a0acb8c5cfdbd2d2d5c9bdb2a89b8f8275695e5346392e23180c00000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0c6c6c6c6c6c6c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc6c6c6c6c6c6c6beb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000040a0f141a1e21262b2e2d3337393b3d3f40414141414040434f59606d7984919aa4afbac1c1c1c1c1c1c1c1bdb2a89f948d80736c61584e433a2f22190e0400000000000000000000000000000000000000000004101c2934404b5563707d8a97a1adb9c6d6e0dfdfdfdfdfdfdfdfdfdfdfe4d4c8bcb1a7998c7f7366584e43372b1f12060000000000000000000000000000000000000000000000000000020b18212b343d474f585f686d757d848a9095989c9ea1a9a4a4a5a5a4a4aaa29f9c9995908b847d746d665d564c43392f24180e05000000000000000000000000000a141e27313a434b545c606b6f797f848b90939a9b9ea1a9a4a6a6a7a7a7a6a6a4a8a19e9b98928e88827b726d605c544b42382e23170d0300000000000000000815222e3b4754606a6f7272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272716c6256493d3024170a000000000000040d1925303a44505a606d79839096a0a8b1b9c1cad0d7e0e4eae5e0dad5d2d1cdcac9c8c7c8caccd0d1d4d9e0e4e8eae4e0d8d0cac1b9b1a8a0958f82786d60594f433a2f20170d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8898a2aebac7d3e0ece2d6cabfb4aa9d9183796d665f585857545b6069707d89949fabb7c3d0dde9eaddd1c4b7aa9e9184776b544a3f34281c100300131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000004101d2935404b556875828e9ba8b5c1d0dbe6d7cabdb0a4978a7d7164584e454041414a54606d7986929facb8c5d2dfe8dccfc2b5a99c8f8276695c4f4336291c1000131f2c3946525f6c798592939393939393939393939393939393939393939393939393939393939a93929291908e8c8a86837f7b756e6a605c554d453c342a21170c030000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000010e1a26313b4854606b7783909da9b3becad6e3e5d9cec4b9ac9f92877b6e61544a4034281c1004000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cdd2d2d2d2d2c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d2d2d2d2d2cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000003090e151b1f252a2d31373a3c3f4446484a4b4c4d4e4e4e4d4c4b55606b74808d96a0acb6c0cccecececececbbfb4aba1968f82786d605a50463c31281d10070000000000000000000000000000000000000000000006131f2c3845515c6774818e9ba9b3bec9d5e8f2ecececececececececf0e4d9cdc3b7aa9d9184776a5f53473a2e21160a00000000000000000000000000000000000000000000000000000a141d2a333d464f59606a6f7a818a91969da0a7a9abadb3b0b1b2b2b1b0b4aeaca9a79f9d96918a81786d685d554b40352920170d02000000000000000000000006111c263039434b555d666d737d848b91969c9fa4acabadb3b1b2b3b4b4b4b3b3b1b2adabaaa39f9b948f867f756d665c544a3f34281f150b010000000000000006131f2b37434e586062656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656564625a5045392d2115080000000000000008131e28323f45515c676d7a8491969fa7b0babec5ced4d9e0e3e8e6e1dfdedad7d5d4d4d5d6d9dddee0e4eae8e3e0d9d4cec6bfbaafa79f9590837a6d665c50473d31281d0e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996aab4bfcad6e2ece0d3c7baaea2988a7e71675d544e4b4a4a5057606b76828f9ca9b6c2cfdce9ebded2c5b8ab9f928578665c5044382c1f120600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000613202c3945515d677784919eaab7c4d1dde1d4c7bbaea194887b6e6155483c342f3845515c667784909daab7c3d0dde9dccfc3b6a99c908376695d5043362a1d1000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa49f9f9f9e9d9b999a93908c87817c736d675f574e463c33291e150a0000000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000009141f2c38444f5965727e8b97a2adbac7d1dce8e0d4c7bbafa3998c8073665c5144382c1f1509000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddadfdfdfd3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5dfdfdfd8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000060b141a20262b31363a3c434748495053545658595a5b5b5a5a59575d67707d88939fa8b2bec7d2dadadad5cbc3baaea39991847a6d665c50483e332a1f160c00000000000000000000000000000000000000000000000714202d3a4753606d7985929fabb8c5cfdae6f8f8f3efecebeceff3f8f5eaded1c5b8aca095887c6f6255483d32271b0f0000000000000000000000000000000000000000000000000006111c262f3b454e58606b707c848e939ea0a8acb1b6b8b9bebdbebebebebdbfbab8b6b1aba8a09d938e837a6d675d51453f32291e140800000000000000000000000b17232e38424b555d676d78808891969ea1a9acafb6b8b9bebebfc0c0c1c0c0bfbebdb9b7b4aeaca69e98928b81786d665c50443e31271d120700000000000000030f1b27323d464e54565959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959585650483e34291d110500000000000000020c16202834404b555e686e7b8490959ea6adb3bcc1c8cdd4d7dce0e3e7e9e7e4e2e1e1e2e3e6e9e9e7e3e0dcd7d4cdc8c2bcb4aea59e9590837a6e685e544a3f352b1f160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0bdd0dbe7ebdfd2c5b8ac9f9286796d60554b423e3e3f444f5965717e8b98a4b1becbd7e4ecdfd3c6baaea29886796d6053463a2d20130700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000714202d3a4753606d7986939facb9c6d2dfe0d3c7baada094877a6d6154473a2e2834404b54697683909ca9b6c3cfdce9ddd0c3b7aa9d9084776a5d5144372a1e1100131f2c3946525f6c7985929facacacacacacacacacacacacacacacacacacacacacacacacacacb6afacacababa9a8aca49f9d99928e8780796e695f584e453b30261c110600000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000003101c27333d4753606d7985929fabb5c0cbd7e3e3d7cbc0b5ab9e9185796d6053463c31261a0e010000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ece0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2ece5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000000000000000000000020a11171f252a32373b4246484e5355535b606163656667676767666664636d7984919aa4afbac4d0d9e4e2d7cdc3b9afa59f92877c6f685e544a3f362c21180d040000000000000000000000000000000000000000000004111d2935404b5564707d8a98a2aebac6d7e1ecf4ede7e2e0dfe0e2e7edf4ede0d4c8bcb1a7998d807366584e43372b1c11060000000000000000000000000000000000000000000000000b17222d38424d57606a707d8691969ea5acb2b8bcc2c5c6cacfcacbcbcbd0cac6c5c2bcb8b2aca59d959082796d605a50443b3025190e0300000000000000000003101c28343f4a545d676d79828d939aa0a8adb2b9bbc0c5c6c9cfcccdcdcdcdcdcccfc9c5c4bfbab8b0aaa29f938e82786d605a5043392f24180c00000000000000000a15202b343d4347494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b49453e362d22170c000000000000000000050e18232e39434c565f696e7a838f949fa2a9b0b8bcc3c7cbd1d3d7dcdcdddfdfe2e7e2dfdfdddcdcd6d3d1cbc7c3bcb8b0aaa29f938e837a6e685e564c42382e23190d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1becbd7e4e9dcd0c3b6a99d908376675c514339302d333d4955626f7c8895a2afbbc8d5e2eee2d6cabeb3aa94877a6d6154473a2e21140700131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0800000000000000000000000000000000000916222f3c4955626f7c8899a4afbbc7d4e0e0d4c7baada194877a6e6154473b302d37434e586a7783909daab6c3d0dde9ddd0c3b6aa9d9083776a5d5044372a1d1100131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9c0bbb9b9b8b7b6b5b6afacaba39f99928d837b6f6a5f574d42382e23170c01000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000b161f2c3945515d6773808d99a3afbbc7d4e0e8dcd1c7b9ada1978a7d7164574e42372b1d12070000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000060b141c222831363c43474d5354585f6266656c6e707273747474747373716f74808d96a0acb6c0ccd6e2e3d9d0c5bbb1a79d938b7f726a60564c42382e241a0f0600000000000000000000000000000000000000000000000613202c3945515d6775828e9baab3becad6e9f2eae2dbd6d3d2d3d6dbe2eaf2e5d9cec3b7aa9e9184776a605447382d22170b0000000000000000000000000000000000000000000000030f1c28333f4a545f696f7c869298a1a8afb9bdc4c8cdd1d2d6dad7d8d8d7dbd6d3d2cdc8c3bdb8afa79f958f81756c62564c41362a1f14090000000000000000040e18222b3844505c666d79828f949fa4acb2b9bdc4c8ccd2d2d1d0cac6c5c4c5c7cbd1d4d2d0cbc7c1bcb4aea59e948d80746c61554b4035291d100400000000000000040f19222b32373b3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d39342d241b11060000000000000000000007121d27303a444d575f686d79828b92979ea6acb1b9bbc0c5c7cbd1cfd1d2d3d6dbd6d3d2d1cfd0cbc7c5c0bbb9b1aca69e98928b81796d685e564c443a30261c1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1bed2dde8e8dbcfc2b5a89c8f827569554b403127222e3b4854616e7b8794a1aebac7d4e1ede0d4c7bbafa399867a6d6053473a2d20140700131f2c3946525f6c7985929facb8c5d2dfebe8dccfc2b5a99c8f8276695c4f433025190d06030000050504040200000000000000000a1724313d4a5764707d8a97abb5c0ccd7e3e2d5c8bbafa295887c6f62554b413d3c3f47535f6a7885929eabb8c5d1dee9dccfc3b6a99c908376695d5043362a1d1000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d2ccc8c6c5c5c4c3c1c0bbb9b5afaba39f9590857c6f695e544a3f34281e1308000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616e7b87929facb9c3ced9e4e3d5c9beb3a99c8f82766a5f5347392f24180c0000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000080f181d262d333b42464e54575e61666a6f7276797b7d7e7f80818181807f7e7c7d88939fa8b2bec7d2dee8ddd2c7bdb3a9a0958e81746d62584e443a30261c12080000000000000000000000000000000000000000000000000714202d3a4753606d7a86929facb8c5d0dbe6eae0d8d0cac6c5c6cad0d8e0eaeaded2c5b9aca096897c6f62544a3f33281c0f030000000000000000000000000000000000000000000006121f2b3844505b666e7b859298a2aab2bac1c9ced4d9dedcd7d3d2d0d0d1d2d4d8ddd8d4cec8c0b9b1a79e938b7e71685e52463b31251a0e00000000000000000a15202b37434e58606d78828f959ea6afb6bec3c9cfd4d8cdc8c4c3bebab8b8b9bbc0c6c8ccd2d6d3cec6bfbaafa69d928a7d70675d5145382c1f1308000000000000000007101920272b2e2f323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323231302d29221b12090000000000000000000000000b151e29323b454d565e676d757e858f949da0a7acafb5b9babfc1c3c4c5c6cad0cac6c5c4c2c1bfbab8b5afaca7a09d948f867e756d675e564c443b32281e150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97acb6c0ccd8e4e9dccfc2b6a99c8f837669574d42372c2a2e3b4855626e7b8895a1aebbc8d4e1ecdfd2c5b9ac9f928679675d5145392c20130600131f2c3946525f6c7985929facb8c5d2dfebe9dcd0c3b6a99d9083766a564c4135291d1312100c06121211100e0b060000000000000c1925323f4c5865727f8b98a5b2bed2dde8e5d8ccbfb2a5998c7f72675c524c4949495059626f7b8897a1adb9c6d2dfe8dbcec2b5a89b8f8275685c4f4235291c0f00131f2c3946525f6c7985929facb8c5d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2ddd8d4d2d2d2d1d0d2ccc8c6c0bbb5afa7a09791857b6e665c50443a2f24190d010000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3946535e6975828f9ba7b1bcc8d4e1e6dacfc4b7ab9f94887b6e62554b4035291d100400000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000009111a212a2f383f444d53585f62696e73777c7f828587898b8c8d8e8e8d8d8c8a898a939aa4afbac4d0d9e4ded7ccc0b5aba2979083796d605b51463d32291e140a00000000000000000000000000000000000000000000000005111d2935414c5664717e8a98a2aebac7d3e1ece2d8cec6bfbab8babfc6ced8e2ebe1d5c9bdb2a89a8d8074665b5044382b1f120600000000000000000000000000000000000000000004111d2935414c56606c78829097a1aab4bcc4ccd5d9e0d9d4d1cbc7c5c3c3c4c6c8ccd2d8ddd9d4cbc2b9afa59f92867a6e61574d42362a1d1207000000000000030f1b26313a47535f6a727f8c939ea7b0bbc0c7d0d5d9d2ccc2bcb8b6b3adababacafb5b9bbc0c7d0d9d8d0cac1b8aea49e9184796d6053473a3025190d010000000000000000070f151b1f222326262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262524211d17110900000000000000000000000000030c17202a333b444c555d606c717b828a90959c9fa3abacaeb4b4b6b7b8babfbabfbab8b7b6b4b4aeacaba39f9c95908a827b716d605d554c443b322920160c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c899aa4afbbc8d4e0eaded1c4b7ab9e918478695f53473e393639414c5663707d8996a3b0bcc9d6e3ebded1c4b8ab9e9185786b554b4035291d100400131f2c3946525f6c7985929facb8c5d2dfebeaddd1c4b7aa9e918477685e5246392d24201f1c171e1e1e1e1d1b17120b04000000000d1a2734404d5a6773808d9aa6b3c0cdd9e6eaded1c4b7ab9e9184796d615e565656535b606b74818e9aa9b3bec9d5e2e7dacdc0b4a79a8d8174675a4e4134271b0e00131f2c3946525f6c7985929facb8c5d2dfdfdfdfdfdfdfe4dfdddcd5d5d5d5d5d5d5d5d5d5d6d6d9dddfdededcddd8d4d1cbc7c0bbb1a9a1979083786d60564c4135291d11040000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000007121d2a36424d5763707d8995a0acb8c5cfdae6e1d3c7bbb0a69a8d8074675d5145392c1f150a00000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000020a131b232c333c424a50575e616a6f757b8084888c8f92979698999a9a9a9a99999796979fa4acb6c0ccd6e2e0d5ccc4bbafa49992857b6e675d51493f342b20170c020000000000000000000000000000000000000000000000000713202d3946525d6875828f9caab4bfcad6e2e7dbd0c6bcb4aeacaeb4bcc6d0d9e3e5d9cec4b8ab9e9184786c605346392e23170c0000000000000000000000000000000000000000000713202c3945525d68727f8b949fa9b3bcc5ced6deded5cec8c6bfbab9b7b6b8b9bbc0c7ccd2d9ddd4cbc1baaea2988d8074695e5346392e23180c00000000000006121f2b37434e58626f7c86929fa6b0b9c1ccd2d9d9d0c7c0bbb1aba9a9a29f9e9fa3abacafb6bec7d2dddbd6cac0b9aca1968b7e7165564c4135291d1105000000000000000000040a0f1315161919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919181715110c06000000000000000000000000000000050e18212a323a434b515a62696e757d83898f92999c9fa3aaa7a9aaacaeb4adb4aeacaaa9a7aaa39f9c99928f89837d766e69625a514b433a322920170e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86939facb9c6d2dfecded2c5b9aca196887b6e615950474541464b525d6873808d9aa6b3c0cdd9e6e8dccfc2b5a99c8f8276695c4f432f24180d0100131f2c3946525f6c7985929facb8c5d2dfebecdfd2c6b9ac9f93867a6d6154473d352f2d2c28232b2b2b2b2a27231d160e050000000e1b2835414e5b6874818e9ba7b4c1cedae7ebded2c5b9aca1968e81756e6864636363656c717d87939facb9c5cfdae6e4d8ccc0b6ac998c7f7266594c3f3326190c00131f2c3946525f6c7985929facb8c5d2dfebececeee6ded8d3d0cfc8c8c8c8c8c8c8c8c8c8c9caccd0d1d4d9dfe7e4e0dcd7d1cbc3bbb2a99f958c7f72685d5245392c2014080000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000010e1a25313b4854606b7783909da9b3becad6e3e3d8cdc2b8ab9f9285796d6053473c32271b0f01000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000000000010a141c252d353e464e545b60696e757c82878c9196999c9fa2a9a5a6a7a7a7a7a6a6a4a2a3acafb6bec7d2dee5d9cec4bab0a69f93877d70695f554b40372d22190e05000000000000000000000000000000000000000000000000000714212e3a4754616d7a86929facb9c5d0dbe7e2d6cabfb4aaa29fa2aab4bdc7d2dde8dfd2c5b9ada196897c7063544a3f34281c10030000000000000000000000000000000000000004101c2834404b55606d7a85929fa6b0bbc5ced7e0ddd4ccc3bdb9b4aeacaaa9abacafb6bbc0c7d0d9ddd6cabfb4aa9f92867b6e61554b4034281c100400000000000815212e3a47535f6a75828f98a3aeb8c1cbd8ddddd2c7beb6afa79f9d9797929192999a9fa4acb6c0ccd8e1dcd5c9bdb2a89d908377685e5246392d2013070000000000000000000000030608090c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a0805000000000000000000000000000000000000060f1820293139404550575e616b70777d82868b8f9298989a9c9e9fa2aaa0aaa29f9e9c9a9898928f8c86827d77706b615f5750454039312920170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677784919eaab7c3ced9e5e1d5c9bdb2a89a8d81746b615a53514d52545c606d7a85929eabb8c5d1deebe2d5c9beb3a99a8d8073675a4d4034271a070000131f2c3946525f6c7985929facb8c5d2dfebede0d4c8bbafa49a8a7d7064594f45403c3a38342e3838383736332e2820170e0400000f1c2935424f5c6875828f9ba8b5c2cedbe8ede1d5c9bdb2a89d938e817a7571706f7073787e869299a4afbbc7d6e1ece0d4c8bbafa49a897d7063564a3d3023170a00131f2c3946525f6c7985929facb8c5d2dfebf8f0e6dcd4cdc7c4c3bcbcbcbcbcbcbcbcbcbcbcbdbfc3c4c8cdd6dbe2e9e8e3dcd7cdc4bbb1a79f92857a6d6054473b3025190e0200000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c38444f5965717e8b97a1adb9c7d1dce8dfd3c6baada2978b7e7165584e43372b1e1308000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000a131c262e373f474f585f666c727b82878e92999ea0a8a9abadb3b1b2b3b4b4b4b3b2b1afb0b9bbc0c7d0d9e4e1d5c9bdb2a89e948c7f736b61574d43392f251b10070000000000000000000000000000000000000000000000000005111e2a36414d5665717e8b99a3aebbc7d3e2ece0d3c6baaea2989298a2abb5c0ccd7e3e1d5c9bdb2a99a8d8174665c5044382c1f12070000000000000000000000000000000000000006131f2c3845515c6773808c97a2adb8c2cdd7e0dfd4cbc2bab2acaba39f9d9d9e9fa4acafb6bec7d0d9dbd0c5bbaea3998d8073675c5145382c1f130700000000030f1b27333f4953626f7c88949eaab4bfcac6c6c6c6ccc0b6aca49f95908a87858586888e939aa4afbbc5d0dbe5dacec4b9ac9f93867a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e171f282f353f454d525961636b70757a7f8286898c8e909192989393939892918f8e8b8986827f7b76706b636159534d453f352f271f170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b556774818d9aa8b2bdc8d4e0e5dacec4b9ac9f92877d706c63605d565e61666d75818e97a2adb9c6d2dfe6dcd2c6b9ada197897d706356493d3023160a0000131f2c3946525f6c7985929facb8c5d2dfebf0e4d8ccc0b6ac9c8f82766b6058514b4846443f4545454544433f39322920160b0000101d2a3643505d697683909ca9b6c3cfdce9f1e5dacec4baafa59d938f86817e7c7c7d7f838b9298a2abb5c0ccd7e8ecdfd2c6b9ac9f93867a6d6154473a2e21140700131f2c3946525f6c7985929facb8c5d2dfebf4e9ded4cac2bbb7b6afafafafafafafafafafafb0b2b7b8bcc3cad0d7e0e9eee8dfd6cdc2baada2978c7f7265564d41362a1e110500000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000003101b27323d4753606d7985929eabb5c0cbd7e3e2d6cabeb3a99d9083776a6054473a2f24190d010000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000000009121c252e3840495159616a6e787f868e939a9fa3abacb2b5b8babebebfc0c1c1c0c0bfbdbcbdc6c8ccd2d9e2ebded2c5b9aca0968f82776c60594f453b31271d120900000000000000000000000000000000000000000000000000000714202d3946525e6876838f9cabb5bfcbd7e3e3d7cbc0b5ab9f92859299a4afbbc7d4e0e6dacfc4b8ab9e9285796d6053463a2e23180c000000000000000000000000000000000000000713202d3a4653606d7985929fa9b3becbd4deded7cdc2b8b0a8a09e9992909091939a9fa4acb5bdc7d2ddd7cbbfb5ab9e9285796d6053463a2e23180c0000000005121f2b3744505b6574818e9aa6b0bcb9b9b9b9b9b9b9bbafa49a938c837e7a7878797c8188939faab3becad6e2e0d4c8bbafa49a8a7d7063574a3d3024170a00000000000000000002080d101213131313131313131313131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d161d2429333b42464f55596063686e7276797c7f818384858686878686858483817f7c7976726e68636159554f47423c3329241d150d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3d495663707d8996a0acb8c2ced7e1e0d3c7bbafa39992867e75706d676a686e7179818e939ea9b3becad6e2ded6cabfb4aa9e9285796d6053463a2d2013070000131f2c3946525f6c7985929facb8c5d2dfebf4e8ddd2c7b7ab9f94897d706a605d555553504a51515151514f4b443b32281d120600111d2a3744505d6a7783909daab6c3d0dde9f6ebe0d6ccc0b7afa59e98928e8b89898a8c90959fa2aab4bdc7d2dde8e3d7ccc0b5ab9d908377685e5246392d20130700131f2c3946525f6c7985929facb8c5d2dfebf0e4d8cdc2b8b0aba9a2a2a2a2a2a2a2a2a2a2a3a3a6aaacb1babfc6ced7e2edf1e8dfd6cabeb3a99d908377685e5246392d20140700000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2c3845515c6773808d99a3afbbc7d3e0e6dbd0c5b8ab9f95887c6f62564c4135291d11040000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000007111b242e37404a525b626b707c838b92989fa4acafb5b9bdc2c5c6cacfcccdcdcdcdcccccac9cad2d4d8dde4ebeaddd1c4b7aa9e91847a6d655b50473d33291f150b0000000000000000000000000000000000000000000000000000000814212e3b4754616e7b87939facb9c6d1dce7e0d4c7bbafa3998c7f87939facb9c6d2dfecdfd2c6b9ada197897d7063554b4034281c10040000000000000000000000000000000000030f1c28333f4a5464717d8a97a2adbcc5d0d1d1d1d0c5bbb0a69f96918a86848385878d939aa4abb5c0ccd7dcd1c6b9ada1978a7d7164544a4034281c10040000000613202d394653606c7884919eabacacacacacacacacacb3a99f93887f78716d68666d6f747f8b98a2aebac6d3dfe4d8ccc0b6ac988b7e7265584b3f3225180c0000000000000000060d14191c1f1f202020202020202020202020202020201c1b191510090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c1218212930363e44484f54565e6165676d6f7274767779797a7a7a7979777674726f6d6765615e56554f48443e37312a2118120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d394653606c7884919da7b1bcc6cfd9e2d7cbc0b5aba298928a827d7a7877787a7e848e939da5afbbc5cfdbdfd6ccc4baaea2988d8073665c5044382b1f12060000131f2c3946525f6c7985929facb8c5d2dfebf9eee4d3c7bbb0a69f92857c736d676462605c545e5e5e5e5e5b564e44392e23170b00111e2a3744515d6a7784909daab7c3d0ddeaf1e9e1dad5c9c0b7afaaa39f9b97969696999da0a7aeb4bcc6d0d9e3e7ded4c7bbafa4998c807366564c41362a1d110500131f2c3946525f6c7985929facb8c5d2dfebecdfd3c7bbb0a69f9c959595959595959595959697999da0a7aeb4bcc6d0dbe7f2f1e6dbd0c5b8aca095877a6e6154473b2e21140800000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0808080808080808080707040100000000000000000000000000000000000000000000000000000004101c2934404b55616e7b86929facb9c3cdd9e4e1d4c8bcb1a79a8e8174685d5245392c20160b0000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000040e19232d363f49525c636d727d8690959fa2aaafb6bbc0c7c9ced2d3d6dbd9dadadadad9d9d7d5d6dfe0e4e8eef5e4d7cbbeb1a4988b7e716c625b51483e352b21180c030000000000000000000000000000000000000000000000000005121e2a36424d5765727f8b99a4afbbc7d4e3ecdfd2c5b9ac9f92867a83909ca9b6c3ced9e5e2d5c9beb3a99b8e8174675c5145382c1f1307000000000000000000000000000000000006121f2b3844505b6675828f9ba9b3bec4c4c4c4c4c4beb3a99f9490847e797776787b80889399a4afbbc7d1dcd5c9beb3a99b8e8175665c5144382c1f12060000000915222f3c4855626f7c8896a1a0a0a0a0a0a0a0a0a0a0a0a2978d80736c65615e5c60626d7985929fabb8c5d2dee8ddd2bfb2a6998c7f7366594c403326190d000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070f171f252a33383d44484c5254555d60636567696b666d6d6d6d6c666b69676563605d5554524d48443d38332b261f180f070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b66717e8b959faab4bdc7d0d7dcd1c7bdb4aaa29f948f8986858485878b91969da5afb7c1cdd7dcd7cdc4bab0a69f92867a6d61544a3f34281c10030000131f2c3946525f6c7986929facb8c5d2dfebf8efe3d8ccc2baada29792867f7974716f6d666b6b6b6b6b6a6760564b3f33271b0e00111e2b3744515e6a7784919daab7c4d0ddeae9dfd7cfc9c6c5c1bcb4aeaca8a4a3a2a3a6aaacb1babfc6ced8e2e8dfd7ccc0b5ab9f93877b6e6154483b3025190d0100131f2c3946525f6c7985929facb8c5d2dfebeaddd0c4b7ab9f949089898989898989898989898a8c90959fa2aab4bfcad6dfeaf5ece1d4c8bcb1a7978a7d7164574a3e3124170b00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c151515151515151515151413110d080100000000000000000000000000000000000000000000000000000c18232f3946525e6975828e9ba7b1bcc8d4e1e4d8cdc3b8ac9f92867a6d6054473d32271c100200000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000020c16202b353e48515b636e737f8792989fa7aeb4bbc0c7cbd1d5d9dedfe2e6e5e6e7e7e7e6e5e4e2e3ecedf0f4f9f8ebdfd2c5b8ac9f92867e726d625a50473d332a1e150a000000000000000000000000000000000000000000000000000714212d3a46535f697683909dabb5c0ccd7e3e9dccfc3b6a99c9083767f8c98a7b1bcc8d4e0e6dacfc5b8ab9f9285796d6053463a2f24180d01000000000000000000000000000000000613202d394653606c7985929fabb8b8b8b8b8b8b8b8b8ada297908279716d676a696e747e87939fabb5c0cbd7dacfc5b8ab9f9285796d6053463a2d2013070000000b1824313e4b5764717e8a93939393939393939393939393939285796d605b5353535b606b7885929eabb8c5d1dee5d8ccbfb2a5998c7f7266594c3f3326190c00000000000006101a222a30353839393939393939393939393939393939393534312c261e150c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a21282c33383b4146474b515356595b5d545c60606060605b545c5b585653514b4746413b38332c28211a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54606d78839098a2abb5bdc5cdd7d9cfc5bcb4aea69e9c999291919297989ea0a8afb7c0c9d3d9d1cbc2bbb2a89f948c7f72685e5242382e23170b000000131f2c3946525f6c7986929facb8c5d2dfebf8f4e9ded6cabeb3a9a298928c85817e7b797978787878787772675b4f43362a1d1000111e2b3844515e6b7784919eaab7c4d1ddeae1d7cdc5beb9b8b9babfbab8b4b1afafb0b2b7b8bcc3cad0d8e0e8dfd6cdc5bbafa4998f8275695e53463a2d1e13080000131f2c3946525f6c7985929facb8c5d2dfebe9dccfc3b6a99c90827c7c7c7c7c7c7c7c7c7c7c7d7f838a9298a2aebac3cdd9e4f0f0e4d9cebfb2a6998c7f7366594c403326190d00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423529222222222222222222222221201d19130c040000000000000000000000000000000000000000000000000007121d2a36424d57636f7c8995a0abb8c5cfdae6e0d3c7baaea2988b7f7265594f44382c1e140800000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000008131e28323d47505a636d73808b9299a2aab1babfc6ccd2d7dce3e5ebe7e3e0dfdddcdcdcdddfe0e3e8ebedf1f6fcf9ece0d3c7baaea39892877f726c61594f453c30261c11060000000000000000000000000000000000000000000000000815222e3b4855616e7b88959fabbdc7d2dde8e0d4c8bcb1a7988c7f727b8895a0acb8c5d1deeadfd3c6baaea2988a7d7064554b4035291d1104000000000000000000000000000000000916222f3c4955626f7c8897a2ababababababababababab9f92857a6d67605c575e616c74818e99a3afbbc7d3dfd3c6baada297897c6f6356493c302316080000000d192633404c5966737f868686868686868686868686868686868175675d535b6062656c717d8997a1adb9c6d2dfe4d8cbbeb1a5988b7e7265584b3f3225180c0000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e161c21272c3036393b404547494c4e504a515353545353504a504e4c494745403b3936302c27211c170e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844505c666e7b869299a3abb3bbc2ccd2d7cec5bebab0aaaba39f9e9d9ea1a9aaacb2bac0c9d2d6cfc7c0bbb1a9a1969082786c60564c4130261c1106000000131f2c3946525f6c7986929facb8c5d2dfebf8faf2e6dbd0c5bcb3aaa39f98928e8a888685858484848484776a5e5144372b1e1100111e2b3844515e6b7784919eaab7c4d1dde6dacfc5bbb3adabacaeb4bcc5c1bebcbcbdbfc3c5c8ced6dbe2e3dcd7cdc5bbb2a89f93877c6f62574d42362a1e0c020000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756f6f6f6f6f6f6f6f6f707073777e86929fa7b1bcc8d4e0ecf5e7dacdc1b4a79a8e8174675b4e4134281b0e00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42352f2f2f2f2f2f2f2f2f2f2f2f2d2c29241e160d04000000000000000000000000000000000000000000000000010e1a25303b4854606b7783909da9b3bec9d5e3e2d6cabfb4aa9d9184776b6054483b3025190e00000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000040d1924303a444f59616c727f8c929fa3abb4bcc2cad0d8dde4e8e4e0dddcd7d3d2d1d0cfd0d1d2d4d7dcdee1e5ebf1f6efe3d6cbbfb4aaa39993887e716b60574d42382e23170c040000000000000000000000000000000000000000000006121f2b37434e5866727f8c99a7b1bcd0d9e3eaded1c4b8aca095887b6e7784909daab7c3cfdae5e2d6cabeb3aa9b8e8175675d5145392c201308000000000000000000000000000000000b1825323e4b5865717e8b989e9e9e9e9e9e9e9e9e9e9e9e998c7f73685e55514d525a616e7b86929facb9c5d2dfd6cabeb3a9998c7f7266594c3f3025190d0100000613202d394653606c7879797979797979797979797979797979786c606265656c6f73787e85929fa9b3bec9d5e2e1d5c9bdb2a8978a7d7064574a3d3124170a000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10161c1e252a2d2f35383a3c3f414340444647474746443f43413f3c3a38352f2d2a251f1c16100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c28343f4a545f69717e879299a2a9b0bbc0c7d0d7d0cac1bbb7b5afacabaaabadb3b7b8bdc3ccd2d6ccc4bdb5afa79f9791847b6e665b50443a301e140a00000000131f2c3946525f6c7985929facb8c5d2dfebf8fff7ece1d7cec5bcb4aeaaa29f9b97959892919191919186796c5f5346392c201300111e2b3744515e6a7784919daab7c4d0dde2d5c9beb3a9a19e9fa3aab4bfcacfc9c9c9ccd0d1d4d9dfdfdcd7d1cbc3bbb3a9a0968d80746a5f53453b31251a0e000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756862626262626262626364666c717e8a95a0abb8c4d1ddeaf4e7dbcec1b4a89b8e8175685b4e4235281b0f00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423b3b3b3b3b3b3b3b3b3b3b3b3b3a39352f2820160c0100000000000000000000000000000000000000000000000009141f2c38434f5964717e8b97a1adb9c6d1dce7dbd0c6b8aca096897d7063564c41362a1c1106000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c000000000000010c161f2935414c56606b717e8b919ca4afb5bdc5ced6dbe2e8e4dfd8d4d1d1cbc7c5c4c3c3c3c4c5c7cbd1d2d5d9e0e5ebf3e7dcd0c6bcb4aba49a92877d70695f544a3f342820150a000000000000000000000000000000000000000000000814212e3a47535f6a7783909daab7c2cdddebeaddd0c3b7aa9d9083776973808c99a8b2bdc9d5e1e6dbd0c5b8ac9f92867a6d6053473a2f24190d010000000000000000000000000000000d1a2733404d5a6673808d9191919191919191919191919191877b6e61564c454246525e6976828f9ca9b6c2cfdcdbd0c2b5a89c8f827569564c41362a1e1105000006121f2b3844505b666c6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c666c6f7275787c80848a9297a2adbbc5cfdae6dcd2c5b9aca196877b6e6154473b2e21140800000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c211509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1014191e2024292c2d3032342e34383a3a3a3a3938332d3432302d2c2924201e1914100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424d57616c717e8792979fa6afb5bdc7d2dbd6ccc7c7c0bbb9b8b7b8b9bec4c5c8ced5dacec4bab2aba39f9590857b6e695e544a3f32281e0c0200000000131f2c3946525f6c7985929facb8c5d2dfebf8fffbf3e9e0d7cec6bfbab3aeaba7a4aaa29f9e9e9e9e9286796c5f5346392c201300111e2a3744515d6a7784909daab7c3d0dddfd2c6b9ada197929298a3aeb9bec5cbd1d4d7dcd8d8dbd6d3d1cbc7c0bbb1a9a1979184796d60584e4333291f1409000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5656565656565656575a616c7783909daab6c3d0dde9f4e8dbcec1b5a89b8e8175685b4f4235281c0f00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f48484848484848484848484848484745413a32281e1308000000000000000000000000000000000000000000000000020f1b27323d4653606d7985929eabb5bfcbd7e3e2d4c8bdb2a89b8e8275685e5246382e23170b000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c00000000000007131d28313a45525d68707d87929fa3adbbc0c7cfd7e0e7e8dfd8d4cdc8c4c3bfbab9b7b6b6b6b7b9bbc0c4c5c9ced5dae0e8ede2d8cec6bdb5aca39992857b6e665c50443c31261b0f050000000000000000000000000000000000000000000815222f3b4855626e7b8895a0acb8c5d1deeae1d5c9bdb2a8998c8073666f7c8896a1adb9c5d2dfebe0d3c6baaea2988a7e7164564c4135291d11040000000000000000000000000000010e1a2734414d5a6774808485858585858585858585858585858376695e53443d3a424d5766727f8c99a5b2bfd0dbded1c5b8ab9e928578685e5246392d2014070000030f1c28333f4a545b6060606060606060606060606165676d707376797b7e8185888d91969fa2a9b3becdd7e1ddd7cbbfb5ab9e918478695e52463a2d2014070000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1114181d1f2023262823282c2d2d2d2d2d2b2822282523201f1d1814110e0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303c45505a616c717d8590949fa4abb5c0ccd7ded7d3d1cbc7c5c4c4c5c6c9cfd2d4d9e0d5c9bdb2a8a199928d837b6e695f574d42382d20160c0000000000131f2c3946525f6c7985929facb8c5d2dfebf8fbf1e9e1dbd6d3d0cbc5bebab8b4b1b4aeacababab9f9286796c5f5346392c201300111d2a3744505d6a7783909daab6c3d0ddded1c5b8ab9e928586929fa3adb3babfc5c7cbd1cccbd0cac6c5c0bbb5afa7a09792857b6e675d51463c3121170d03000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f494949494949494a505a6673808d99a6b3c0ccd9e6f3e7dacdc0b4a79a8d8074675a4e4134271b0e00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c55555555555555555555555555555554524c443a2f24190d010000000000000000000000000000000000000000000000000a161f2c3845515c6773808c99a3aebbc7d3e0e5d9cec3b9ac9f92867a6e61544a3f34281c10030000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c0000000000010d18242f3a43505a606d7a859199a3aeb5bfcbd1d9e1e9e4ddd8cdc8c3bcb8b6b4aeacaaa9a9a9aaacafb5b7b9bdc4c9ced6dee4eae0d8d0c7beb4aba2979083786d60584e43372b21160b000000000000000000000000000000000000000006131f2b37434e586673808c99a7b1bcc8d4e0ebded2c5b9aca096887c6f626a7884919eabb7c4cfdbe6e2d6cabfb4aa9c8f8275685d5245392c2013080000000000000000000000000000000d1a26333f4c58646e74787878787878787878787878787878767166574d4c4a4745495663707c8996a9b3becad6dfd2c6b9ada197877a6e6154473b2e2114080000000b17222d38424a5053535353535353545c6064696e72767a7d808385888b8e9297999ea1a8adb3bbc5cfdfdcd6cbc2bbaea3998c807366574d42362a1e11050000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105070c10131416191b181c1f20202120201f1c171b19161413100c07050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2a333e48505a616b707b828b9399a4afbbc7d4e0e0dad5d2d1cccac9cacdd2d3d6dce2ded2c5b9aca196918780796e695f574d453b2f261c0e050000000000131f2c3946525f6c7985929facb8c5d2dfebf8f3e9dfd7cfcac6c5c6cacac6c5c1bdbfbab8b8b7ac9f9286796c5f5346392c201300101d2a3643505d697683909ca9b6c3cfdcddd0c3b7aa9d90837e8b919ea2a9aeb4b9bbc0bebfbfbebfbab8b5afaba39f9590857c6f695f554b40342a200f0500000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423c3c3c3c3c3d3f4c5865727f8b98a5b2becbd8e5f1e6d9ccbfb3a6998c807366594d4033261a0d00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756862626262626262626262626262626262605d564c4135291d110400000000000000000000000000000000000000000000000004101c2834404b55616e7b86929facb9c2cdd8e4e0d3c7bbaea3998c7f73665c5044382b1f14090000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c000000000004111d2935404b55616c75818e97a1abb5bfc7d7dce3ebe2d9d2ccc2bcb8b1abaaaba39f9e9d9c9d9e9fa3abaaacb2b9bdc4ccd3dbe3eae2d9d0c6bdb3a99f958c7f736a5f53473d32271c1004000000000000000000000000000000000000000815222e3b4754606a7784919eaab7c3ced9e4eaddd1c4b7aa9e9184776a5f6774808d9aa9b3becad6e2e7dbd0c5b9ac9f92867a6d6054473a3025190d0100000000000000000000000000000b1723303c47525c64676b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a665f5c5b595653514b54616d7a8797a2adbac6d3dfd6cabeb3a996897c706356493d3023160a00000006111c262f383f44464646464b515961666d71767b7f8386898c8f9298989b9ea1a9abacb2babec5cdd7d7d0cbc1b9b0a69f92867b6e6154483b30251a0e020000000000131f2c3946525f6c7986868686868686868686868686868686868175685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c070c10121314141413120f0b060c09070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18212c363e48505961696e767e86939facb9c6d2dfd6cec9c5c4bfbdbcbdc1c5c7cbd0d8ded1c4b7ab9e91847c736d675e574d453b33291d140a000000000000131f2c3946525f6c7985929facb8c5d2dfebf7ece1d7cdc5bebab8babec5cdd2ced0cac6c5c4b9ac9f9286796c5f5346392c2013000f1c2935424f5c6875828f9ba8b5c2cedbddd0c4b7aa9d9184777f8a92979fa3abacafb5b2b2b2b1b4aeacaba39f99928d837b6f6a5f574d43392f22180e0000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423d3d3d3d3d3d404b5566727f8c99a5b2bfccd8e5ede0d4c8bcb1a7978a7e7164574b3e3124180b00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d685d5245392c201307000000000000000000000000000000000000000000000000000c18232e3946525e6975818e9ba7b1bcc8d4e1e3d7cbbfb5ab9e9184786d6053463b31261a0e0000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c00000000000613202c3945515d67707e8a939ea9b2bdc6d1d9e8ebe2d9d0c7c0bbb1aba79f9d98999291909090919299999ea0a8acb2bac1c9d1dae3ebe2d8cfc5bcb1a79f92877c6f62594f44382c20150a000000000000000000000000000000000000030f1b27333f4953626f7c8896a0acb8c5d5dfeae2d5c9beb3a99a8d8073675863707d8997a2adbac6d3dfece0d3c7baaea3998b7e7165564c41362a1e1105000000000000000000000000000007131f2b36404a52585a5e5e5e5e5e5e5e5e5e575f61646668696a6a69686663605d55545e687885929fabb8c5d2dedacfbeb2a5988b7f7265584c3f3225190c000000000a141d262d3338393a434b555c606b70797e83888c8f9299999c9fa2aaa8abadb3b7b9bdc4cacfd4d1cbc6bfbab0a79f948c7f72695e52463a291f1409000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060707070706060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2c35404a535c646d727d849199a4afbbc7d4d2ccc4bdb9b7b3b0afb1b4b8babfc6ced5d2c5b9aca1968e817a6f6a60594f463c31281d1207000000000000131f2c3946525f6c7985929facb8c5d2dfebf2e6dbcfc5bbb3adabadb3bbc0c9d2dbd6d3d2c5b9ac9f9286796c5f5346392c2013000e1b2835414e5b6874818e9ba7b4c1cedaded1c4b7ab9e918478727e858d92999c9fa3aba5a5a5a4aaa29f9c99928e8780796e695f584e453b31271d10060000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4a4a4a4a4a4a4a4b515d6774818e9aa7b4c1cddae7e6dcd1c5b8aca095877a6e6154473b2e21140800000000131f2c3946525f6c7985929facb8c5d2dfebe9dccfc2b6a99c8f827b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a6d6054473a2d2114070000000000000000000000000000000000000000000000000007121d2a36424d56626f7c89959fabb8c4cfdae6dcd1c6b9ada1968a7d7064574d42362a1d120700000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f422d22171b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2116222f3c4955626f7c8895a2afbbc8d5e2eee5d8cbbeb2a5988b7f7265584c3f3225190c0000000004111d2935414c55606d7985919ea5afbbc4cfd8e3eee3d9d0c7beb6afa79f9d95908c8886848383838486898c91969ea1a8afb7c0c8d1dbe4eae1d7cec2bbafa3998f82756b6054483c32271b0f01000000000000000000000000000000000005121f2b3744505b6573808d9aa8b2bdc8d4e7ecdfd2c6b9ada197897c6f6356606d7985929fabb8c5d0dce7e3d7cbbfb4ab9c8f8276685e5246392d2014090000000000000000000000000000030e19242f3840474c4d525252524d52575e6166696e717375767676767573706d676260586a7784909daab7c3d0ddd9cdc0b3a69a8d8073675a4d4034271a0d01000000020b141c22282f39434b555d676d747d848b9095989c9fa3aba9abaeb3b5b8b9bec4c5c9ced2cec8c7c0bbb4aea69e958f82786d60574d42362a170d02000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313d47525c646e747f879196a0abb5c0ccd7c8c0bab2acaba6a3a3a4a7acaeb4bcc3cbd5c9bdb2a89e938e857c706b60584e43392f24180d020000000000131f2c3946525f6c7985929facb8c5d2dfebeee2d6cabeb3a9a29fa2a9afb7c0cbd5dedfd2c5b9ac9f9286796c5f5346392c2013000d1a2734404d5a6773808d9aa6b3c0cdd9ded2c5b8ab9f9285786c707a80868c90929997989998989698928f8b86817c736d675f574e463c3328231c140c0200000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5656565656565657555d606d7985919eabb8c4d1dee8ded6cabeb3a99d908477695e52463a2d20140700000000131f2c3946525f6c7985929facb8c5d2dfebe9ddd0c3b7ab9f948f8888888888888888888888888888888888887e7265584b3f3225180c00000000000000000000000000000000000000000000000000000e1925303b4854606a7683909da9b3bec9d5e2e3d5c9bdb2a89c8f8276695f5346392e23180c00000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dccfc2b5a99c8f827669544a3f33281c172834414e5b6774818e9aa7b4c1cddae7ede0d4c7baada194877a6e6154473b2e211523303c4956636f7c8996a2afbcc9d5e2efe5d8cbbeb2a5988b7f7265584c3f3225190c000000000613202c3945515d67737f8c97a1adb7c1cdd6e1eae8ddd2c7bdb5aca49f959089837f7c797776767677797c80848a91969ea5aeb6c0c9d2dee7e9e0d7cbc0b5ab9e94897d7063584e43372b1e130800000000000000000000000000000000000613202d394653606c7884919eabb7c3ced9e5ebded1c5b8ab9e9285796d60535c6675818e9baab4bfcbd6e3e7dcd1c5b9ac9f92867a6d6154473b30251a0e02000000000000000000000000000008121d262f363c3f4145404551575e61696e73777b7e808182838383817f7d79756f6a616976838f9ca9b6c2cfdcdbcec1b5a89b8e8275685b4f4235281c060000000000020a111c2934404b555d676d79818a91969d9fa7a9acaeb5b6b8babec1c5c6c9cfd1cbc7c5c2bdb8b5afaaa39f948f83796d665c50453b30251a0500000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000040607111313131313131313131313131313131313131309080603000000000000000000000000000003080b0d0e131313131313131313131313131313131313131309080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f39434f59636e74808c9399a0a8b2bdc7d2c9c0b6aea8a19e999796979a9fa3aab1b9c3cccec4baafa59e9791867d706a5f554b4035291f14090000000000131f2c3946525f6c7985929facb8c5d2dfebecdfd3c6baada29792979da5afb9c3ccd5dfd2c5b9ac9f9286796c5f5346392c2013000c1926333f4c5966727f8c99a5b2bfccd8dfd3c6baaea29886796d686d747a7f8386898b8b8c8c8b8a8885837f7b756e6a605c554d453c3a38342e261e140a00000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756863636363636363636465676d74808d97a1adb9c6d2dfdfd6ccc4baada2978b7e7265564d42362a1e110500000000131f2c3946525f6c7985929facb8c5d2dfebecdfd3c7bbb0a69f9c95959595959595959595959595959595958b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000009141f2c38434e5864717e8a97a1adb9c6d1dce5dacfc4b9ac9f93877b6e61554b4034281c1004000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe9dcd0c3b6a99d908376665b5044382b24232a36414c566875828f9ba8b5c2cedbe8eee1d4c8bbaea195887b6e6255483b30262526303d4a5764707d8a97a3b0bdcad6e3f0e5d8cbbeb2a5988b7f7265584c3f3225190c000000000714212d3a4754606d7a85929fa9b3bec9d3dfe8eae0d7ccc0b5aba49a938c837c77726f6c666a696a666d6f73787e848e939ca4aeb7c1ccd5e0ebe8dcd1c7bdb0a69d9083766a6054473a2f24190d0100000000000000000000000000000003101c28343f4a54636f7c8996a1adb9c5d5e0eae2d6cabfb4aa9a8e8174665c505464717d8a98a3aebac7d3e0ece0d4c7bbafa3998b7f7265574d42362a1e12050000000000000000000000000000010b141d242b303139434b515b62696e747b8084888a8d8e8f90908f8e8c8986817c756e6975828e9ba8b5c1cedbdccfc3b6a99c908376695d50432d22170b0000000000020c16202c3845515c676d79828e939ea1a8abb1b6b9bbbfc2c5c6cad0d0cac6c5c2bfbab9b6b1acaba39f98928c82796d675d544a3f33291f140900000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000001070c1013141e202020202020202020202020202020202020201515120f0a040000000000000000000001080f14181a1b20202020202020202020202020202020202020201615130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55606b73808d929fa4abb2bac3d0cec1b7aea49d96918c8a898a8e9298a0a7b1bac4ceccc1b7afa9a19892867c6f675d51453b3025190e0200000000131f2c3946525f6c7985929facb8c5d2dfebebded2c5b8ab9f92858e939da7b1bac3ccd7d2c5b9ac9f9286796c5f5346392c2013000b1824313e4b5764717e8a97a4b1bdcfdbe2d6cabeb3aa94877b6e6161686d72767a7c7e7f7f7f7e7d7b7976726e69625f58514b48484846443f3830261c1106000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827570707070707070707070717479808d929ca9b3bec9d5dcd7cdc4bab0a69f9285796d6053473b3025190e0200000000131f2c3946525f6c7985929facb8c5d2dfebefe3d8ccc2b8b0aba9a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000020f1b27323d4653606d7985919eabb4bfcbd7e3e0d4c8bbafa49a8d8073675c5145382c1f150a000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebded2c5b8ab9f9285796c6053463d352f2e343b46525e687784919daab7c4d0ddeaf0e3d7cabdb0a4978a7d7164564c413731313038424e5866727f8c99a5b2bfccd8e5f1e5d8cbbeb2a5988b7f7265584c3f3225190c0000000713202c38444f5965727f8c98a2aebbc4cfdbe5ede2d8cec6bbafa49993887f786f6b6562605b545d545c6062666c7179818d929ca5afbac3ced9e5eee3d9cfc1b8ab9f95887c6f62564c4135291d110400000000000000000000000000000006121f2c3844505c6674818d9aa8b2bdc9d5e7ecdfd3c6baaea2988a7d7063544a53606d7a86929facb8c5d2dde8e3d7cbc0b5ab9c908376695e52463a2d2015090000000000000000000000000000000006111c263039434b555c606d727b81868c919697999b9c9d9d9c9b9998928e89827b7074818e9ba7b4c1cedaddd1c4b7aa9e9184776b5e493f33271b0f030000000008131e2b38434e58606d798290949da5acb2b8bcc2c5c7cbd1d0cac7c5c2bebab8b5b4aeaca9a8a09d99928e867f786d675d554b42382e21170d0200000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c22211f1b150e060000000000000000020b131a202427282d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c22211f1b150e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c67707d89929ca5afb5bdc3ccd0c6bcafa59d928d84807d7c7e81869095a0a8b2bdc9d5c9c1bbb3aaa2989184796d60564d42362a1e110500000000131f2c3946525f6c7985929facb8c5d2dfe5e5dbcec2b5a89b8f81818e95a0a8b1bac2cbd1c5b9ac9f9286796c5f5346392c2013000916232f3c4956626f7c8995a9b3becad6e2dbd0bcafa296897c6f63565e6165676d6f7172727271706e6d6665615e575454545454545453504a42382e23170b000000131f2c3946525f6c7985929facb8c5d2dfebe9dccfc3b6a99c90827d7d7d7d7d7d7d7d7d7d7d7e81858d929ca4aebbc4cfd6d1cbc3bbb2a89f948b7e71675d514539291f14090000000000131f2c3946525f6c7985929facb8c5d2dfebf4e9ded4cac2bbb7b6aeaeaeaeaeaeaeaeaeaeaeaeaeaeaea5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000a161f2c3845515c6673808c99a3aebac7d3e0e4d8ccc0b6ac9e9285796d6053463c31261b0f010000000000000000131f2c3946525f6c7985929facb8c5d2dfebecdfd3c6baada297897c6f62594f45403f3e3f444d57616e7a8795a0acb8c5d1deebf3e7dacdc0b4a79a8d8174685d5247433f3e3f424a545f6a76828f9ca9b5c2cfdce8f1e4d7cbbeb1a4988b7e7165584b3e3225180b0000000915222f3b4854606b7784919eaab3becdd6e1ede7dcd0c6bcb0a69f93877e736c6660595553504a504b5153545b60676d75808d939ea8b2bdc8d4dee9eae1d4c7bcb1a79a8e8174685d5245392c2013060000000000000000000000000000000713202d3a4653606d7985929eabb8c4cfdae5ebdfd2c5b8ac9f9285796d605347515d6775828f9cabb5c0ccd7e3e8dcd1c6b9ac9f93877b6e6154483c31261a0e020000000000000000000000000000000b17232e38424b555d676d757e868e92999da0a8a6a8a9a9a9a9a8aaa39f9b938f857d74818d9aa7b4c0cddaded2c5b8ab9f928578655b5044372b1f1205000000010d1924303b4754606a74808d949fa6afb9bdc4c8cdd2d3cdc7c6bfbab8b5b3aeaba9aaa39f9c9995918c86817b726c665d554b433a30262019100700000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000030d151d23292c2d38393939393939393939393939393939393939392f2e2b2620181006000000000000000b141d252b30333439393939393939393939393939393939393939392f2e2b262018100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7984919ea4aebbc0c7d0d6cabfb4aa9e938d807973707071747b839096a1acb9c6d1d3cdc4bcb4aaa0968d8073695e52463a2d20140900000000131f2c3946525f6c7985929facb8c5d2d9d9d9d9cec2b5a89b8f827a839096a0a8b0bbbfc6c5b9ac9f9286796c5f5346392c2013000814212e3b4754616e7a8797a2adb9c6d2dfd7cbbeb1a4988b7e7165585254555d60626465666565636261616161616161616161616161605c544a3f34281c10030000131f2c3946525f6c7985929facb8c5d2dfebeaddd0c4b7ab9f9490898989898989898989898a8b8e92979da4aeb6c0cdd0cac6bfbab1a9a1968f82776c60554b403529170d020000000000131f2c3946525f6c7985929facb8c5d2dfebf8f0e6dcd4ccc7c3c2bbbbbbbbbbbbbbbbbbbbbbbbbbbbb1a5988b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000004101c2834404b54616e7a86929facb9c2cdd8e4ddd2c7b9ada1978a7e7164584e43372b1d13070000000000000000131f2c3946525f6c7985929facb8c5d2dfebeee2d6cabeb3a99b8e81756b6058514b4b4b4a50575f6973808c99a7b1bcc8d4e0edf8ebded2c5b8ab9f92857a6d605b534e4c4b4c4e545c666e7c87939facb9c6d2dfecf0e4d7cabdb1a4978a7e7164574b3e3124180b000000091623303c4956636f7c8996a0acbcc5d0dfe8efe3d6cbbfb4aa9f948c7f726c605b544f4846443f434045464a50555d606e74818e96a0acb9c2ccd8e3f3e4d8cdc2b8ac9f92867a6d6054473a2d21140a000000000000000000000000000004101c2834404b5563707d8997a1adb9c6d6e0ebe3d7cbbfb5ab9b8e8275675c51454b5565717e8b99a4afbbc7d4e0ede0d4c8bbafa49a8c7f7265574d42372b1e1206000000000000000000000000000003101c28343f4a545d676d79818b92989fa3abacb2b3b4b5b6b6b6b4b4aeaca59e9792877d808d9aa7b3c0cddadfd2c6b9ac9f9386796c605346392d20130600000004111d2935414c56626f7c87939fa6b0b8c0c9ced4d8d0cac2bcb7b4aeaca8aaa29f9c9998928f8c88847f7b756e69605b544b433c3b37322b22190f04000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000010b151f272f34383a44464646464646464646464646464646464646463c3a37312a22180e04000000000008111d262f363c404146464646464646464646464646464646464646463c3b37322a22180e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5865727f8b96a1adb6c0ccd2d9d3c7baaea2988e81746d66646364696e7a84919eabb4bfcbd7d6cfc5bcb2a89f92867b6e6154473b30251a0e02000000131f2c3946525f6c7985929facb8c5ccccccccccccc2b5a89b8f82757a8491959fa6aeb5bdc2b9ac9f9286796c5f5346392c2013000714202d3946525e687885929eabb8c5d1dedacdc0b3a79a8d807467564c474b515456585c676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d665c5044382b1f12060000131f2c3946525f6c7985929facb8c5d2dfebece0d3c7bcb0a69f9c9696969696969696969697989a9fa2a9aeb6c0c8cac5bebab4aea7a09791847b6e655b5043392f241805000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f8eee6ded8d3d0cfc8c8c8c8c8c8c8c8c8c8c8c8c8beb1a5988b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000000000c18232e3946525e6875818e9ba7b1bcc7d4e0e4d5c9beb3a99c9083766a5f53473a2f24180d0100000000000000131f2c3946525f6c7985929facb8c5d2dfebf2e6dbd0c5b9ac9f92877d706a605d555858545c60696e7b86929fabb8c3ced9e5f0f9ecdfd3c6baaea2988e81746d625f585858595860666d78828f9aa4afbbc8d4e0edefe3d7cbc0b5ab96897d7063564a3d3023170a000005121e2a36424d576774808d9aa8b2bdced7e1f1ece0d3c7baaea3988f82786c605a504a423d3938332e34383a3f444b515c606d7984919ea6b0bbc7d3e0ebe9e0d3c6baaea2988a7e7164574b3e31261a0f020000000000000000000000000006131f2c3845515c6774818e9ba9b3bec9d5e8ede0d3c7bbaea3998a7e7164554b404754616d7a86939facb9c6d2dfece4d8ccc0b6ac9d908377695f53473a2d21150a00000000000000000000000000050f1a232b3844505c666d79828e939fa2aaafb5b8bdc0c1c2c3c3c2c1bfbab8afa9a2999286828f9ca9b6c2cfdce0d4c7bbafa499877a6d6054473a2d2114070000000713202c3945525d6875828e9aa4afb8c2cbd5dadcd0c7beb8b0abaaa29f9c9898928f8c8986837f7b77736e69615f57504a4d4d4947433c342b20150a000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000007121d27313940454751535353535353535353535353535353535353534847433c342a20150a00000000050e1a232f3841484c4e53535353535353535353535353535353535353534947433c342a20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7784919ea8b2bdc8d7dddfd2c5b8ac9f92867a6d615c5456575e68717e8b99a3aebac7d3e0d7cec3baaea3988c807366574d42362a1e1205000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfb5a89b8f82756e7b838f949fa3abb0b9b9ac9f9286796c5f5346392c20130005111e2a36414c566976838f9ca9b6c2d2dddcd0c3b6a99d908376685d52464145474953606d797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786d6053463a2d2013070000131f2c3946525f6c7985929facb8c5d2dfebf0e4d8cdc2b9b0aba9a3a3a3a3a3a3a3a3a3a3a3a4a7abadb3bbc0c8c5bebab3aeaba39f9590857b6e695e53493f31281d1207000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fff8f0e9e3dfdddcd4d4d4d4d4d4d4d4d4d4d4d4cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000007121d2a36414c56626f7c88959fabb8c4cfdae5dacfc5b7ab9f94887c6f62554b4135291d110400000000000000131f2c3946525f6c7985929facb8c5d2dfebf7ece0d4c7bbafa39992857c726d6766656566666d717b839198a2aebac6d5dfeaf6fbeee2d6cabeb4aa9d938c7f756e6a67656465676a6f78818e949facb6c0ccd8e4f0ede0d4c7bbafa399887b6e6255483b2f22150800000714212d3a46535f697784919eaab7c4cedde9f3ebdfd2c5b8ac9f92867b6e665b50443f382f2d2b2823282c2d33394045515d676f7c89949fabb7c4cfdae5efe2d6cabfb4aa9b8e817468584e43372b1f1206000000000000000000000000000713202d3a4653606d7985929fabb8c5cfdae6ecdfd2c5b9ac9f92867a6d6054473a46525e687683909ca9b6c3ced9e5e8ddd2c7b8ab9f95887b6e6155483c31261b0f030000000000000000000000000b16212b37434e58606d78828f949ea5aeb4bbc0c7c8cececfd0d0cfd0cbc7c1bbb3aba298928f949fabb7c3d0dde3d7ccc0b5a194877b6e6154483b2e2115080000000714212d3a4754606d7a86929facb6c0cad4ddded4cabeb5ada69f9c98928f8b8885827f7c7976726e6a66615e5759595959595955544e463c32271b0f030000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000c18232f39434b51535e6060606060606060606060606060606060605f55534e463c31261b0d040000020c16202c35414a53595b606060606060606060606060606060606060605f55534e463c32261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8896a0acbac4cfdae8dbcec2b5a89b8f8275685e524b494d56606d7986929facb9c5d2dfe0d6cbbfb4aa9d918477695e52463a2d201407000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2a89b8f8275696e7a828c92999fa6acaeac9f9286796c5f5346392c201300020e192530404d5a6773808d9aacb6c0ccd8dfd2c5b9ac9f92867a6d61554b403c424d5765727f878787878787878787878787878787877a6d6054473a2d2114070000131f2c3946525f6c7985929facb8c5d2dfebf5e9ded4cbc2bcb7b6b0b0b0b0b0b0b0b0b0b0b0b1b4b8babec5cdc5bbb3adaaa29f99928d837b6e695f564d41382d1f160c01000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f8efe6ded8d3d0cfc9c9c9c9c9c9c9c9c9c9c9c9c9beb1a5988b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000d1925303b4754606a7683909da8b2bdc9d5e2e1d3c7bcb0a69a8d8174675d5145392c20160a00000000000000131f2c3946525f6c7985929facb8c5d2dfebf8efe3d7cbc0b5aba19792867f7a757372717275797e859195a0aab4becad6e7f1fcfbf2e7dbd0c5bcafa59c918c827b767372717274777c828e939da6b0bec7d2dde8f4ecdfd2c5b9ac9f92867a6d6053473a2d20140700000815222e3b4855616e7b8896a0acb9c5d2deebece0d4c8bcb1a79a8e8174695e544a3f332d26201f1c181c1f22282f35404b55606a76828f9ca8b2bdc9d5e1eee7dbd0c4b8ab9e9185786a5f53473a2e21140800000000000000000000000004111d2935404b5564707d8a97a2adbac6d6e1ece4d8ccc0b6ac9c8f8276685d524539414c5665727f8c98a7b1bcc8d4e0eee4d4c8bcb1a7998c7f7366584e43372b1f1206000000000000000000000004101c27333b4754606a73808c949ea6afbabfc6cbd1d4d9dbdcdcdbd6d3d2d1cdc5bdb4aaa29f9c9fa6b0bbc7d3dfe8ddd2bbaea194887b6e6155483b2e2215080000000a1724303d4a5763707d8a99a3afbec7d2dce3d8ccc2b8ada39b94908a86827f7b797673706d67666666666666666666666666666260584e43372b1f13060000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000004101c2934404b555c606b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c625f584e43372b1f160c010008131e28323e47535d64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c625f584e43372b1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a8b2bdccd6e0e5d9ccbfb2a6998c7f7366564c413d45515d677784909daab7c3d0dde7dcd0c6b8aca095877b6e6154483b2e211508000000131f2c3946525f6c7985929fa6a6a6a6a6a6a6a6a6a6a6a69b8f827568686d787f878f949b9fa3aa9f9286796c5f5346392c20130000081724313e4a5764717e8a9aa4afbbc8d4e0d4c7bbafa3998b7e71675c514a4949525e6975828f94949494949494949494949494928578675d5145392c2013060000131f2c3946525f6c7985929facb8c5d2dfebf8f0e6ddd4cdc7c4c3bcbcbcbcbcbcbcbcbcbcbdbec1c5c6cad0cabeb3a9a29f98928d8680796e695f574d443b2f261b0d0400000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f0e6ddd4cdc7c4c3bcbcbcbcbcbcbcbcbcbcbcbcbcbcb1a5988b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000000000008141e2b37434e5864717e8a96a1adb9c6d1dce4d8cdc2b8ab9f92857a6d6054473d32271b0f02000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f4e8dcd1c7bdb3a9a198928c85827f7e7e7f81848b9197a0a7b1bcc5d0dbe7f9f6f1e9e1dad6cec0b7ada39c938f8783807f7e7f80838990949da5afb8c2d0d9e4eef9eaddd0c3b7aa9d908477675d5145382c1f130600000b1824313e4b5764717e8a97a8b2bdc9d5e1edeaddd1c4b8ab9f95887c6f62574d42382d221c14120f0c1013171d242f3a434e5863707d8a96a1adb9c5d2dfebebdfd2c6b9ada197887b6e6255483b2f2215080000000000000000000000000613202c3945515d6775828e9ba9b3becad6e8ede0d4c8bbafa49a8b7e7265564c41353b4855616e7b8895a0acb8c5d1deeae4d8cdc3b7aa9d9184776a5f53473a2e21150a00000000000000000000000714202c38444f59626f7c87929fa6b0b8c1cad0d7dce3ded8d3d0d0cac6c5c4c5c7c6bcb4aeaca9abb0b8c2ccd8e3e1d4c8bbaea195887b6e6255483b2f2215080000000d192633404c5966737f8c99abb5c0d0d9e4dfd3c7bbb0a69b918b837e7975726f6c666b707373737373737373737373737373736f6a6054473b2e2215080000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676d77797979797979797979797979797979797979796f6a5f53473e31281d1207050f1925303a444f59646f7479797979797979797979797979797979797979796f6a5f53473b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1b2835414e5b6874818e9ba7b4c1cedae8e5d8cbbeb2a5988b7f7265584c3f35404b556976838f9ca9b6c2cfdce9e2d4c8bdb1a8968a7d7063574a3d3024170a000000131f2c3946525f6c79869299999999999999999999999999998f8275685d666d737c82898f92989a9c9286796c5f5346392c201300000714212e3a4754616d7a87939facb9c6d2dfd7cbc0b5ab9e9184796d605b5455535b616e7b86929fa1a1a1a1a1a1a1a1a1a1a19d9083766a554b4135291d11040000131f2c3946525f6c7985929facb8c5d2dfebf8f8efe6ded8d3d0cfc9c9c9c9c9c9c9c9c9c9cacbcdd2d3d6d3c6baada297928b85817b736d675f574d453c32291d140a0000000000000000131f2c3946525f6c7985929facb8c5d2dfebf5e9ded4cbc2bcb7b6afafafafafafafafafafafafafafafa5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000020f1b27323c4653606d7984919eaab4bfcbd7e3dfd3c6baaea2988b7e7265594f43382c1e1308000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f9eee3d9cfc5bbb3aaa29f98928f8c8b8b8c8e91979ea1a9b1b9c3ced7e2ecf8ede4dfd7cfcac6c5bfb5ada59e9993908d8b8b8c8d90959c9fa6afb7c0cad4e2ebf5efe2d6cabfb4aa9a8e817467554b4035291d100400010e1a2734414d5a6774808d9aa7b3c0ced9e5f1e9ddd0c3b6aa9d9083776a5f53453b2f261c110a06030004060b131d28313d4653606c7884919eabb8c4d1deebeee1d5c9beb2a9978a7d7164574a3e3124170b0000000000000000000000000714202d3a4753606d7a86929facb8c5d0dbe6ecdfd2c6b9ac9f93877b6e6154473b2f3a46535f697784909daab7c3cfdae5eaded1c5b8aca095887c6f6255483d32271b0f00000000000000000000000916222f3c4854606b76839099a3afb8c1cad6dbe2e4ddd8cdc7c4c3bfbab8b8b9babfc5bfbab8b6b7bbc2cad4dee9e1d5c8bbaea295887b6f6255483c2f2215090000010e1b2734414e5a6774818d9aa7b4c0d1daebddd0c3b7ab9f948b7f76716d6765626063707d8080808080808080808080808080807c6f6255493c2f2216090000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0d0d0c0b0907060400000000000000000000000000000000000000000000000000000714202d3a4753606d7a84868686868686868686868686868686868686877c6f625a5043392f24180d0b17212a36414c56616b748186868686868686868686868686868686868686877c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683909ca9b6c3cfdce9e5d8ccbfb2a5998c7f726653493f37424d576a7683909da9b6c3d0dce9e5d9cebfb2a5988c7f7265594c3f3226190c000000131f2c3946525f6c79858c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c827568545c606a6f767c82868a8d8f9186796c5f5346392c201300000713202d3946525e687783909daab7c3ced9dcd1c7b9aca0968c80736c66636263656c75818e99a3afaeaeaeaeaeaeaeaeb6ac9a8e8174675b4e412f24180d010000131f2c3946525f6c7985929facb8c5d2dfebf8f8efe6ded8d3d0cfc9c9c9c9c9c9c9c9c9c9cbcdd2d3d6dbd2c5b8ab9f92857e79746e69605c554d453c332a20170b020000000000000000131f2c3946525f6c7985929facb8c5d2dfebf0e4d8cdc2b8b0aba9a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000a151f2c3844515c66737f8c98a3aebac7d3e0e2d6cabeb4aa9d9083776b6054483a3025190d000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fdf3ebe1d6cdc5bcb4aeaaa29f9c999898999b9ea1a9adb3bbc3ccd5e0e9f3f1e4dbd2cdc5beb9b8b9beb7afaba49f9d9a9897989a9da0a7abb0b8c0c9d2dce6f4f3e9dfd3c6baaea2988a7d7164574a3e2f24180c000003101c2936434f5c6976828f9ca9b5c2cfdce8f6e6d9cdc0b3a69a8d807367584e4333291d140a000000000000010c161f2b3744505b6575818e9ba8b5c1cedbe8f1e6dacfbfb2a6998c7f7366594c403326190d000000000000000000000005111d2935414c5664717e8a98a2aebac6d3e1ece9dcd0c3b6a99d908376695e52463a2d36424d576673808c99a8b2bdc9d5e1ede0d4c8bcb1a7998d807366584e43372b1c110600000000000000000004111d2935414c5663707d89949fabb5c0cad3dce7e2d9d2ccc2bcb7b6b4aeacabacaeb4b8babec5c2c3c7ccd4dce6f0e2d5c8bbafa295887c6f6255493c2f2216090000020f1b2835424e5b6875818e9ba8b4c1cedbe7dccfc2b5a99c8f82766d64605d5556606a76838c8c8c8c8c8c8c8c8c8c8c8c8c8c897d7063564a3d3023170a0000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1a1a191918161413100c0706040100000000000000000000000000000000000000000006131f2c3845515c67707d8993939393939393939393939393939393999082766c61554b4035291f14141d29333b46525e68707d8a9393939393939393939393939393939393958c7f736a5f53473b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daab7c3d0ddeae7dacdc0b4a79a8d8174655b50444047535f697885919eabb8c4d1deebe6d9ccbfb3a6998c807366594d4033261a0d0000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e71645750585f626b70757a7e80838484786b5e5145382b1e12000005111d2a36414c566673808d99a7b1bcc8d4e1d5c9bdb2a89c928c7f7872706f7072787f8c939eabb5c0bababababababbafa49a8b7e7164584b3e31251807000000131f2c3946525f6c7985929facb8c5d2dfebf8f0e6ddd4cdc7c4c3bcbcbcbcbcbcbcbcbcbdbec1c5c6cacfd3c6baada2979287827c756e6960594f473d342b1e150b000000000000000000131f2c3946525f6c7985929facb8c5d2dfebece0d3c7bcb0a69f9c96969696969696969696969696969696968b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000004101c2834404a54616d7a86929facb9c2cdd8e4dbd0c5b8aca095897c6f63564c41362a1b11060000000000131f2c3946525f6c7985929facb8c5d2dfebf8f5ebe1d9d1cbc7c5bfbab3aeaba8a6a5a4a5a8abadb2b9bec4cdd5dee7f2f2e8dfd2c9c1bbb3adabadb3bbbdb5afaca9a6a5a4a5a7aaacb1b7bcc2cbd2dbe4eef7ece1d8ccc0b6ac9f92867a6d6054473a2d211407000004101d2935404b556b7784919eaab7c4d1ddeaf0e3d7cabdb0a4978a7d7164574a3e3124170b0200000000000000040f1b27333f495365727f8b98a5b2becbd8e5f7e7dbcec1b4a89b8e8175685b4e4235281b0f02000000000000000000000713202d3946525d6875828f9caab4bfcad6e2ede1d4c8bdb2a8998c7f7266574d42362a313c4955626f7c8896a1adb9c5d2dfebe5d9cec3b7aa9e9184776a605447382d22170b0000000000000000000713202c3945525d6875828f9ba6b0bdc7d1dce5e4d9d0c7c0bbb0aba9aaa29f9e9fa3ababaeb4bcc3ccd3d8dee6eeeee1d5c8bbaea295887b6f6255483c2f2215090000020f1b2835424e5b6875818e9ba8b4c1cedbe6d9cdc0b3a69a8d8073675b535a5960686f7c899599999999999999999999999996877a6e6154473b2e2114080000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42352927272726252422201f1d181413110d08010000000000000000000000000000000000000004101c2934404b55606b74818e97a19f9f9f9f9f9f9f9f9f9f9f9f9f9f948a7e71675d51453b31261a1b262f3b45505a616d7a85919ea59f9f9f9f9f9f9f9f9f9f9f9f9fa2989083786d60584e43372b1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b7784919eaab7c4d1ddeaeaddd1c4b7aa9e9184786c6057504b5159626e7b8896a1adb9c5d2dfebe6d9cdc0b3a69a8d8073675a4d4034271a0d0100000c1825313e4a57636d7273737373737373737373737373737373716c6155494e53596063686d717376777872685c5043372a1d110000010d1925303c4855626f7c8895a0acb8c5cfdad9cec4baaea49c918c847f7d7c7c7f838c929ca5afbdc7d1c7c7c7c7c6b9ac9f93877a6e6154473b2e211408000000131f2c3946525f6c7985929facb8c5d2dfebf5e9ded4cbc2bcb7b6afafafafafafafafafb0b1b4b8babec5cdcabeb3a9a299928f89827b706b60594f463c30271d12070000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaddd0c4b7ab9f94908989898989898989898989898989898989897e7265584b3f3225180c000000000000000000000000000000000000000000000000000000000000000c18232e3946525e6874818e9ba6b0bcc7d3e0e2d4c8bcb1a79b8e8175685e5246382d22170b0000000000131f2c3946525f6c7985929facb8c5d2dfebf9eee3d9cfc7c0bbb9bbc0bebab8b5b2b1b1b2b4b8b9bec4c9cfd6dfe7f0f2e9e0d6ccc1b7afa9a19ea1a9b3bdc0bbb9b6b3b2b1b2b3b7b8bcc3c7cdd4dde4edf7ede6dbd0c8bbafa49a8e8174675d5145392c20130600000613202c3945515d677985929facb8c5d2dfebefe3d7cbbfb4aa94877b6e6154483b2e2115080000000000000000000b17222d3c4956626f7c8995a2afbcd1dce8f3e9dccfc3b6a99c908376695d5043362a1d1003000000000000000000000714212e3a4754616d7a86929facb9c5d0dbe7ebded1c5b8aca096887b6e6255483b30252e3b4754606a7884919eabb7c4d0dbe6eaded2c5b9aca096897c6f62544a3f33281c0f0300000000000000000714212d3a4754606d7a86929facb9c2cfd9e3e8ddd2c7beb6afa69f9c979892919299999fa2aab2bac3ced7e2ecf8eee1d4c8bbaea195887b6e6255483b2f2215080000010e1b2734414e5a6774818d9aa7b4c0d0dbe7dccfc2b5a99c8f82766c656666686b707a84919da7a6a6a6a6a6a6a6a6a6a69e918477695e52463a2d2014070000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235343434333332312f2d2c292421201d19130f0a040000000000000000000000000000000000000c18232f39434f59616d7a85929ea6b0acacacacacacacacacacb0a69e9184796d60574d42362a1e222d38414d57616c75818f97a1adacacacacacacacacacacacb0a69f92867b6e665c50463c32261b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909daab6c3d0dde9ebded2c5b9aca0968a7d7069605b555d606b74818d9aa9b2bdc9d5e1eee5d9ccbfb2a6998c7f7366594c403326190d0000000916222e3a46515b63666666666666666666666666666666666664615a504543474f54565d606467696a6b6860564b3f33271b0f0000000815212e3a47535f6a7783909da9b3bec9d5e0d6ccbfb6ada49c96918c8a88898b90959ca4adb7c1cfd9d4d4d5c9beb3a99c908376685e5246392d201407000000131f2c3946525f6c7985929facb8c5d2dfebf0e4d8cdc2b8b0aba9a3a3a3a3a3a3a3a3a3a3a4a7abadb3bbc0c9c5bbb3aba39f9c948f857d706b60584e42392e23180c0100000000000000131f2c3946525f6c7985929facb8c5d2dfebe9dccfc3b6a99c90827d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7b6e6154473b2e211408000000000000000000000000000000000105090b0b0c0c0c0c0c0c0c0c0c0c07121c2a36414c56626f7c88949fabb7c4cfdae4d9cec3b9ac9f92867a6d6153493f33271b0f0300000000131f2c3946525f6c7985929facb8c5d2dfebf4e8dcd1c7bdb5afacafb5bdc2c5c2bfbebebfc1c4c6c9cfd5dae1e8f1f1e8e0d7cec4baafa59e979297a1abb5c0c7c6c3c0bebebfc0c3c5c8ced3d8dee6eff3ece6dbd6cabeb3a99f93877c6f62554b4135291d110400000714202d3a4753606d7a8698a2aebac6d3e0ecece0d3c7baaea398867a6d6053473a2d2014070000000000000000000615212e3b4854616e7b8794abb5c0cbd7e3efeaddd0c3b7aa9d9084776a5d5144372a1e110400000000000000000005111e2a36414c5665717e8b99a3aebbc7d3e2edeaddd0c4b7aa9d9184776a5f53473a2e1f2b37434e586774808d9aa9b3becad6e2ede1d5c9bdb2a89a8d8073665b5044382b1f120600000000000000000b1824313e4b5764717e8a99a3afbbc7d4e1ebe4d8ccc0b6aca49f94908a87858586888c9298a0a8b2bcc5d0dbe7f2eee1d4c7bbaea194887b6e6155483b2e2215080000000c1926333f4c5966727f8c99aab4bfcad6e4ddd0c3b7ab9f948c7f7874737374777d849196a0acb3b3b3b3b3b3b3b3b2a89a8d817467564d42362a1e11050000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f424141414140403f3e3c3a39352f2d2c29241e1b150e09030000000000000000000000000000000007121d27313d46525d68717e8a949eaab4bfb9b9b9b9b9b9b9b9b9ada1968d8073695f53463e302727333f49535e69717e8b939ea9b3beb9b9b9b9b9b9b9b9beb3a99f948b7f72695f544a3f342a20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2d2dde8ede1d4c8bdb2a89e92857b716c6668676d727d88939facb9c4cfdae6f0e4d8ccc0b6ac988b7f7265584c3f3225190c00000006121e2a353f4951575959595959595959595959595959595959575550483e373d44484c5254575a5c5e5e5c564e443a2f23170b00000006121f2b37434e5865727f8b97a1adb9c3ced9ded1c8bfb6ada8a09e98969596989da0a7adb6bfc9d3e1e4d9d0c7b9ada1978b7e7165564c41362a1e1105000000131f2c3946525f6c7985929facb8c5d2dfebece0d3c7bcb0a69f9c96969696969696969696989a9fa2a9afb7c0c9c5bdb5afaca69e9792877d706a60544b4034281d120700000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827570707070707070707070707070707070706e695e52463a2d201407000000000000000000000000000000060c111517181919191919191919191919191925303a47535f6a7683909ca8b2bdc9d5e2e0d3c7baaea3988c7f72655b5044372b1f140900000000131f2c3946525f6c7985929facb8c5d2dfebefe3d7cbc0b5aba39fa3abb0b8c2cbcccbcbccced1d2d5dae0e6ebefebe5dfd6cec5bcb2a89e938e859299a3afbbc0cbd1cdcbcacbcdd0d1d4d9dfe4e9f0ede7e1dad5c9c1baada2978e81756a5f53433a2f24180d0100000714212e3a4754616d7a8794aab4bfcad6e2efecdfd2c5b9ac9f928679675d5145392c1f13060000000000000000000714212d3a4754606d7a8799a3afbbc7d3e0edeaded1c4b7ab9e9184786b5e5145382b1e12050000000000000000000714202d3946525e6876828f9cabb5bfcbd7e3eee1d5c9bdb2a9998d807366584e43372b1f27323d4a5663707d8997a2adbac6d3dfece5d9cec4b8ab9e9184786c605346392e23170c00000000000000030f1c28333f4a546774818e9aabb5c0cbd7e6ede0d4c8bbafa49a938c837d7a7978797b80869196a0aab4bfcad6e2eeefe3d7cbbfb5ab94877b6e6154483b2e2115080000000a1623303d495663707c8998a2aebac7d2dddfd3c7bbb0a69b918c848180808184899196a0a8b2bdbfbfbfbfbfbfb8aca096897d706356493d3025190e020000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4e4e4e4e4d4d4c4c4b494745403d3a39352f2b26201a150c07000000000000000000000000000000010b151f2935414c56616c75828f98a2aebac3cfc6c6c6c6c6c9bdb2a89f92867b6e61594f42392e303844505b656e7b85929fa5afbbc4cfc6c6c6c6c6cdc4baada2978f82766d62574d42382e22180e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aabb5c0ccd7e3f0e5d9cec3b9ada19792857e79757576797f87929aa4afbbc8d6e0ebede0d4c8bbafa49a897d7063564a3d3023170a000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e362b32383a4145474b4d505151504b443c32281d1207000000030f1b26313c4753606d7985929ea8b2bdc8d4dcdad1c8bfbab2acaaa5a3a2a3a5aaacb1b9bfc8d1dbe8ddd2c7beb2a89e9285796d6053473b3025190e02000000131f2c3946525f6c7985929facb8c5d2dfebeaddd0c4b7ab9f94908989898989898989898a8b8e92979da5afb7c1cfc7c0bbb9b0a9a19992867c6f665c5145392f23180c00000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756863636363636363636363636363636363615e564d42362a1e110500000000000000000000000000000911181d21242525252525252525252525252525252b37434e5864717d8a96a1adb9c6d0dbe3d7cbbfb4aa9e9184786c6053463b30251a0e00000000131f2c3946525f6c7985929facb8c5d2dfe5e5e0d4c7bbafa39992999fa6b0b9c3cbd4d9d8dbdedfe1e6eaeae8e3e0d9d5cdc5bcb4aaa1968e817c87929fa4aebbc0c7cfd6dbd8dadddee0e4eaeae8e4e2dcd6cfc9c0b7aea49f92857b6e61584e4331281d13070000000815212e3b4854616e7b8794a1aebad0dbe7f3ebded1c4b8ab9e9185786b554b4035291d10040000000000000000000613202c3945525d687986929facb9c5d2dfecebded1c5b8ab9e9285786b5f5245382c1f12050000000000000000000814212e3b4754616e7a87939facb9c6d1dce7ebdfd2c5b9ada196897c6f6256493c31261a202d3a4653606d7985929fabb8c5d0dce7ebdfd2c5b9ada196897c7063544a3f34281c100300000000000006121f2b3844505b667783909daab6c3d1dce8e1d5c9beb3a99f93887f76716d686b6a6f737b849198a2aebac6d3dfecede0d3c7bbaea399867a6d6053473a2d2014070000000714202d3a4753606d7a85929facb6c0ccd8e1d8ccc2b8ada39b96918e8c8d8e91969ea0a8b2bac3ceccccd1c7bdb1a79d9184786c605346392d201309000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5a5a5a5a5a5a5a5958575553514b4a4745413a37322b262018120b030000000000000000000000000000030d1924303a44505a616e7b86929fa7b1bdc7d1dcd2d2dacfc4baaea3988f82756b61544b403438424d57606c77828f97a2adb7c1cdd6d2d2d2dacfc4bbafa59f92857b6e615b51453c30261c1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b99a4afbbc7d4e0eaebe0d5c9beb3a9a197928a85828183868c9299a3acb6c0ccd8e8f2eadfd2c6b9ac9f93867a6d6054473a2d2114070000000007111c252d353a3e3f404040404040404040404040404040403e3c39332c24272c2f35393a3e40434445433f3a322a20160c01000000000a151f2c3845515d67727f8c96a0acb8c0cad3dcdad1ccc3bdb9b7b2b0afafb2b6b8bcc3cbd1dae8ddd8ccc0b6aca0968c7f72675d514538291e140800000000131f2c3946525f6c7985929facb8c5d2dfebe9dccfc3b6a99c90827d7c7c7c7c7c7c7c7c7d7e81858e929da5afbac6d1cbc7c1bbb3aba2989183796d60554b4034291c1004000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c56565656565656565656565656565654524d443b30251913100c07010000000000000000000009121b22292e3132323232323232323232323232323232323c4653606d7884919eaab4bfcad6e2dcd1c6b9aca096897d7063574d42362a1c1106000000131f2c3946525f6c7985929facb8c5d2d9d9d9d9d2c5b9ac9f92878f949fa7b1b9c0c8ced4d8dddddedededddcd7d3cec9c2bbb3aaa29891847a727f8c929da4afb5bdc3cacfd4d9dcdddedededddbd9d4d0cbc5beb9aea59d928a7e71695e52463c311f160c010000000815212e3b4854616e7b8794a1aebad0dbe7f2ebded1c5b8ab9e9285786b554b4035291d10040000000000000000000613202d394653606c7986929facb9c5d2dfecebded2c5b8ab9f9285786c5f5245392c1f1206000000000000000005121e2a36424d5765727f8b99a4afbbc7d4e3edebded1c4b8ab9e9184786c605346392d20131f2c3844505c6675818e9baab4bfcbd6e3eee1d5c9bdb2a89a8d8174665c5044382c1f12070000000000000613202d394653606c7986929facb9c5d2dfecdfd2c6b9ada1978d80736d64615e585f62696e7b86929facb8c5d1dce8ecdfd2c5b9ac9f928679675d5145392c20130600000006131f2c3945515d6774818e9aa4afbbc4cfd8e0d4cabfb5ada8a09e9a99999b9ea0a8acb2bac3ccd5ddd7cbc0b5aba0958b7e71655b5044372b1f1205000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568676767676767676666656462605d555754514c47433c373128231d150c05000000000000000000000000000008131e28323e46535e69727f8c959fabb5c0cbd7e0dfe0d7cbbfb4aa9e948a7d70665c51453b3f4a545f69727f8b949fa9b3bec9d3dfe8e7ded5c9beb2a99e938a7e71695e52493f332a1e140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b86939facb9c2cfd8e3ede6dacfc5bbb3a9a19e97928f8e8f92989fa3abb5bec7d2dde8eae0d6cabeb3a99d908376685d5245392c20130700000000000a131c232a2e31333333333333333333333333333333333331302d28221a1b1e24292c2d313436373837332f2820180f05000000000004101d2935404b55606d7984919ea4aeb8c1cad5daded5cec8c5c4bfbdbbbcbec3c4c8cdd5dde3dcd7cbc2bbafa49a9184796d60554b403529170d0200000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275707070707070707070717479818e939eaab6c4ced7d4cdc5bdb4aaa0958c7f73675c5145382c1f1306000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f49494949494949494949494949494746423b322927201f1d18120b03000000000000000006111b242d343a3d3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f44505c66727f8c98a2aebac7d3e0e2d5c9bdb2a89b8f8275695e5246382e23170c000000131f2c3946525f6c7985929facb8c5ccccccccccccc2b5a89c8f82838f959fa7aeb8bcc3c8ccd2d0d1d1d1d0d1cbc7c4bdb9b0a9a19892867c6f6d73808d929fa3abb1b9bec5c8cecfd0d1d1d1d0cfcec8c6bfbab3ada49d938d80736c61574d42342a200d04000000000714212e3a4754616d7a8794aab4becad6e2eeecdfd2c5b9ac9f928679675d5145392c2013060000000000000000000714212d3a4754606d7a8799a3afbbc7d4e0edebded1c4b8ab9e9185786b5e5245382b1f120500000000000000000714212d3a46535e697683909dabb5c0ccd7e3eee2d6cabeb3a99a8d8174655b5044372b1f121c28343f4a5464717d8a98a3aebac7d3e0ece5dacfc4b8ab9e9285796d6053463a2e23180c0000000000000814212e3b4754616e7a8799a3aebac7d3e0ebded1c4b8ab9e9185796d605b54524e53575f6973808d99abb5c0cbd7e3ebded1c4b8ab9e9185786b554b4035291d110400000004101d2935404b55626f7c87939fa8b2bcc6ced6dcd1c7bfbab2acaaa7a6a6a7aaacb2b9bdc3ccd5d9d2ccc1bbafa3999083786d6053493f33271b0f03000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757474747474747474737372716f6d676764605d55534e47423c342e271e170e0600000000000000000000000000020c16202a36424d57606d78839099a3afbbc4ced9e5e7dcd1c6bcb0a69d9184796d60564d4144505c666e7b86929fa6b0bcc5d0dbe5ebe2d5ccc4b9ada1978e81756c61574d42372d21180c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e6976828f9ca7b1bdc6d1dce7ece1d6cdc5bbb3ada9a19e9c9b9c9fa2aaafb5bdc7d0d9e4eae1d8cec6baada2978b7e7265564c4135291d11040000000000010a11181e222526262626262626262626262626262626262423211c17101013191d20212427292b2b2a27231d160f06000000000000000c18242f3945515c67707d89929ca6b0b8c0c9cfd6dbd9d4d2d1cbc9c8c9cbd0d1d4d9dfdfd9d1cbc2b9b0a69f93887d70675c5143392f2418050000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827568636363636363636365676d75818e9ba8b2bdc9d5dfd6cfc6bcb1a79e9285796d6053473a2d201408000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423d3d3d3d3d3d3d3d3d3d3d3d3d3b3a36303434342d2c29241d150d03000000000000010c18222d363f454a4b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a54616d7a86929facb8c2cdd8e4d9cec4b9ac9f92877b6e61544a3f34281c10030000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfb5a89b8f827a8390959da4acb1b9bbc0c2c4c4c5c4c3c2c0bbb9b2aca69e9792867d706a606c77808b9299a0a7adb3b8bcc1c3c4c4c5c4c3c2c0bcb8b4aea9a19e928d81786c605a50453b3022180e00000000000714202d3a4753606d7a8698a2aebac6d3dfecede0d3c7bbaea399867a6d6053473a2d2014070000000000000000000815222e3b4855616e7b8894abb5c0cbd7e3efeaddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000815212e3b4854616e7b87959fabbdc7d2dde8ecdfd3c6baada297897d706353493f33271b0f17232e3a4753606d7a86929facb8c5d2dde8ebdfd2c6b9ada197897d7063554b4034281c100400000000000916222f3c4955626f7c8895abb4bfcbd7e3e6dacdc0b3a79a8d8074675d51474643474d57626f7c8899a3afbbc7d3e0eaddd0c3b7aa9d9084776a5d51442f24180d01000000000c18242f3947535f6a74818e96a1aab4bcc4ccd3d8d1ccc4bdb9b7b4b3b3b4b7b8bdc3c8ced5d6d0c7c0bbafa59f92877c6f665c5041382d22170b00000000000000131f2c3946525f6c7985929facb8c5d2dfebeaddd1c4b7aa9e9184808181818181818180807f7f7e7c7a7774706d67625f58534e45403930292018100600000000000000000000000000040e1a25313b44505c666f7c87929fa8b2bdc9d5dfe9e2d8cfc1b8aca0968c7f72685e52464e58606d78839098a2aeb8c2ced7e1eee3d9d0c4baaea49e91857a6d615a50453b30251b0f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d5764707d8a959fabb5bfcbd6dbe2e8dfd6cdc5beb9b3adaba8a8a9acaeb4bbc0c7cfd9e2e7e0d8cfc6bcb1a89f92857a6d6054473a2f24190d0100000000000000070d1216181919191919191919191919191919191919171714110c0501080d111314181a1d1e1e1d1b17120c05000000000000000007121d2834404b55606b73808d949ea6aeb9bec5cad0d4d7dcddd8d6d5d6d8dddedcdad5d2cfc7c0bbb0a79f948d80736b60554b4031271d12070000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c56565656565657555d616e7b8896a1acb9c5d2dee1d7cec3b9ada1978b7e7164584b3e3024190d010000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4241414141414141414141414141414141414141413a38352f271f150b01000000000005111d29343f4850565858585858585858585858585858585858585858585e6874818e9aa6b0bbc7d3dfe0d4c7bbafa3998c8073665c5044382c1f15090000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2a89b8f82757a838d929da0a7acafb6b6b7b8b8b7b7b5b5afaca8a09e948f857c706b605b656c747f8790959ea2a9acb1b4b6b7b8b8b7b7b5b3b1acaaa39f97928a80776c665b50483e33291f1006000000000006131f2c3845515d677885929fabb8c5d2deebefe3d7cbbfb5ab94887b6e6155483b2e22150a0000000000000000000916232f3c4956626f7c8995a2afbcd1dce8f4e9dccfc3b6a99c908376695d5043362a1d10030000000000000006121f2b37434e5866727f8c99a7b1bcd0d9e3eeebded2c5b8ab9f9285796d6053463a2d22170b13202c3945515d6775828f9cabb5c0ccd7e3eee2d5c9beb3a99b8e8174675c5145382c1f130700000000000a1623303d495663707c8996a3afbcd1dce7e4d7cabdb1a4978a7e7164554b4039373c4653606c7986929facb9c5d2dfe8dbcec2b5a89b8f8275685c4f4235291c07000000000007121d2b37434e58616d7a849198a2aab2bac1c7ccd2d5cec9c5c4c1bfc0c1c4c5c8ced4d4d0cac4beb6afa59e938c7f736a60544a3f2f261b110600000000000000131f2c3946525f6c7985929facb8c5d2dfebebded2c5b9aca096918d8d8d8d8d8d8d8d8d8d8c8b8a888684817d7a746f6a625f57514b433b322a22180f060000000000000000000000000009141f28343f4a545f6a73808d96a0acb9c1cdd7e1eae1d4c8bdb2a89f92857b6e61594f55606a737f8c959faab4bfcad4e0e9e8ddd2c7bdb2a89d928a7d70685d52483e33291f130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25303b4955616c76839099a3aebbc0cad0d7e0e3dfd6cfc9c5beb9b8b5b4b6b8babfc6cbd1d9e1e2dbd6cec6bdb4aaa0958c7f72685d5245392c1e13080000000000000000000106090c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a080500000000010407070b0d101112110f0b0701000000000000000000010c18232e39434f59606c78828f939da4adb3babec5c7cbd1d0d1d2d3d6d3d2d1d0cfc9c6c1bdb5afa69f958f82786d60594f43392e1f150b010000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f49494949494a4b535f697884919eabb7c4d1dee9e0d6cabeb3a99b8e817568564c4135291d11050000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4745403931271d120700000000000915212e3a45505a6265656565656565656565656565656565656565656565656f7c88949fabb7c4d0dde3d7cbc0b5ab9e9184796d6053463c31261a0e0200131f2c3946525f6c7985929fa6a6a6a6a6a6a6a6a6a6a6a69b8f82756d79818991959c9fa4aca9aaabababaaa8aba39f9c96918a827b6f6a6059535b606d727c838c92979da0a7a7a9aaabababaaa8a7a7a09d98928d857e736c655b544a3f362c21170d00000000000004101d2935404b556a7784919daab7c4d0ddeaf3e7dcd1bdb0a4978a7d7164574a3e32261b0b0200000000000000030f1b27333f495365727f8b98a5b2becbd8e5f9e8dbcec1b5a89b8e8275685b4f4235281c0f02000000000000000814212e3a47535f6a7783909daab7c2cdddebefe3d7cbbfb4aa9b8e8175665c5144382c1b1106111d2935404b5565717e8b99a4afbbc7d4e0ede6dacfc5b8ab9f9285796d6053463a2f24180d01000000000a1724303d4a5763707d8a96a3b0bdc9d6e3e3d6c9bcb0a396897d7063564a3d2f2b3844505b667885929eabb8c5d1dee6dacdc0b3a79a8d8074675a4d4134271a0e0100000000010f1b26323c46525e686f7c869298a1a8afb7bbc2c6c9cfcfd1d1cdccccced1d2d1d2ccc8c5bebab2aca49f938e81746d63584e42382e1d140a0000000000000000131f2c3946525f6c7985929facb8c5d2dfebede1d5c9bdb2a8a09e9a9a9a9a9a9a9a9a9a999998979a93918e8a86817c766e6a605c554d443c342a21180e04000000000000000000000000030b17232e38424e58606d7984919ea5afbbc5cfdae6e5d9cec3baaea2988e81756b60545c676f7c87929fa7b1bcc6d0dce6eae1d7ccc0b5aba0968d81746b61564c41362c20170d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2d3944505a626f7c87929fa5aebabfc5ced3d8dee1dad5cfc9c6c5c2c1c2c5c6cad0d7dce0dbd6d0cac3bcb4aba2989184796d60564c4135291d0c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303d44505b666d79818d929ea1a9aeb3b9bbc0c1c3c5c5c7cac7c5c4c3c1beb9b8b0aba39f948f837a6d665c50473d30271d0d03000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423d3d3d3d3d424d576a7683909da9b6c3d0dce9e6dacfc4b7ab9e918478685d5246392d2013070000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a53514b43392f24180c00000000000b1724313d4a56626c71727272727272727272727272727272727272727272727276838f9ca9b6c2cfdce8dcd1c7b9ada1978a7d7164574d42372b1e120600131f2c3946525f6c79859299999999999999999999999999998f8275676d747d838a90939a9a9c9d9e9e9e9d9c9999928f8a847e766e6960584f49505b626a6f797f858c9095989a9c9d9e9e9e9d9c9a9795908c86807a706c605b534a42382d241b0f05000000000000000c18242f424f5c6975828f9ca8b5c2cfdbe8f6e6dacdc0b3a79a8d807467584e43372b1d140a000000000000010b151f2b3744505b6575818e9ba8b4c1cedbe7f3e6d9ccc0b3a6998d8073665a4d4033271a0d00000000000000000815222f3b4855626e7b8895a0acb8c4d1deeaece0d3c7baaea3988a7d7164544a4034281c0a000d18242f3a4754616d7a86939facb9c6d2dfececdfd3c6baada2978a7d7064554b4035291d1004000000000a1724303d4a5763707d8a96a3b0bdc9d6e3e3d6c9bdb0a3968a7d7063574a3d302e3945515d677885929fabb8c5d2dee5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000a15202a36414c56606a707d8691969ea5abb0b8b9bec1c3c4c6c9cfd0cac7c5c4c2c0bbb9b3ada8a19a938d81786d605b51463d30261c0b020000000000000000131f2c3946525f6c7985929facb8c5d2dfebf1e5d9cec4bab2acaaa7a7a7a7a7a7a7a7a7a6a6a5aca49f9e9a99928e88827b736d675e564e463c332920160c0200000000000000000000000006111c26303c45515d67707d89939ea9b3becad6e0eae0d6cabeb4aa9f93877c6f665b606d79839199a3afb9c2ced8e2ede2d8cfc6bbafa4999184796d60594f443a30241a0e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101c28333e4754606a727f8c939da4aeb4bcc1c7cdd2d4d9dbdad5d2d1cfcecfd2d3d6dbdcd7d3d0cac6bfbab1aaa39992867c6f675c51443a3024190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e28333f4a545c676d78808a92979fa2aaacafb5b5b6b8b8babfbab9b7b6b4b3adaba69e99928c82796d685d544a3f352b1e150b00000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42414141414045515c667784909daab7c3d0ddeaebdfd2c5b9ada196877a6d6154473a2e2114070000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686767676767676767676767676767676767676767676767605d554b4035291d1004000000000b1825323e4b5865717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f818e9ba8b5c1cedbe8e3d5c9beb2a99c8f8276695f53473a2e21140800131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c827568606b70787d83878b8d8f91919291908f8d8a86827e78716c615e574e463f44515860666d727a7f83888b8e9091919291908f8d8a88847f7a746d68615a504941382f261c12090000000000000000071a2734404d5a6773808d9aa6b3c0ced9e5f1e9ddd0c3b6aa9d9083776a5f53473b2f261c110a06040004060b121d2731394653606c7884919eabb7c4d1deeaeee2d6cabeb3a9978b7e7164584b3e3125180b0000000000000006131f2b37434e586673808c99a7b1bcc8d4e0edecdfd2c5b9ac9f92867a6d6053473a2e23180c000713202d3946525e687683909ca9b6c3ced9e5eee2d6cabeb3a99b8e8175675d5145392c20130800000000091623303c4956636f7c8996a2afbcd0dbe7e4d7cbbeb1a4988b7e7165564c413b3a3e4753606d7a8698a2aebac6d3dfe1d5c9bdb2a896897c706356493d3023160a000000000000040d1925303a444e58606b707c848e939c9fa6abadb3b4b6b8b9bebababfbab8b7b5b6afaca9a29f96918880786d665c504940342b1e140a000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf6ebe0d6ccc4bdb9b7b4b4b4b4b4b4b4b4b3b3b2b2b6afacaaaba39f9b948f8680796e685f584e453b32281e1308000000000000000000000000000a141e2935404b55606b75818e97a1adb9c2ced8e2e7dbd0c5bbafa49a9083786c606b74808d95a0abb5c0cbd4e0eae7dcd1c6bdb1a79f93877d6f675d51473e32281e120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222b37434e58626d74818d929fa2aab0b7bbc2c5c8cecfd0d2d3d6dbd4dad6d2d1d0d1cbc7c5bfbab4aea7a09892877e706a5f554b4032281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17222d38424b555c666d747d858c92989c9fa3aba8aaabacaeb4aeacaba9a7a9a19e9a948f8780786d675d564c42382e231a0c0300000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4e4e4e4e4e4b5156606d7985929facb8c5d2dfebede1d5c9bdb2a894887b6e6155483b2e2215080000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757474747474747474747474747474747474747474747474746d675d5145382c1f130600000000121f2c3945525f6c78858b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8e939eaab6c2cfdce8e6dacfc4b7ab9f94887b6e6255483b2f221508000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e71645960666d71767a7e8083848585848482807e7a76716d66615a524d453d333f464e545c60676d72777b7e8183848585848482807e7b77736d68605d5650443f382f261d140a0000000000000000000b1724313e4a5764717d8a97a8b1bdc8d4e1edeaddd1c4b8aba095887c6f62574d42382d231c1412100c1013171d242f39434e5863707d8996a1adb9c5d2dfebecdfd3c6baada297887b6e6255483b2f221508000000000000000815222e3b4754606a7784919daab7c3cdd9e4f0e3d7ccc0b5ab9c8f8275675d5145392c1c12070005111e2a36414c5665727f8c98a7b1bcc8d4e0ede6dbd0c5b8ac9f92867a6d6053473a2f24190d010000000916222f3c4955626f7c8895aab4becad6e2e7dacec1b4a79b8e8174685d524b4847484f5963707d8996aab4becad6e2ded2c5b9aca196877a6d6054473a2d2114070000000000000008131e29323d464f59606a6f7a81898f949a9ea1a9a7a9abadb3adaeb4aeacaaa9aca49f9c97928c847d736c665c544a3f372e22190c02000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f2e8ded6cec9c5c4c0c0c0c0c0c0c0c0c0c0bfbec0bbb9b7b4aeaca69f99928d837a6f6a5f574d443a3024190b02000000000000000000000000020c18242f39434f59616d7a85929ea6b0bcc6d0dbe7e2d8ccc0b6aca0958b7e7168707d88939fa7b1bdc7d1dde6e9e0d7cbbfb4aba0958d80736b60554b40352c20160c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1b27323d46515b606c77808b92989ea6abb0b7b8bdc0c2c4c5c6cad0c7cfcac6c5c3c1bfbbb9b4aeaaa29f9590867d706c61584e43392f20160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f39434b545c606c70797f858b8f9299999b9d9e9fa2aaa39f9e9d9b9897918d88827c736c665d554c433a30261c11080000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5a5a5a5a5a5b545c6068717d8a98a2aebac6d3dfecf1e5dacfbcafa295897c6f6256493c2f2316090000000000131f2c3946525f6c7985929facb8c5d2dfebeaded1c4b7ab9e918481818181818181818181818181818181818181818181818181796d6053473a2d20140700000000121f2c3945525f6c78859298989898989898989898989898989898989898989898989b9ea5afbac6d2deebebe0d3c7bbb0a6998d8073665a4d4033271a0d000c1825313e4a57636d7273737373737373737373737373737373716c6155545c6064686d71747677787878777573716d6864605c545046423b3327343d424b51555d6065696e72747677787878777574716e6966615e56524c443e332d261d140b020000000000000000000814212e3b4754616e7b8795a0acb8c5d1deeaece0d4c8bcb1a79b8e8174695e544a3f342e26201f1c181c1f22282f35404b55606a76828f9ca8b2bdc9d5e1edebded2c5b8ab9f9285796c605346392d201306000000000000030f1b27333f4953626f7c8896a0acb8c5d5dfeaede0d4c7bbafa4998b7e7165554b4035291d0b0000010d1925303b4855616e7b8895a0acb8c5d1deebece0d3c6baaea2988a7e7164564c4135291d11040000000815212e3b4854616e7b8798a2aebac6d3dfebdfd2c5b8ac9f92867a6d615c5554545559616b75818e9ba8b4c1d0dbe7ded1c4b7ab9e918478685d5245392c20130700000000000000020c17202b343d474f5860686d757c82888d9297989b9c9ea1a9a0a1aaa29f9e9c9a9a93908b858079706b605b544a42382e251c100700000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f9f0e8e0d9d5d2d1cdcdcdcdcdcdcdcdcdccccd2ccc8c6c4bfbab9b0aba39f9590847c6f695f564c4135291d140a0000000000000000000000000007121d27313d46525e68717e8b949faab4bfcad6e2e8ddd2c7beb1a79e92857a6d7a84919aa4afb9c3cfd9e3ece2d7cec5baaea3999083796d60594f43392f231a0e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202b343f44505b656c747e868f949c9fa6aaacb2b3b5b7b8babfbabbbabeb9b8b6b5b5aeacaaa29f98928d837c706b615a50463c31271d0e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d273039424a505a61676d737a7e8386898c8e9092929893989291908e8b8985817c756e6a605b544b433a31281e150a000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275686767676767676768666d717a84919eaab4bfcad6e2eef6e2d5c8bcafa295897c6f6256493c2f2316090000000000131f2c3946525f6c7985929facb8c5d2dfebebded2c5b9aca196918d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d877a6d6054473a2d21140700000000121f2c3945525f6c7885929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a8aaafb7c1ccd7e2eeefe3d8ccc1b4a79b8e8174685b4e4135281b0e000916222e3a46515b63666666666666666666666666666666666664615a504a5053565e616467696a6b6b6b6a696664605d5653504a423e363029222b303940454b5154575f626567696a6b6b6b6a696764615f5754524c45413a3227221b140b02000000000000000000000714202d3a46525e697784919daab7c3ced9e4f0e4d9cdc3b9ac9f92867b6e665b50443f38302d2c2823292c2d33394045515d676f7c88949fabbac4cfdae5efe3d7cbbfb4aa9b8e8275655b5044372b1f120500000000000005121f2b3744505b6573808d9aa8b2bdc8d4e7f1ecdfd2c6b9ac9f93867a6d6154473a2f24180d0000000814212d3a46535f697784919daab7c4cfdae5efe2d6cabfb4aa9b8f8275685d5245392c2013080000000613202d394653606c7985929fabb8c5d2deebdfd3c6baaea2988e81756d6763616162646b707d87929facb9c5d2dfe4d8ccc0b6ac9b8e817468564c4135291d11040000000000000000050e19222b353d464e565d606a6f767c8085888b8e909197939494949892918f8d8a87837e7a736d676159504a423830261c130a0000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8fff9f1eae5e0deddd8d8d8d8d8d8d8d9dad9d9ddd8d4d2d1cbc7c2bdb4aea79f9691857b6e685d52453e2f261b1106000000000000000000000000010b151f2a36414c56626c76828f98a2aebac3d0d9e3e4d9d0c3b9ada1978d8074818e96a1acb6c0ccd5e1eae7dbd0c5bcb0a69f92867c6f665c51473d31281d11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f192227333f49535b606c717b82898f94999ea0a8a7a8aaacaeb4adaeadb3adaba9a8aba39f9c98928d8680796f6a615950483e342a1f150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b151e2730383f4450555d60676d71767a7d8082838585868686868483817f7c78746f6a625f58504a423a31281f160c03000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827574747474747474747576797e849196a1acbcc5d0dbe7f2eee2d5c9beb3a995887b6f6255483c2f2215090000000000131f2c3946525f6c7985929facb8c5d2dfebede1d5c9bdb2a8a19e9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a93877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b5b6bac1c9d3dde8f3f4e7dacec1b4a79b8e8174685b4e4135281b0e0006121e2a353f4951575959595959595959595959595959595959575550483f44464c5254585a5c5e5e5f5e5d5c5a5754524c46443f38302a251f191e272e343a4145474d5355585b5d5e5e5f5e5d5c5a5755534d4746413a3530282017110a02000000000000000000000005111e2a36424d576773808d9aa7b1bcc8d4e1eceae0d3c7baaea3989082786c605a504a423d3a38342f34383a3f444b515b606d7984919da6b0bbccd6e0ebece0d3c7baaea3988b7e716453493f33271b0f030000000000000613202d394653606c7884919eabb7c3ced9e5e5e5dccfc3b6a99c908376685e5246392d1d130700000005121e2b37424d576673808d99a8b2bdc9d5e1e5e7dbd0c5b9ac9f92867a6d6054473a3025190d01000005121f2b3744505b657683909da9b6c3d0dbe7e2d6cabfb4aa9e938d8079736f6e6d6f71767d859299a3afbbc7d4e0e0d4c8bbafa49a8a7e7164574b3e3024190d0100000000000000000007101a232b343d444c525860626a6f74787b7f818385868687878786858482807d7a76726d67605d554f443f382f261e150a010000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f9efe7dfd9d4d1d0cbcbcbcbcbcbcbcccdd0d2d4d7dcdfdcd7d3cfc6bfbab1a9a19791847a6d60594f41382d22170b00000000000000000000000000030d1925303a44505a616e7b86929fa7b1bdc7d2dde8e2d6cabeb3a99f92877f8c939ea8b2bec7d2dee7e9dfd6cabfb4aa9f948c7f726a5f544b40342b1f160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071017222d384149505a62696e757c82888c9196979a9c9d9fa2aaa1a1a1a9a19e9d9b999992908b86817b736d675f584f473e362c22180d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e262e343e434b51555d6064676d707375777879797a7979787674726f6c65625f58534e443f382f281f160d0400000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaded1c4b7ab9e91848181818181818181818183858a9196a1a8b2bdced7e2ecf8ecdfd2c6b9ada197877a6d6054473a2d2114070000000000131f2c3946525f6c7985929facb8c5d2dfebf1e5dacec4bab2acaba7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb8bebebebebebebebebebebebebebebebebebebebec1c2c6ccd3dbe5effaf4e7dacec1b4a79b8e8174685b4e4135281b0e00010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e34383a4146474b4d5051525251514f4d4a4745413a38342e261e1a140c151d23282f35393c4247484b4e5051525251514f4d4b4846423b39363029241e160e0600000000000000000000000000020e1a25303c4955626f7c8895a0acb8c5cfdae6efe3d7cbbfb4aa9f948c7f736c605c544f49464440434045474a50555d606e74818e96a0acb8c2ccdee8f2eadfd2c5b9ac9f92867a6d6054473a2d22170b00000000000003101c28343f4a54636f7c8996a1adb9c5d5d8d8d8d8d4c8bcb1a7988c7f7265564c41362a1e1105000000020e1a26313c4956626f7c8996a1adb9c5d2d8d8d8d8d3c7baaea3998b7e7165564c41362a1e11050000030f1b27333f49536774818d9aaab4becad6e4e7dbd0c5bcafa59d928d847f7c7b7a7b7e828a9297a2abb5c0cbd7e3dfd2c6b9ac9f93877a6e6154473b2e211408000000000000000000000008111a222b323a41454e54585f62656c6f72747678797a7a7b7a7a79777673716d6865605d55514b433e332d261d150c03000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f1e7ddd5cec8c5c3bfbfbfbfbfbfbfbfc0c3c5c7cbd1d9e1e3e0d8d1cbc2bbb2a9a0968e81746b6153493f33271b0f030000000000000000000000000008131e28323e46535f69727f8c95a0abb5c0ccd7e0e6dacfc5bbafa399928c919ca5afbac4d0d9e4ece1d7cdc5baaea2989082786c60584e42392e22190d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f4450575f616b6f767b8084878a8d8f91929893949494939792908e8c8986837e7a746e69605c554e463e352c231a10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c2328313a41454b5154555d606366686a6b666c6d6c666b6a686562605b53534e47433c332d261d160d040000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebded2c5b9aca196918d8d8d8d8d8d8d8d8e8e9092989ea1a9b2bac4cee0e9f3f4ebded1c5b8ab9e928578685d5245392c2013070000000000131f2c3946525f6c7985929facb8c5d2dfebf6ebe0d6ccc4bdb9b7b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4ada093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb8c5cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcecfd2d7dde5edf5f5f4e7dacec1b4a79b8e8174685b4e4135281b0e000007111c252d353a3e3f404040404040404040404040404040403e3c3933282b3036393a3e4143444545454442403e3a3935302b28231c140c09030b12181d24292c31373a3b3f4143444545454442413e3b3a36312d2a251e19130c040000000000000000000000000000000915222e3b4754606a7783909da9b3bec9d5e2ebe7dcd1c6bcb0a69f93877e736d6660595653514a504b5153545b60676d74808c939da8b2bdcad4def0eae0d4c8bcb1a79b8e8175685d5245392c1b110600000000000006121f2b3844505c6674818d9aa8b2bdc9cbcbcbcbcbcbc5b8aca095887b6e6155483b3025190d01000000000915222e3b4754606a7884919eabb7c4d0cbcbcbcbcbcbbfb4ab9c8f8276685e5246392d2014090000000b17222d3d4a5763707d8a98a2aebac7d2dde8e2d7cec1b7aea49d96918c898787888b8f949fa2a9b3bdc7d1dce2d6cabfb4aa9c8f8376685e5246392d20140700000000000000000000000008101920282f353d43474e53535b6062656869656c6d6d6e6d6d676b696764615e5654514b45403a3128221c140b0300000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf5eadfd5cbc3bcb8b7b2b2b2b2b2b2b2b3b4b6b9bbc0c7cfd2dbe2e2dcd7cdc4bbb2a89e938a7d70655b5044372b1f140800000000000000000000000000020c16202a36424d57606d78839099a4afbbc4cedae5e1d7cbc0b5aba39f999ca3adb7c1ccd6e2ebe6dacfc5bbb0a69f92867b6e665b50463c30271d1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d333e454d53596063696e73777b7e8082848586878788878686858382807d7a76716d67615e56514b433c342c231a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171f282f353a4145474b515456595b5d5f5b6060605b5e5d5b585653504947433c373128221c140b04000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebede1d5c9bdb2a8a19e9a9a9a9a9a9a9a9a9a9b9c9fa2aaadb2bbc4ccd6e0f2f5ebe2d6cbbfb4aa9b8f827568564c4135291d11040000000000131f2c3946525f6c7985929facb8c5d2dfebf2f2e8ded6cec9c5c4c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0baada093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb8c5d2d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8dbdcdee2e8e8e8e8e8e8e7dacec1b4a79b8e8174685b4e4135281b0e0000000a131c232a2e31333333333333333333333333333333333331302d28221f252a2d2e31343637383838373633312d2c29241f1c17110a02000000070c13181d20262b2e2f32343637383838373634312e2d2a26201d19130d08020000000000000000000000000000000006131f2b37434e5865727e8b97a1adb9c4d0d9e4ede2d8cfc2bbafa49993888078706b6662605c545d555c6063666c7179818c929ca5afbac3cedce5ede2d8cec6b8ab9f95897c6f63564c4135291d0a000000000000000713202d3a4653606d7985929eabb8bfbfbfbfbfbfbfbfbfb7aa9d908377695f53463a2d1e1308000000000006131f2b37434e586774818d9aa9b3bebfbfbfbfbfbfbfbfb9ac9f92867a6d6154473b30251a0e0200000613202d3a4653606d7985929facb6c0ccd8e2e9e0d3c9c0b7aea8a19e9996949495979c9fa6adb3bbc5cfd9e3dfd3c6baaea2988b7e7265564c41362a1e110500000000000000000000000000070d161e242932373c434749505355585b535b6060616161605d555c5a5754524c4745413a352f281f17110a020000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf0e5d9cec3b9b1acaaa5a5a5a5a5a5a5a6a7a9acafb5bdc0c9d0d9e2e7dfd6cdc4baafa59d9183786c6053463b3025190d0100000000000000000000000000050e1a26313b44505c666f7c87939fa8b2bdc9d5dfe8dcd1c7bdb5afaca6a8adb6bfc9d2dee8e8dfd6cabeb3a99e948b7e71695f544a3f342a1e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b2227333b42464f54575f6166696e7174757779797a7a7b7a7a7978767573706d6765605d55524d454039312a221a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d161d24292f35393a4145474a4d4f504a50535353504a504e4c4946443f3837312b262017110a0200000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf1e5dacec4bab2acaba7a7a7a7a7a7a7a7a7a8a9abaeb4b9bdc4cdd6dee8f4ebe3d9d0c7baaea3988b7e7265584b3f3024190d010000000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e8e0dad5d2d1cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc6baada093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb8c5d2dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdacec1b4a79b8e8174685b4e4135281b0e000000010a11181e222526262626262626262626262626262626262423211c1713191e20212527292b2b2c2b2a29272421201d1913100b0600000000000001070d11151a1e212225282a2b2b2c2b2a29272422211e1a14110d0802000000000000000000000000000000000000030f1b27323c4753606d7985929ea8b2bec7d2dde8eae1d7ccc0b5aba49a938c837d77726f6d666a6a6a676d6f73787e848e939ca4aeb7c0ccd5dfeee7dbd0c6bcb0a69d9083766b6054443a2f24190d00000000000004101c2834404b5563707d8997a1adb2b2b2b2b2b2b2b2b2b2b2a8998c807366574d42362a1e0d020000000000030f1b27323d4a5663707d8997a2adb2b2b2b2b2b2b2b2b2b2afa3998b7e7265574d42362a1e1205000006131f2c3845515c6774818e9aa4afbbc6d0dbe7e4dbd2c9c0bab2adaba6a2a1a0a2a4a9aab0babec5cdd7e1e2d7cbc0b5ab9f92867a6d6054473b3025190e020000000000000000000000000000040c131920272b3137383f4446484c4e4950535354545453514b4f4d4a4746413a39352f29241d160d0600000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebede0d4c8bcb1a7a09d98989898989898999a9d9fa3abafb7bec7d0dce5e8dfd5ccc1b8aca0958a7d7064564c41362a1e1105000000000000000000000000000009141f28343f4a54606a74808d96a1acb9c1cdd7e1e3d9cfc7c0bbb9b2b4b8bfc8d1dbe4ebe2d6ccc4b9ada1978f82756d62574d42382d22180c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a1117212a31363d44484d5355565e616467696a666d6d6e6e6e6d6c666a686663605d5554514c46423b342f271f181008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d24292c2f35393a3d4042443f44464746443f43413f3c3937332d2b26201a150b06000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf6ebe0d6ccc4bdb9b7b4b4b4b4b4b4b4b4b4b4b6b8babec5c9cfd6dfe8ede7e2d9d2c7beb3a99f92867a6d6054473a2d211408000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d3c6baada093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb8c5cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcec1b4a79b8e8174685b4e4135281b0e0000000000070d1216181919191919191919191919191919191919171714110c080d111314181a1d1e1f1f1e1e1c1a171413110d0803000000000000000000000104090e121415181b1d1e1f1f1e1e1c1a181514120e0905010000000000000000000000000000000000000000000a151f2c3845515c67727f8b96a0acb6c0ccd8e0e9e8ddd2c7bdb5aca49f959089837f7c797877767778797c80848a91969ea5aeb6bfc9d2dee7e8dfd6cabfb4aa9f948a7d7063594f4432281e130800000000000006131f2c3845515c6774818e9ba9a5a5a5a5a5a5a5a5a5a5a5a5a196887c6f6255493c31261a0e000000000000000a13202d3a4653606d7985929fa5a5a5a5a5a5a5a5a5a5a5a5ab9c908376695e52463a2d201407000004101c2834404b55626e7b87939faab4bfcad6dde6e4dbd2ccc4bdb9b7b2afaeadaeb1b5b7bbc2cacfd7dfe4d9d0c7bbafa3998d8074685d524539291e14080000000000000000000000000000000001080d151b20262b2d3337393c3f413f44464747484747454043403e3a3936302c29241d18130c040000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaded1c5b8aca095908c8c8c8c8c8c8c8c8d9092999da5adb5becad3dee9e7ded4c8bcb1a79c908376685e5246392d2014070000000000000000000000000000030c17232e38424e58606d7984919ea5afbbc5cfdbe6e1d9d1cbc7c5bfc0c4cad1dae3eee4d9d0c4baafa59e92857a6e615a50453b2f261c1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f181f262a32383c4246484d5254575a5c545c606061616160605b545b595653514b4745413a363029231d150d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d13181d2024292c2d3033352d3338393a3938332d35322f2d2b27221b1b150f090300000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2f2e8ded6cec9c5c4c0c0c0c0c0c0c0c0c1c1c3c5c6cad0d5dae0e8e6e3dcd7d0c7c0b6aca1978d8074685d5245392c201307000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc6baada093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb8c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c1b4a79b8e8174685b4e4135281b0e0000000000000106090c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a08050000010507070b0e1011121212110f0d0b07070401000000000000000000000000000000020608080c0e1011121212110f0e0b0807050200000000000000000000000000000000000000000000000004101c2934404b55606d7984919aa4afbbc3ced7e1eae3d9d0c7beb6afa7a09d95908c8986848383848586898c91969ea1a8afb7bfc8d1dbe4e9e0d6cdc4baaea2988f82766b6155473d3220160c010000000000000713202d3a4653606d7985929898989898989898989898989898989184786a5f53473b2e1f14090000000000000006121f2c3844515c6675818e98989898989898989898989898989893877b6e6154483b2e2115080000000c18232e3947535f6a75828f98a2aebac1cbd4dce6e4ded6cfc9c5c4bfbcbababbbec2c3c7ccd6dbe1e4ddd2c7beb3a99f92877b6e61564c413529170d02000000000000000000000000000000000000040a0f151b1b22272b2d2f322d3337393a3a3b3a3a39352f34312e2d2a25201d18130d0701000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeaddd0c3b7aa9d90837f7f7f7f7f7f7f808183878e929ba3adb8c1ccd7e3f0e5d9cec3b9ac9f93867a6e6154473b2e21140600000000000000000000000000000006111c26303d45515d67707d8a939ea9b3becad6e1eae3dcd7d4d2cccdd0d5dbe3ece8ddd2c7beb2a89e938a7e71685e52483f33291d140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e141a21272c31373a3b4246474b4d4f4a5153545455545353504a4f4d4a4745403a39352f2a251f18120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d1113181d202123262822282b2d2d2d2b2822282523201f1b17110f0a03000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e8e0dad5d2d1cdcdcdcdcdcdcdcdcdcecfd2d3d6dbe2e2dfdedad5d1cbc4bdb5afa49a92857a6d61564c4135291d1104000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbaada093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fabb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4a79b8e8174685b4e4135281b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3945515c66707d88939fa8b2bcc5cfd8e3ebe2d9d0c7c0bbb1aca7a09d9999929190909091939a999ea0a8acb2bac1c9d1dae3eae1d7cec4bbb0a69f92867b6e61594f44352b210d04000000000000000a1724313d4a5764707d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c807467584e43372b1f13060000000000000004101c2834404a5464717e8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f7265594c3f3226190c00000007121d2b37434e58616e7b86929fa5afb9c2cad5dae0e6e0dad5d2d1ccc9c7c7c8cacfd0d3d8dee6e2d9d2ccc0b6aca1978d8074695f53443a30241905000000000000000000000000000000000000000000040a0f11171b1f20222522272b2d2d2e2e2e2d2c2924272421201d1913110d07010000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757272727272727374767b818b919ba6b0bbc7d3e2edeae0d4c7bbafa4998b7e7265584b3f2d22170b000000000000000000000000000000000a151e2935404b55616b75818e97a2adbac2cfd8e2ede8e3e0dfd9dadce0e6edebe1d8ccc0b6aca1968e81756c61564d41362d21180b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e161b1f262b2d30363a3b3e4142404446474748474746443f42403d3a39352f2c29241e19140c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070d111314171a1c171c1f2020201f1c171b191613120f0b06000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7dbd6d3d2cfc9c6bfbbb2aba49f93887d70685e52443a2f24190d01000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2ada093877a6d6054473a2d21140700000000121f2c3945525f6c7885929fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a79b8e8174685b4e4135281b0e000000000002080d10121313131313131313131313131313131313131313131313131313131211100f0d0b090706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2834404b54606b74808d96a0aab4bdc6d1d9e2e9e2d9d2ccc3bcb8b1acaaaba39f9e9d9d9d9e9fa4acaaacb2b9bdc4ccd2dbe3e9e1d8cfc6bcb3a99f948b7f72695f53473e3323190f00000000000000000a1623303d495663707d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b6e6255483c32261b0f0300000000000000000c18232e3a4753606d797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7064574a3d3124170a000000000f1a26313c46535f69727f8b939ea7b0b8c0c9cfd6dbe1e4e1dfded9d5d4d3d5d7dcdcdfe3e1dbd6d0c7c0bbafa49a92857a6d60574d4232281e1308000000000000000000000000000000000000000000000000060b0f12131519171b1f202021212120201d181a171413110d08040100000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756865656565656667696e747f8b949eaab7c6d1dce7f0e3d7ccc0b5ab9b8e817468544a3f33281c0f03000000000000000000000000000000030c18242f3a434f59616e7a85929fa6b0bcc6d1dce7f4efedece5e6e9ecf1eee3d9cfc7bbafa49a91847a6d605a50443b30241b0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e21252a2d2e31342e34383a3a3b3b3b3a3938332d33302d2c2924201d19130e090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070a0d060b0f12131413120f0b060c090605030000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbd0cac6c5c3beb9b5aea9a199938b7f726c61564c4132281e130800000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a093877a6d6054473a2d21140700000000121f2c3945525f6c7885929c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9b8e8174685b4e4135281b0e00000000060d14191c1f1f202020202020202020202020202020202020202020202020201f1f1e1d1c1a18151312100b060502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e39424f59606d79849198a2abb5bfc7d0d7e0e8e4ddd8cdc8c3bcb8b7b5afacabaaa9aaabacafb6b7b9bdc4c9ced6dee4e8dfd7cfc6bdb4aaa1979082776c60574d42352c21110700000000000000000916222f3b4854606b707272727272727272727272727272727272726e695f53473a2a20150a0000000000000000000713202c3945515d676d727272727272727272727272727272727272706c6155493c3023160a000000000915202a36424d57606c78818f959fa6afb9bec4cad0d4d9dcdedfe2e7e1e8e3e0dfdedcd8d3d0cac4beb6afa49f93887d70685d52453b3120160c02000000000000000000000000000000000000000000000000000003050609060b0f1213141415141413110d070b0707050100000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5959595959575e616d75828f9cabb4bfcbd7e3efe8ddd2c3b7aa9d908477665b5044382b1f12060000000000000000000000000000000007131d28313e46525e68717e8b949faab4bfcbd7e2ebf5f9f8f2f3f5f8f4e8dcd1c7bdb2a89f93887d70685d52483e32291f120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214191e2021242723282c2d2d2e2e2e2d2d2b28222623201f1d1813110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060607060603000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbebebdbebab8b6b3adaba39f9791877f726d62594f443a3020160c0100000000000000131f2c3946525f6c79859298989898989898989898989898989898989898989898989898989898989898989898989898989893877a6d6054473a2d21140700000000121f2c3945525f6c78858f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8e8174685b4e4135281b0e0000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a28272522201f1c1714110e0904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303d45515d676f7c869299a3aeb5bdc5ced6dee5e8dfd9d4cec8c5c3c0bbb9b7b6b6b7b8b9bbc0c4c5c9ced5dae0e8e4ddd8cdc5bdb4aba29891857b6e655b50453c31231a100000000000000000000713202c38444f596063656565656565656565656565656565656565625f574d42372b180e0400000000000000000004111d2935404b555d6065656565656565656565656565656565656564615a5044392d20140800000000030e1a26313b44505b666d798290949da5adb2babec5c8cdd0d2d3d6dbd5ddd7d4d2d1cfcdc7c5bebab2aca49f928d80736b61564c4133291f0e04000000000000000000000000000000000000000000000000000000000000000000030506070708070706040100000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4c4c4c4d4d525b63707d8999a3aebac7d3e0ececdfd2c5b9ac9f9286796c605346392d20130600000000000000000000000000000000010c161f2a36414c56606c77828f98a3aebac3d0d9e4eef9fffffffffcefe3d7cbc0b5aba0968d80746b60564c41362c20170d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205090e111414181a181c1f202121222120201f1c171a171413100c0704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b1b0b3aeaba9a9a19e99928d847d726d625b51473e32281e0d040000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877a6d6054473a2d211407000000000f1c2835424f5b6875818282828282828282828282828282828282828282828282828282828282828282828282828282828282827f7265584c3f3225190c000006101a222a3035383939393939393939393939393939393939393939393939393939393938373533312f2d2b2823201e1914100c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2935404b555f6a707d87929fa4abb4bcc4ccd5dae0e7e4dfd9d4d1d1cbc7c5c4c3c3c3c4c6c8ccd2d2d5d9e0e5e6e2d9d2ccc3bbb3aba39992867c6f695e53493f332a1f110800000000000000000004101c27323d474f545659595959595959595959595959595959595955534d453c31261a0700000000000000000000010d18242f3a434b5153595959595959595959595959595959595959575550483e33281c1004000000000009141f28333f4a545d676d7a828e939ea1a9aeb3b8bcc1c3c5c6cad0c8d2ccc7c6c4c3c0bcb7b3ada9a19a938d80776c60594f443a2f21170d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423f3f40424653606d7986929facb9c5d2dfecede0d3c7bbaea399877a6d6054473a2d2114070000000000000000000000000000000000040d1925303b44505b656e7b86929fa7b1bec7d2dde8f4fffffffff9ede0d4c7bbafa3999184796d60594f443a2f241a0e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b070c101213141415141413120f0b060a07060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707090b0c0c0c0b0a0807050200000000000000060606060606060606060606060606060606030200000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c0904000000000000000000000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a3aaa29f9c9997918d86807a706b625b51493f352c20160c0000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6053463a2d201307000000000e1b2734404d59656f75757575757575757575757575757575757575757575757575757575757575757575757575757575757575726d62564a3e3125180b00020d18222c343b414446464646464646464646464646464646464646464646464646464645444342403e3c3a38342e2d2a251f1c18120c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18242f39434e58606b717e8b9399a2aab2bac1c9ced6dbe2e6e4e0dedcd7d4d2d1d0d0d0d1d2d4d8dddee1e5e5e1dbd6d0c7c0bbb2a9a29992877d706a60574d41382d21180e00000000000000000000000b16212b353d4448494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847423c332a1f1509000000000000000000000007131d28313a4045474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49443e362c22170b000000000000030b17222d38424b555d686d78818a91979fa2aaacb1b4b6b8babebbbcbbc0bbb9b7b6b3b0aba9a29f96918880746c655b50473e32281e0f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423532303845515c677884919eabb7c4d1deeaefe3d7cbbfb5ab94877b6e6154483b2e21150800000000000000000000000000000000000008141e27333f49535f69737f8c95a0acb6c0ccd8e4f0fcfffffbefe2d6cabfb4aa9f92877c6f675d51473d32281e1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060707080808070606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080d111314161818191818171414110e080604000004061313131313131313131313131313131313130f0f0d09040000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b191510090200000000000000000000000000131f2c3946525f6c7985929898989898989898989898989898989898989898989898989898989898989897969892908d8985807b746d68605951493f372d231a0e050000000000000000000b1824313e4a56626d727272727272727272727272727272727272727272727272727272727272727272727272727272727272726d675c5145382c1f1306000000000c1825313d48535d656869696969696969696969696969696969696969696969696969696969696969696969696969696969696965625b51463a2e2216090008141f2a343e464d515253535353535353535353535353535353535353535353535353525251504f4d4b4846443f3b3a36302c28231c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313c464f59616c727f879298a1a8afb9bdc4cad0d5dae0e2e7e8e3e0dfdedddcdddedfe0e4e8e7e2dfdad5d0cac3beb6afa8a09792877e716b61584e453b2f261b0f060000000000000000000000050f19232b32383b3d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b3a37312a21180e030000000000000000000000010c161f282f35393a3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c39332c241a10050000000000000006111c262f39434c565d666d747e848d92989da0a7a7a9abaeb4aeafafb5afacaba9a7a69f9c97928c847d736e605b53493f352c20160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235252a36414c566a7784919daab7c4d0ddeaf3e7dcd1bbaea195887b6e6255483b2f221508000000000000000000000000000000000000020b17222d38414d57606d7883909aa4afbbc8d4e0edfafffff9ecdfd3c6baaea2988c80736a60554b40352b20160c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213191d20212324252525242321201e191312100c0c10132020202020202020202020202020202020201c1b191510090200000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c03000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8b8a89878583807c78736e69605d564f473f372d251b1108000000000000000000000916222e3a46515b6265656565656565656565656565656565656565656565656565656565656565656565656565656565656565605c554b4034281c1004000000000814202c37414b53595b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c585651493f34291e1206000d1925303b4650585d5f606060606060606060606060606060606060606060606060605f5f5e5d5b5a585553504a4746423b38342e29241d150d09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a343d47505a626d727d8691969ea5acb2babec5c9cfd3d6dbdedfe2e6e4e4e5e4e4e6e2dfdedbd6d3cfc9c5bebab2aca49f9691857d716c61594f463c33291d140a0000000000000000000000000007111921272c2f303232323232323232323232323232323232322f2e2b261f180f0600000000000000000000000000040d161d24292c2d32323232323232323232323232323232323231302d28221a11080000000000000000000a141d27313a444c545c606c717a80858b9095989b9d9fa2aaa2a2a2aba49f9e9c9a9794908b857f79706b635c504941382d231a0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423630363a46525e687885929eabb8c5d1deebefe2d6cabfb4aa94877b6e6154473b2e2114080000000000000000000000000000000000000006111b262f3c44515c666f7c87939facb9c6d2dfecf9fffff8ebdfd2c5b8ac9f92857a6d60584e43392f231a0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090b0c0d0e0e0e0d0c0b09070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b11171c1f20252a2d2e303132323231302e2d2a25201f1c18181c1f2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000006101a222a30353839393939393939393939393939393939393534312c261e150c0200000000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7d7c7b787673706c66615e57524c443d352d251b130a000000000000000000000006121e29343f4951565859595959595959595959595959595959595959595959595959595959595959595959595959595959595953514b43392e23180c0000000000040f1a252f3941484d4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c4a463f372d23180d0100101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a68666462605c5454524d46444039352f271f1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18222c353e48515b626b707c848e939ea1a8aeb4b9bec4c7cad0d2d3d6dbd7d8d8d8d7dad6d2d1d0cac6c4bdb9b3ada8a09a938e847b6f6b615a50473e342b21170b020000000000000000000000000000070f161c20222326262626262626262626262626262626262622211e1a150e06000000000000000000000000000000040c13181d20202626262626262626262626262626262626262423201c17100800000000000000000000020b151f28323a424b515a61676d737a7f83878b8e9092989495959595999391908d8a87837e7a736d67605952443f382f261b1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f43434341464c55616e7a8797a1adb9c6d2dfececdfd3c6baaea29886796d6053473a2d20140700000000000000000000000000000000000000020b17212a36414c56616b7683909ca9b6c3cfdce9f6fffff9ecdfd3c6baaea2988c7f72695f53463e32291e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070c1013141618191a1a1b1a1a1918161413110d070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c22282b2d3036393a3c3e3f3f3f3e3d3b3936302d2c282323292c3939393939393939393939393939393939393635312c261e150c0200000000020d18222c343b4144464646464646464646464646464646464642413d3730271e140900000000000000000000000b1824313e4a56626d727272727272727272727272727272727272727272727272727272727272727271706f6e69696663605b54524d45413a322c231b130a010000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4645403930271d120700000000000009131e272f373d40424242424242424242424242424242424242424242424242424242424242424242424242424242424242423f3e3a342d251b11070000121f2b3844515d69747979797979797979797979797979797979797979797979797979797877767573716f6d6665615e5653514a454039312a251f170e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101a232d363f495159616a6f7a818991969fa2aaadb3b8babfc2c5c6cacfcacbcbcbcacfcac6c5c2bfbab8b2ada9a29f969188817a6e69605950483e352c22190f0500000000000000000000000000000000050b101316161919191919191919191919191919191919191514120e0903000000000000000000000000000000000001070d111314191919191919191919191919191919191919171614100b05000000000000000000000000030d1620283039404550555d60676d72777b7e81838587878889888887868483807d7a76726d68605d554f4740332d261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c505050504d52555d67717e8b98a9b3bec9d5e2eeebdfd2c5b8ac9f928579675d5145392c201306000000000000000000000000000000000000000a141d29333b46525e68707d8a949fabb7c4d0ddeaf6fffffbefe2d6cabfb4aa9f92867b6e615a50443a3025190d0400000000000000000000000000000000000000000000000000000000000000000000000000000000070c101313181d1f20222526272728272726252320201d181413100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c141c23282d3338393d414647494b4b4c4b4b4a4746413d3a38342e2f343846464646464646464646464646464646464642413d3730271e14090000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b1004000000000000000000000916222e3a46515b626565656565656565656565656565656565656565656565656565656565656565656463615e575a5653504a46423b353028201a1109010000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a38342e271e150b00000000000000020c151e252c31343536363636363636363636363636363636363636363636363636363636363636363636363636363636363632312e29231b1309000000131f2c3946525f6c7986868686868686868686868686868686868686868686868686868585848382807e7b7975726e6964605c54514b433e363029201a1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111b242d373f474f585f686d757d848c92989ea1a9acaeb4b6b8babebdbebebebebebdbeb9b8b6b4aeaca8a19e97928c847d746d675f574f473e362c231a1007000000000000000000000000000000000000000407090a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c08080602000000000000000000000000000000000000000000010406070c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a0a0804000000000000000000000000000000040e161e272e343e434c51555d6065696e717476787a7b7b7c7c7b7b79787674716e6865605d56514b433d3527221b140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685d5d5d5d5d565e61676d7984919eaab7c4cfdae6f2e9dcd0c3b6a99d9083766a554b4035291d100400000000000000000000000000000000000006111b262f3b45505a616d7a85919ea6b0bbc7d3e0ecf8fffffef2e7dbd0c6baaea2988f82766c62564c41362a1f160c01000000000000000000000000000000000000000000000000000000000000000000000000030a0f12181c1f2024292c2d2f3133333434343333312f2d2c2924201f1d18120f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910181e262e34383f4446494c52545657585858575654524d4a464440393940455353535353535353535353535353535353534f4d49423930261b10040000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2115090000000000000000000006121e29343f495156585959595959595959595959595959595959595959595959595959595959595858575654524d4d4946443f38363029241e160e080000000000000000000000000000000009131b23292e31323232323232323232323232323232323232323232323232323232323232323232323232323232323232322d2c28231d150c030000000000000000030c131a202527282929292929292929292929292929292929292929292929292929292929292929292929292929292929292525221e18110901000000131f2c3946525f6c798592939393939393939393939393939393939393939393939993929291908e8d8b8885827f7b76716d66605d555046423b332c2418120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b252d353e464e565e616b707980858c91979b9fa2aaa9abadb3b0b1b1b2b1b1b0b3adaba9aaa29f9b96918c857f79706b605d554d453d352c241a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c151d2328313a41454b5154575e6165686a686d6e6f6f6f6e6e6d66696764615e5654524c45413a312b2317110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756969696969696a686e727a828f96a0acb9c5d2e1ecefe3d7cbc0b5ab9a8e8174675b4e412f24180d010000000000000000000000000000000000030c17222d38414d57616c75818e97a1adb8c2cdd8e4f0fcfffffff8ede2d6cabfb4aa9f948b7e71685e52463e31281d120700000000000000000000000000000000000000000000000000000000000000000000040a0f151a1d23282c2d2f35393a3c3e3f40414141403f3e3c3a39352f2d2c29241d1b15100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109121a222a30383f444a505356565e6163646565656463615e565753514a45434b515f60606060606060606060606060606060605c5a544c42372c211509000003101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125190c00000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b4a49474642403d3938332d2a251f19130c040000000000000000000000000000000000010911181e222425262626262626262626262626262626262626262626262626262626262626262626262626262626262626201f1c18120b030000000000000000000002090f14181b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c191816120d070000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa49f9f9f9e9d9b999798928f8b87837e79726d67615a524d453e3628231d150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b232c343c444c525961676d737a7f858a8f9298999c9fa2a9a3a4a5a5a5a4a3a9a19e9c9998928e8a847f7a736d676059514c433c332b231a1208000000000000000000000000000000000000000000000000000000000000040607070707070707070707070707070707070707060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181f282f353a4145474d5254585b565e61616262626261605c545a5754524d4745413a352f281f19110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827676767676767677787a7f848f949ea8b2bdc9d5e1f3ede0d4c7bbafa3998b7e7164584b3e312518070000000000000000000000000000000000000a151e27333f49535e69717e8a939ea9b3becad4dee9f5fffffffffef3e7dbd0c6bcb0a69e92857a6d61594f43392f24180c030000000000000000000000000000000000000000000000000000000000000001080d151b20262b2e34383a3d404547494b4c4d4d4e4d4d4c4b494745403d3a39352f2b27201c160d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b242c343c424a50545b606367686d6f7172727271706e686864605c54514b555c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69655e54493d3125190d000005121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b0e020000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d3c3b3a3630302d2b28221c1a140d08020000000000000000000000000000000000000000060d121618191919191919191919191919191919191919191919191919191919191919191919191919191919191919191313100c07000000000000000000000000000004080c0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0c0b090601000000000000131f2c3946525f6c7985929facacacacacacacacacacacacacacacacacacacacb5afacacabaaa9a8a6aaa29f9c99938f8a847f79706c615e57504840342e271e150c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109111a222a323a41464f555d60686d73797d8286898d8f929795969798989897969597928f8d8985827d79726d68605d554f45413a312a211911080000000000000000000000000000000000000000000000000000000000070c10131314141414141414141414141414141414141413120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d161e24292f35393b4246474b4e4c525454555655555453514b4d4a4746413b39353029241d160d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebded1c5b8ab9e9285838383838383838485878b91969ea6b0bac4ced9e5f0e8dfd2c5b9ac9f92867a6d6154473a2e211407000000000000000000000000000000000006111c26303844505b656e7b85929fa5afbbc4cfdce6f0fbf5f3f2f7f7f8ede2d8cec2b9ada2978e81756b61554b4035291e150a000000000000000000000000000000000000000000000000000000000000040c131920262b3137394045464a4b51535558595a5a5b5a5a59585653514b4a4745403937322c272119140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b252d363e464e545c60666c7074777a7c7e7e7f7e7e7d7a7874706d66605c555c677679797979797979797979797979797979797570655a4d4135281b0f000006131f2c3946525f6c7986868686868686868686868686868686868175685c4f4235291c0f02000000000000000000000009131b23292e3132323232323232323232323232323232323232323232323232323232323232323231302e2d2a2523201f1c17110e090200000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9c0bbb9b8b8b7b6b5b3b4aeababa49f9c97918c847d756e69615a5145403930271e140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081018202830363d434b51565e61666d7075797d80838587898a8b8b8b8b8b8a88878582807d7975706d66605d56514b433d352f281f180f0700000000000000000000000000000000000000000000000000000000030b12181c1f20202020202020202020202020202020202020201f1c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d24292c30363a3b3e41414647484849494848464540413e3b3936302c29241e18130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebecdfd2c6b9ada2979290909090909090909197989ea1a8b0b8c1ccd6e0ebe8ded4c8bcb1a79c8f8276685e5246392d20130700000000000000000000000000000000030d17232e38424d57606c77828f97a2adb7c1cdd6e1eef2ede9e6e6eaebedf0eae0d6cabeb3a99e938a7d70675d51453c30261c110600000000000000000000000000000000000000000000000000000000070d161e242932373c43474b515357555d606264666667676766666462605d555753514b47433c38322a251e170e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a242d373f4850585f666d71787d818487898a8b8b8b8a898785817d79726d6760606d7986868686868686868686868686868686868275695c4f4236291c0f000006131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c0f020000000000000000000000010911181e2224252626262626262626262626262626262626262626262626262626262626262525242321201e1a1613120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070a0c0d1313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130f0e0c0904000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d2ccc7c6c5c5c4c3c1c0bebab8b5afaca9a19e96918a827b716c635b514b433930261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e161e252a313a40454c52545c6064676d707376787a7c7d7e7e7f7e7e7d7c7a787673706d6764605c54524c4540393129241e160d0600000000000000000000000000000000000000000000000000000000030c151d23282c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b28221c140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d13181d20252a2d2e323035393a3b3c3c3c3b3b3a38342e312e2d2a25201d19130d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeee2d6cabeb3a9a29e9c9c9c9c9c9c9c9d9ea1a9abacb2bac1cad3dee7e8dfd6ccc4b8aca0958a7d7064564c41362a1d1105000000000000000000000000000000010b151f28343f4a545f69727f8b949fa9b3bec9d3dfe8ede6e1dcdad9dddee0e5eae6dbcfc5bbafa59e9184796d60584e42382e23170c0300000000000000000000000000000000000000000000000000000910191f282f353c43474e53555c606367676d6f7172737474747372716f6d676764605d55544e48443d363029201a11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18222c363f49515a616a6f787e84898e91969697989898979697928e8a847f79706b606d7a869393939393939393939393939393938f8275695c4f4236291c0f000006131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c0f0200000000000000000000000000060d12161819191919191919191919191919191919191919191919191919191919191919181817161414110e09060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d1316191a2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201c1b19150f090200000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2ddd7d4d2d2d2d1d0ced0cac6c5c0bbb9b2ada8a19e938f857e736d605c554b42382e231711070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c13191f282f353a41464b5153555c60636669686d6f707172727271706f6d68696663605c5553514a45413a352f271f19130c0400000000000000000000000000000000000000000000000000000000000b151e272e34383a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3938332d261d140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d11141a1e20212525292d2e2e2f2f2f2f2e2d2c28232421201e1914110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2e6dbcfc5bbb3adaba9a9a9a9a9a9a9aaabadb2b7b9bdc4ccd3dce5e7dfd6cdc4baafa59d9183786c6053463a3025190d0100000000000000000000000000000007121d27313944505c666e7b86929fa6b0bbc5d0dbe5ece3dcd5d0cdccd0d1d4d9dfe7e1d7cdc1b9aca1968d80736a60544a3f34281f1409000000000000000000000000000000000000000000000000010a121b222b313a41454e54585f62676d7074777a7c7e7f80808180807f7e7c7a7774706d67626058544f46413b322c2317110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2a343e48515b626c717c838b91969a9ea0a8a4a5a5a5a4a9a19e9b96918c847d736c6d7a86939f9f9f9f9f9f9f9f9f9f9f9f9f9c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c0f0200000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a09080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282825201b140c03000000131f2c3946525f6c7985929facb8c5d2dfdfdfdfdfdfdfdfdfdfdfdfdfdfdfe8e3e0dfdfdedddcdbdbd6d3d2ccc7c4beb9b2ada59e9892887f756d675c544a3f342823190d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d161d24293036394045464b5153565a565e61626364656565646362615e565a5653514b46444039352f29241d150d0801000000000000000000000000000000000000000000000000000000000007121d27303940454647474747474747474747474747474747474746443f382f261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104090e11141418191d2021212223222221201f1c18171414110e0804010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf7ece1d7cdc5beb9b8b6b6b6b6b6b6b6b7b8b9bec4c5c9ced6dee8e2dcd7cdc4bbb2a89e938a7d70655b504437281e1308000000000000000000000000000000040d18232f39434e58606d78839098a2aeb8c2cdd7e1ede3dad1cac4c1bfc4c5c8ced5dee7dfd5c9bdb2a89f92877c6f665c50443c31261a0e0500000000000000000000000000000000000000000000000a131c242d343d434c51585f626a6e74797d818486888b8c8d8d8e8d8d8c8b898684817d79756f6a636059524c443e3627221b140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303c46505a626d727e8690959ea0a8aaacb2b1b1b2b1b1b3adaba8a19e96918880786d7a8693a0acacacacacacacacacacaca89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242a2f32333939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393534312c251e150c020000131f2c3946525f6c7985929facb8c5d2dfebecececf2ebe5e1dedddadadadadadadadadcdddfe0e3e7e2dfddd7d4cfc9c4bdb9afaaa29a938c81796d665c504440352b1f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181e252a2e34383a4045474a4d4c525456575858585858575554524c4d4a4645403a38342e29241e18120b03000000000000000000000000000000000000000000000000000000000000000c18232e39424b515353535353535353535353535353535353535353504a42382d22170b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050708080d1113141515161615151313100c07080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2f3e9dfd7cfcac6c5c3c3c3c3c3c3c3c3c4c6c9cfd2d5dae0e3ddd7d1cbc2bbb3a9a1968e81756c6153493f3327160c020000000000000000000000000000010c161f2934404b55606a737f8c959faab4bfcad4dfe9e6ddd1c8bfb9b4b3b7b8bcc3ccd5dfe5dacec4bbafa3999083786d60574d42372b20170d0200000000000000000000000000000000000000000009121c252e363e464f555d606a6f767b81858a8d9193999799999a9a9a9999979a93918e8a86817c76706b615e56504840332d261d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424e58616c727f8a92989fa7acb2b7b9bdbdbebebebdbeb9b8b2ada8a09a938c8178798693a0adb9b9b9b9b9b9b9b9b9b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353b3f4046464646464646464646464646464646464646464646464646464646464646464646464646464646464646464642413d3730271e14090000131f2c3946525f6c7985929facb8c5d2dfebf8f9f0e7e0d9d5d2d1cdcdcdcdcdcdcdcecfd0d2d4d7dcdfe1e6e3e0dad5cfc9c1bcb3aca49f938e81786d605b51473d31281d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d13191d23282c2f34383a3d40414647494a4b4b4c4b4b4a49474641403d3a38342e2c28231c19130c07010000000000000000000000000000000000000000000000000000000000000004101c2834404b545c60606060606060606060606060606060606060605b544a3f33281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070809090908080706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e9e1dbd6d2d1cfcfcfcfcfcfcfd0d1d2d5dadedfdedbd6d2ccc6bfbab1a9a19791847a6d615a5041382d22170500000000000000000000000000000008131e28313a45515c676f7c87929fa7b1bcc6d0dce6eae0d4cbbfb6aea8a6aaacb1b9c3ced9e5e0d7cbc0b5aba0958c7f72695f53463e32291e1308000000000000000000000000000000000000000008111b252e374048505960676d747c82878e92989a9e9fa4aba5a6a7a7a7a6a5aca49f9e9a98928e88837d756e68615a51443f382f261b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545f6a717e88939fa2aab1b9bdc3c5c9cecbcbcbcfc9c6c4bdb9b2aca49f938e81798693a0adb9c6c6c6c6c6c6c6c2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d19242e3740474b4d5353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534f4d48423930251b0f0400131f2c3946525f6c7985929facb8c5d2dfebf8f2e7ded6cec9c5c4c0c0c0c0c0c0c0c1c2c4c5c7cbd1d2d5dae1e5e6e0dad5cec5beb6afa59e938d80746d63594f43392f24180d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d12181c1f23292c2d303036393a3c3d3e3f3f3f3e3d3c3a393530302d2c28231f1c18120d080100000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c666d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c665b50443a2f24190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7d7dad6d2d1cfcac7c0bbb4aea79f9791857b6e685d52483e2f261b11060000000000000000000000000000050e19242f3a434f59606d79839199a3aeb9c2ced8e2ede2d8cec2b9aea49c999da0a7b1bcc8d4e0e8dcd1c7bdb1a79f92867b6e615a50443a3025190d04000000000000000000000000000000000000050f1a242d374049515a626b6f7a80878f939a9fa2aaaaacafb5b2b3b3b4b3b3b2b6afacaaaaa39f9b949089817a706c635b504941382d221710070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c666f7c86929aa4aeb4bcc3c8ced2d5d9d8d8d8dad5d2cfc9c3beb6afa59e938c7f8c99a5b2bfccd2d2d2d2d2cfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131e2a3540495257596060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605b59534b42372c20150900131f2c3946525f6c7985929facb8c5d2dfebf6ebe0d6ccc4bdb9b7b3b3b3b3b3b3b4b4b5b7b9bbc0c5c6c9cfd5dae0e8e5e0d7d0c7c0bbafa59d928c7f736b60554b40352921160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013181c1f2023252a2d2e2f303132323231302f2e2d292523201f1c1812100c070000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79786c60564c4135291c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcacfcac6c5c3beb9b5afaaa39f9590857c6f695f564c41362c1d140a0000000000000000000000000000020d17202935414c55606b74808d95a0abb5bfcbd4e0eae7dbd0c6bcb1a79c928c9195a0acb8c1ced8e2e3d9cfc3baaea2988f82766c62564c41362a1f160c0100000000000000000000000000000000020b17212c363f49515b636c717d848d92999fa4acaeb4b7b9bbc0bfc0c0c1c0c0bfc0bbb9b7b4aeaca69f9c938e857e736d605b53493f332722190d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55606d78839098a2acb6bfc6ced4d9dee1e5e4e7e3e0dfdbdad5d0c7c0bbafa59f9286929facb9c5d2dfdfdfdfdbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16232f3b47525b63666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53483d3125190c00131f2c3946525f6c7985929facb8c5d2dfebf1e5d9cec4bab2acaaa7a7a7a7a7a7a7a7a9aaacafb5b8b9bec5c9cfd6dee8e9e2d9d2ccc1b8aea49f93887d70675d51453d32271b0f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070c10131417191d202123242525252525242221201d19171313100c070400000000000000000000000000000000000000000000000000000000000000000000000000010e1a2734414d5a6774808686868686868686868686868686868686868074685d5245382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbebdbdbeb9b8b6b3adaba49f98928c837b6f6a5f574d443a30231a0b02000000000000000000000000000008131e29323a45515d67707d88939fa7b1bdc6d1dde6e9e0d6cabfb4aa9f958c8083919da5afbcc6d0dce7e1d6cabfb4aa9f948b7e71685e52463e31281d1207000000000000000000000000000000000a141d29333e48515b636d737e8691969fa3abafb6babfc4c6c7ccd2cccdcdcdccd2ccc8c6c4bfbab8b0aba59e9792887f746c655b50443f342b1f150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d67727f8b95a0aab4bec7d0d8e0e5ebedeae2dcd7d3d2cecac8c7d2ccc1bbafa3999299a3afbbc7d3e0edece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4b57636d73797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979756f65594d4134281b0e00131f2c3946525f6c7985929facb8c5d2dfebede1d5c9bdb2a8a09e9a9a9a9a9a9a9a9b9c9d9fa3ababadb3b9bdc4ccd7dde3ebe4ddd8cac0bbafa49a9184796d60584e43382c21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607080d1113141617181819181817161413110d0807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b869293939393939393939393939393939392867a6d60544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b1b0b3adaba9a9a29e99938f8680786e695f584e453c32281e11080000000000000000000000000000050f1925303a44505a606d7a84919aa4afb9c3cfd8e3ece1d7cec5baaea2989083787d89939eaab4bfcbd6e0e7dbd0c6bcb0a69e92857a6d61594f43392f24180c03000000000000000000000000000006111b262f3b45505a626d737f8b9298a1a9afb5bbc0c7cad0d2d4d7ddd9dadadad9ddd8d4d2d0cbc7c2bcb7afa9a29a938c81776c605b51463d31271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7985919ea7b1bcc6d0d9e2eaf2eee5e1d8d1cbc7c5c1bebcbbbbbdc0c0b5aba39fa3abb5c0cbd7e3eff5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868175685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebebded2c5b9aca096918d8d8d8d8d8d8d8e8f9192999a9ea1a9adb2bac0ccd2d9e2ebe8dcd8ccc0b6aca1968d80746a6054483d32271b100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707090a0b0c0c0c0b0a09070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e6975818e9ba6a0a0a0a0a0a0a0a0a0a0a0a0a2988c7f72665b5044382b1f150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a3a9a19e9c9997928d87827b736d665e564e463c332a20160c0000000000000000000000000000020b17212a36414c56616c74818e96a1acb6c0ccd5e1eae6dbd0c5bcb0a69f92867b6e75828f98a3aebac4cedae5e2d8cec2b9ada2978e81756b61554b4035291e150a00000000000000000000000000000b17222d38414d57616c727f8b919fa3aab2bbc0c7ccd2d6dbdfe0e2dfdedcdbdcdedfe1e0dfdcd6d3cdc7c1bbb3aca49f938d80736d62584e43392f24180c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d5765727e8b97a1adb9c3ced8e2ebf4ede4dcd4cfc6bfbab9b4b1afaeafb0b4b8b9b5afacafb5bdc7d1dce8f3f5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c939393939393939393939393939393939393939393939393939393939393939393939393939393939393938e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebeaddd1c4b7aa9e91848080808080808181828486898d92979ea1a8afbbc0c7d0d9e3eee8ddd2c7beb2a89f93877c6f62594f44382c1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57626f7c88949fabadadadadadadadadadadb4aa9e9184786c6053463c31261a0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79859298989898989898989898989898989898989898989898989898989797959792908c8985807b756e69605c544d443c342a21180e0400000000000000000000000000000a141d29333b46525e68707d8a939da8b2bec7d2dee7e9dfd6cabeb3aa9f948b7f72696e7b86929fa8b2bdc9d5e1eae0d6cabeb3a99e938a7d70675d51453d30261c1106000000000000000000000000030f1b27333f49535e69707e87939fa3aeb4bcc4cbd1d8dde4e3e1dad5d2d1cfcecfd1d2d5dae1e3e3e0d8d3cdc5beb6afa59d928c7f726a60554b4035291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697683909da9b3becbd5e0eaf4efe4dbd3cac2bdb4aeaca8a4a2a1a2a3a7abadb3bbb9bbc0c7cfd9e3eef9f5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c999f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82757474747474747476777a7d80858b91969da5afb5bdc7d2dde8eee4d9d0c4bbafa49a8f82766b6054483b30251a0e020000000000000000000000000000000000000000000000000000030606090b0d0d0e0e0d0c0a0807050100000000000000060606060606060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b47535f6a76828f9ca7b1bcb9b9b9b9b9b9b9b9b9aca0968a7d7064584e43372b1e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a8a898785837f7c79736e69615f57514b423b322a22180f06000000000000000000000000000006111b262f3b45505a616d7a85929ea5afbac4d0d9e4ece1d7cdc5baaea2988f82776c606973808c96a1acb9c2cfd9e3e6dbcfc5bbafa59e9184796d60584e42382e23170c03000000000000000000000005121f2b3744505b656e7b859299a4afbabfc6cfd7dce3e8ded8d3cfc9c6c5c3c2c3c4c6c9cfd3d7dee7e4dfd7d0c7c0bbaea49f92877c6f675d51453b3025190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87959fabbbc4cfdde7f2f1e7ddd3c9c1b8b0aba39f9b97959495979a9ea1a9aeb6becbd1d9e1eaf5fff5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756867676767676869676d7074797e848e929fa4abb5c0ccd7dee8ebe2d8ccc0b6ac9f94897c7063574d42362a1e1105000000000000000000000000000000000000000000000004060b0f12131518191a1b1b1a19171414110d080502060a0c0d1313131313131313131313131313131313080806020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b37434e5863707d8995a0abb8c4cec6c6c6c6c6c9bdb2a89c8f82766a5f53473a3024190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7d7c7a7876736f6d66615f57534d4540393029201810060000000000000000000000000000030c17222d38414d57626c75828f97a1adb7c1ccd6e2ebe6dacfc5bbb0a69f92857b6e655b606d7984919ea6b0bdc7d1dce8e1d7cdc1b9aca1968d80746a60544a3f34281f14090000000000000000000004101c2834404b54606c77828f97a2abb5c0cbd1d8e1e8e4ddd8ccc7c5beb9b8b6b5b6b8b9bec4c7ccd7dce2e9e2d9d2ccc0bbafa3999184796d60564d42362a1e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a7b1bccdd6e1eff5eadfd5cbc1b7afa69f99928e8b8988888a8d92979da4adb5bec9d2e0eaf4fef5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b5a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5a5a5a5a5b555d6063666d7179818b9399a4afbbc0ccd6e0ebe8ddd2c7beb0a69b8f8275695e52463a2d201408000000000000000000000000000000000000000000070c1013171c1f2022252627282727252321201e1914110e1216191920202020202020202020202020202020201514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4854606b7783909da8b2bdc9d5d3d3d3d9cec4b7ab9f94887c6f62564c4135291c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4a56626d7272727272727272727272727272727272727272727272727272727171706f6d68696663605c54534d46423b342e271e170e060000000000000000000000000000000b151e27333f49535e69717e8b939ea9b3bec9d2dee8e8ded5c9beb3a99e938b7e71695e535d67717e8a949fabb5c0cbd7e1e9dfd5c9bdb2a89f93877c6f665c50443c31261a0e0500000000000000000006131f2c3845515c66717e8b949fa9b3bdc7d2dce2eae2d9d2ccc2bbb7b3adaba9a8a9abadb3b7bbc1cbd1d8e1eae4ddd7cbc0b5aba0968d8073695e52463a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a546875818e9ba8b4c1cddbe8f2f0e4d9cdc3b9afa59e948f86817e7c7b7c7d80858d929ba3adb7c1ced8e2edf8f5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfc6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c1b5a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4d4d4e4e4b5153545c60676d747f87939fa4aebac4cedae5eee4d9d0c2b9ac9f93877b6e6154473b3025190d01000000000000000000000000000000000000070c12181c1f22282b2d2f31333434343332302e2d2a25201e191e2325262d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d22211e1a150e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f5964717e8a96a0acb9c5cfdae6e0e0d3c7bbb0a69a8e8174685d5245382e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b6265656565656565656565656565656565656565656565656565656565646462615d56595653504a46423b363128231d150c0500000000000000000000000000000007121c27303944505b656e7b85929fa5afbbc5cfdbe4ebe2d6ccc4b9ada1978f82756c62574d55616c76828f99a3afbbc5cfdae6e5dacec4bbafa4999083786d60574d42372b20170d0200000000000000030f1b27333f4953606d7984919ea6b0bcc5d0d9e3ede4d9d0c7c0bbb0aba9a19e9c9b9c9ea1a9aab0babfc6cfd8e2ebe8dcd1c7bdb2a89f92867b6e61564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c667784919daab7c4d0ddeaf7ede0d4c8bcb1a79e938e827b75716f6e6f70747a808b919ba5afbcc6d0dce7f3f5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cec1b5a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f424141414045474b51555d606d727e8b929da8b2bdc9d5e0ebebe0d4c7bbafa4998c7f7265564c41362a1d110500000000000000000000000000000000030b12181d23282c2d3338393c3e40404141403f3d3b3936302d2a252a2f323339393939393939393939393939393939392f2e2b2620180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d4653606d7884919ea9b3becad6e2ede3d8ccc2b8ac9f92867a6d60544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e29343f4951565859595959595959595959595959595959595959595959595959595857575654524c4c4946443f3836312a261f18120b03000000000000000000000000000000030d18232e39424e58606c77828f98a2aeb8c1cdd6e1eee4d9d0c4baafa59e92857a6e615a5045505a626f7c87929fa9b3bec9d5dfeae0d7ccc0b5aba0958c7f72695f53463f32291e13080000000000000005121f2b3744505b65717e8b96a1acb8c2ced7e2ebe8ddd2c7beb6afa69f9c9792908f9091979c9ea6aeb4bdc6d0d9e3eee3d9cfc3baaea3988d8074685e5246392d20130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facb9c5d2dfecf8eaded1c4b8aca0958e81786e696462616264676d747f8b939daab4bfcbd6e3eff5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9dfdfdfdfdfdfdfdfdfe3dfdcdbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cec1b5a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235342f35393a40454b515b626c74808d96a1acb9c4cfdae6f0e3d7ccc0b5ab9d908376685e5246392d201307000000000000000000000000000000070c151d23282e34383a3f4446484b4c4d4e4e4d4c4a4746413b393630353b3e4046464646464646464646464646464646463b3a37312a21180e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2b3844505c66727f8b97a1adb9c6d0dbe7e9e0d3c6baaea2988c7f72665c5044382b1f150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b4a49474641403c3a38342e2a261f1a140c0700000000000000000000000000000000010b151f2834404a545f6a727f8c949faab3becad3dfe8e8ddd2c7beb2a89e938a7e70685e52483e47535f6a74808d97a1adb9c3cdd9e4e8ddd2c7bdb1a79f92867b6e615a50443a3025190d040000000000000613202d394653606c7884919ea8b2bdcad4e0e9f0e4d8ccc0b6aca49f948f898583828385898f949fa3abb4bdc7d2dde8ebe1d7cbbfb4aa9f92867a6d6154473a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8799a3afbbc7d3e0edede1d4c8bdb1a89d9083796d665f57565555555d606d74818e98a3aebac7d3e0ecf5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e6ecececececeee5ddd7d2cfcecacacacacacacacacacacacacacacacacacacacac1b5a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f42352924292c2e343a4045515a606d7984919ea9b2bdc9d5e1eee8ddd2c6b9ac9f93867a6d6154473a2e21140700000000000000000000000000030b12181e272e34394045464a50535558595a5b5a5a585654524c4746413b40464b4c53535353535353535353535353535353534847423c332a2015090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606d7985929eaab4bfcad6e3eee2d6cabfb4aa9e9184786d6053463c31261b0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3e3d3c3a393530302d2b28231c1a140e0903000000000000000000000000000000000007121d27313944515c666e7c86929fa6b0bcc5d0d8d8d8d8d8ccc0b6aca1968e81756c61564c4137434e58606d7a85929ea7b1bcc8d4d8d8d8d9d0c3baaea3988f82766c62564c41362a1f160c0100000000000916232f3c4956626f7c8996a0acbac4cedce5f2e7ddd4c8bbafa49a938b827c79767576797c828a9299a3abb5c0ccd7e1ece7dcd1c6baaea3988b7e7265564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995abb5c0cbd7e3efebded1c5b8aca095897d70675c544d4948494c515b616d7a86929facb8c5d2dfebf5e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e6f2fff9faefe5dcd3ccc6c3c2bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb5a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f423529181d1f23282f353f45515d67717e8a96a1adb9c5d2dfebede0d4c7bbafa4998a7d7164574a3e31241707000000000000000000000000040c151c2328303940454b5153545b60626466676767666563615e5654524d4649515759606060606060606060606060606060606055534e453c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3845515d6773808c98a2aebac7d1dce8e7dbd0c6b9aca1968a7d7064584e43372b1e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e313232323232323232323232323232323232323232323232323232323231312f2e2d292423201f1c17110e0903000000000000000000000000000000000000000c18242f39434e58606d78839098a3aeb8c2cecbcbcbcbcbcfc7bbafa49a91847a6d605a50443b313c45525d68727e8b95a0abb8c1cecbcbcbcbcbcbbfb4aa9f948b7e71685e52463e31281d13070000000005111e2a36424d566773808d9aa8b2bdccd6e0eeeadfd3c7bbb0a69f93887f766f6c6668656c6f757e879299a4afbbc5d0dbe6ede2d6cbbfb4aa9c8f8276685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afbcd1dce8f3eaddd0c4b7aa9d9184776b60554b423c3b3c4146525e6874818e9ba7b4c1cedae7f4e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e8f4fdfff4e8ddd3cac1bbb6b5b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a89b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1013181d242935404b55606d7984919eabb8c4d2dde8f0e3d7ccc0b5ab9a8d8073675a4d402e23180c0000000000000000000000040d161e272e343e434b51545c6064666c6f71737374747372706e6866615e5652515b63666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5f574e42372b1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935404b55616d7a86929fabb5c0cbd7e3ede2d5c9bdb2a89c8f82766a5f53473a3025190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e22242526262626262626262626262626262626262626262626262626262524242321201d19161312100b0600000000000000000000000000000000000000000004101d2935404b55606a73808c95a0aab4bfbfbfbfbfbfbfbfbfbdb2a89f93887d70685d52483e322935414c56606c7883909da5afbcbfbfbfbfbfbfbfbfbcb0a69e92857a6d61594f433a2f24180d000000000714202d3a46525e697784919eaab7c4cedde8f0e4d9cec3b7aa9f948b7f726d63605b545b60626c717d87939fa9b3becad6e2eee7dcd0c5b9ac9f92867a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0bdc9d6e3f9e6dacdc0b3a79a8d807467594f4339302e2f36414c5664717e8b97a4b1becad7e4f1e8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfcdd6e2ebf5ffefe3d7ccc1b8afaaa8a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39b8e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f070c1318242f3944515c6674808d9aacb6c0ccd8e4f0e8ddd2c2b6a99c8f827669544b4034281c1004000000000000000000040d161f28303940444f555c60666d7075797b7e7f808181807f7d7a77736e68615e56636d737979797979797979797979797979797979766a5f53473a2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3946525e6874818d99a3afbbc7d4e0e9e5dacec4b7ab9f94887c6f62564c4135291c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d121618191919191919191919191919191919191919191919191919191919181817161413110d08070603000000000000000000000000000000000000000000000006131f2c3945515d676f7c87929fa7b1b2b2b2b2b2b2b2b2b2b2b5aba0968d80746b60564c41362c24303a44505b666f7c89939eaab4b2b2b2b2b2b2b2b2b2b2ada2978e81756b61554b4035291d12070000000814212e3b4754616e7a8796a0acb9c5d2deebede0d4c8bcb1a79c8f82766d625b53504a50535a616b73808d97a2adbac6d3dfecede0d4c7bbafa3998a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e4d7cabeb1a4978b7e7164584b3e30272225303c4855626f7b8895a2aebbc8d5e1eee8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b0bbc4d0d9e3eef9ebdfd2c6bbafa59e9b9797979797979797979797979797979797979797979797978e8275685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f000107121d2834404a5463707d899aa4afbbc8d4e0edeaded1c4b7ab9e918478665c5145382c1f13060000000000000000020c161f28313a424a515961676d72797d8285888b8c8d8e8d8d8b8987837f7b746d686166737f86868686868686868686868686868686867b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2a36414c56616e7b87929facb9c2ccd8e3ebe0d3c7bbb0a69a8e8174685e5246382e23170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0b0a090707050100000000000000000000000000000000000000000000000000000714202c38444f59606d79849199a3a5a5a5a5a5a5a5a5a5a5a5a5a5a3999184796d60594f443a2f241e28333f4a54606b75818e98a2a5a5a5a5a5a5a5a5a5a5a5a5a99e938a7d70675d5145392e23180c0000000a1723303d4a5663707d8996a8b2bdc9d5e1edeaded1c5b8aca095897c6f625b5146443f44465059606d7985929fabb8c5d2deebefe3d7cbc0b5ab998c7f7366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3f0e3d6c9bdb0a3968a7d7063574a3d302415212e3b4754616e7a8794a1adbac7d4e0ede8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b949ea9b2bdc7d2dde8f2e9dccfc3b6aa9e938f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8175685b4f4235281c0f00131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200010c18232e3a4754606d7a86939facb9c6d2dfececdfd2c6b9ac9f9386796d6053463a2d20130700000000000000000a141e28313a434b545c606c70797f858a8f929897999a9a9a99989695908c86817a716c66737f8c939393939393939393939393939393887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a46535f6975818e9ba6b0bbc7d3dfeae4d8cdc2b8ac9f92867a6d61544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4854606b74808d969898989898989898989898989898989892877c6f675d51473d32281e17222d38424f59616e7b8692989898989898989898989898989898989184796d60544b4034281c100400000c1926333f4c5966727f8c99a5b2bfced9e5f1eaddd0c3b7aa9d9084776a6054493f3833373e45515d6774808d9aa7b3c0d0dbe7f2e8dcd1c2b5a89b8f8275685c4f4235291c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4956626c75828f96a1abb5c0ccd7dfe9e8dbcec2b5a89b8f827e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c6f6256493c2f23160900131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000713202c3945515d677884919eabb7c4d1deeaede0d4c8bbafa49a877b6e6154483b2e2115080000000000000006111c26303a434b555d666d747d848c92979b9fa2aaa6a6a7a7a6a5a7a09d99928e857e736c737f8c999f9f9f9f9f9f9f9f9f9f9f9f9f95887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2a36424d57626f7c88949fabb7c3cdd9e4e9e0d3c7baaea2988c7f72665c5044382b1f150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c80736a60554b40352b2016111c262f3d46525e69727f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8074665c5145382c1f130600000e1b2835414e5b6874818e9ba7b4c1cedae7f6e6dacdc0b3a79a8d807467584e43372b282b35404b5563707d8a96aab4becad6e2eeeaddd0c4b7aa9d9184776a5e51442e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212d3945505a616d7a849199a4afbbc2cdd7e1ecdfd2c5b9ac9f92867c7070707070707070707070707070707070707070707070706f6a6054473b2e22150800131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000004111d2935414c55697683909ca9b6c3cfdce9f0e4d8ccc0b6ac95887c6f6255493c2f221609000000000000030c17232e38424b555d676d78808a91969ea1a9acaeb4b2b3b4b4b3b2b1acaba39f97928a8078737f8c99a6acacacacacacacacacacaca195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b47545f6a76828f9ca7b1bcc8d4e0ebe2d6cabfb4aa9e9184786d6053463c32261b0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f786d60584e43392f231a0d0a141d2a36424d56606d787f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6053463a2d20130700000f1c2935424f5c6875828f9ba8b5c2cedbe8f1e4d7cabeb1a4978b7e7164584b3e32251c242f3a4754616d7a8798a2aebac6d3dfecebded1c5b8ab9e9285786b554b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d29343e46525e68707d87939fa7b1bbc5d0dbe6e0d3c7baaea3999184796d646464646464646464646464646464646464646464646260584e43372b1f130600131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000010d19242f424f5c6875828f9ba8b5c2cedbe8f4e8ddd2bcafa296897c6f6356493c302316090000000000000a151e28343f4a545d676d79828d929ea1a8adb3b8babfbfc0c1c0c0bebcb8b4aea9a29f928d80747f8c99a6b2b9b9b9b9b9b9b9b9b9aea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b37434e5863707d8995a0acb8c4cedae5e7dbd0c6b9ada1968a7d7164584e43372b1e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4955616c7172727272727272727272727272727272727272726d665c51463d31271d1108020b1925303b45515c666d72727272727272727272727272727272727272726d665c5145382c1f13060000101d293643505c6976838f9ca9b6c2cfdce9efe2d6c9bcafa396897c706356493d302316202d3946525d687885929fabb8c5d2deebecdfd2c5b9ac9f928679675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222a36414c56606b73808d959fa9b3becad6dee3d7cbbfb4aba0968e81756c62585757575757575757575757575757575757575756544e463d32271b0f0300131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000081b2835424e5b6875818e9ba8b4c1cedbe7f9e2d6c9bcafa396897c706356493d3023160a000000000006111c26303844505c666d798290949da4acb2b9bec5c6cad0cdcdcdcccdc8c6bfbab3ada49d928c7f7f8c99a6b2bfc6c6c6c6c6c6c6bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4855606b7783909da8b2bdc9d5e1ece2d5c9bdb2a89c9083766a5f53473a3025190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646565656565656565656565656565656565656565605c544b40342b1f150b000009141f2834404b545c606565656565656565656565656565656565656565605c544b4034281c10040000111d2a3744505d6a7783909daab6c3d0dde9eee2d5c8bbafa295887c6f6255493c2f22161d2935414c566b7884919eabb7c4d1deeaece0d3c7baaea39986796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d1925303a444f59606d78839097a2adbac0ccd5e0dcd1c6bdb2a89e938b7e716a5f554b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4947433d342b20150a0000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000020f1c2835424f5b6875828e9ba8b5c1cedbe8efe2d5c8bcafa295897d6f6256493c2f23160900000000000c17232e38424f59606d78828f949fa6aeb9bdc4c9cfd3d6dbd9dadad9d9d4d1cbc5bebaaea49f9287818e9ba8b5c1ced2d2d2d2d2c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f5964717e8a96a1acb9c5cfdbe6e5dacfc4b7ab9f94887c6f62564c41362a1c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d28343e48505557595959595959595959595959595959595959595953514b42392e22190d030000020c18232e39424b5153595959595959595959595959595959595959595953514b42392e23180c000000111e2a3744515d6a7784909daab7c3d0ddeaeee1d5c8bbaea295887b6f6255483c2f22151b27333f49536a7784919daab7c4d0ddeaede0d4c8bbafa49a877a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323d44505c666e7b85929fa5afb9c3ced8e2d8cfc3baafa59f92867c6e675d51453e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b37322b22190f040000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000030f1c2936424f5c6975828f9ca8b5c2cfdbe8eee1d4c8bbaea195887c6e6255483b2f2215080000000003101c28343f4a54606b73808c949fa6b0b8c0c9ced5dadfe2e7e6e7e7e2dfdedcd7cfcac0baaea399928e939eaab6c3cfdcdfdfdfd4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d4653606d7984919ea9b3becad6e2ebe0d3c7bbb0a69b8e8174685e5246382e23170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222c363e45494b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4645403930271d10070000000007121d2730394045464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4645403930271d1207000000101d2a3743505d6a7683909da9b6c3d0dce9efe2d5c9bcafa296897c6f6356493c3023161f2b3744505b657885919eabb8c4d1deebecdfd2c6b9ac9f9386796c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c162028343f4a545e69717e8a939da7b1bcc6d0dce1d5ccc1baaea2989083796d605a50453b30313131313131313131313131312f2e2b2720191007000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000005121e2a36424d576a7783909daab6c3d0dde9efe2d6cabfb4aa94877b6e6154483b2e2115080000000006121f2c3844505c66707d87939fa6b0b8c2cad5dae0e6eceee8e3e0dbd6d3d2d0d0d1d2cbbfb4aba39f9b9ea5afbac6d2deebece1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2c3844505c66727f8b97a2adb9c6d0dce7e4d8cdc2b8ac9f92867a6d61544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a242c34393d3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a38342e271e150b0000000000000b151e272e34383a3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a38342e271e150b00000000101c2936434f5c6976828f9ca9b5c2cfdce8f0e3d6c9bdb0a3968a7d7063574a3d302519202d394653606c7986929facb9c5d2dfecebdfd2c5b8ac9f928579665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e17232e38424d57616c74818e95a0aab4bfcbd6deded6cabfb4aaa0958e81746c61574d42392e23242424242424242424242423221f1b150f0700000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000714212d3a46535f697885929fabb8c5d2deebece0d3c6baaea29887796d6054473a2d21140700000004101d2935404b55606d78849199a4afb8c2cbd4dce5ebf3ebe3dcd7d4d0cac6c5c4c3c4c5c7c6bdb4aeaca8aaafb7c1ccd7e3eeeee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606d7985929eaab4bfcbd6e3e9e0d3c7baaea3988c7f72665c5044382c1f150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a22282d303132323232323232323232323232323232323232322d2c28231d150c03000000000000030c151d23282c2d32323232323232323232323232323232323232322d2c28231d150c03000000000f1c2835424f5b6875828e9ba8b5c1cedbe8f8e5d8ccbfb2a5998c7f7266564c41362a2327313b4855626e7b8899a3aebac7d3e0ecebded1c4b8ab9e9185786b5e4a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303b45505a606d79839198a3aebac1ccd6e2dbd0c6bcb1a79d928a7e71695f544a40342820171717171717171717171615130f0a040000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200030d15222e3b4855616e7b8897a2adbac6d3dfecebdfd2c5b8ac9f9285786c605346392d2013060000000613202c3945515d67727f8b96a0abb5c0cad4dde6eff0e7e1d9d1cbc7c5bebab8b7b6b7b9bbbfc6bfbab9b5b6bac1c9d3dde8f3eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3845515d6773808c98a3aebac7d3e0ece3d6cbbfb4aa9e9184796d6053463c32271b0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171d2123242626262626262626262626262626262626262626201f1c18120b030000000000000000030b12181c1f202626262626262626262626262626262626262626201f1c18120b0300000000000d1a2734404d5a6773808d9aa6b3c0d0dce7f3e8dbcfc2b5a89c8f8275685e52463c332f3139434e5865717e8b98abb4bfcbd7e3efe9dcd0c3b6a99d9083766a5d50432d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e29333e45515d676f7c86929fa5afbac4d0d9e2d8cec3b9afa59f92857b6e665c51443e33291e140a0a0a0a0a0a0a0a0908060300000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f00040c151f2a36424d5664717e8b97a9b3becad6e2eee9dcd0c3b6a99d908376655b5044372b1f12050000000714202d3a4753606d7985929ea8b2bdc7d2dce6efefe7ded5cfc7c0bbb9b4aeabaaa9abacaeb5b8bcc2c5c1c3c6ccd3dbe5effaeee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935404b55616d7a86929facb8c5d2dfebe7dcd0c6b9ada1968a7e7164584e43372b1e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c1114171819191919191919191919191919191919191919191313100c07000000000000000000000000070c10131319191919191919191919191919191919191919191313100c07000000000000000b1825313e4b5864717e8b97aab4bfcbd6e3efecdfd2c5b9ac9f92867a6d61584e453e3c3d434b55606a76838f9ca9b6c2d1dce7f3e7dacdc1b4a79a8e8174675b4e4134281b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17212935404b555f6a727f8b939ea8b2bdc7d2dde0d5cbc0baaea2989083786d60594f453b30261c11060000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0b0d161e27313946525e6975828f9ba8b5c2d0dbe6f2e7dacdc1b4a79a8e81746753493f33271b0f03000006131f2b37434e5865717e8b97a1adbac3d0d9e3eef2e7ddd5ccc3bdb5afacaaa29f9d9d9e9fa3ababb1bbbfc6cfd2d7dde5edf7fbeee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18242f3a4653606d7985919eabb8c4d1deebede2d5c9bdb2a89c9083766a6054473a3025190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c070604000000000000000000000000000000000406070c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0706040000000000000000000915222f3c4855626f7c8898a3aebac7d3e0ecece0d3c7baaea3988c7f736a5f57504a494a4e555d676f7c88949fabb7c4d0e2edeee1d5c9beb3a9988b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f18242f39434e58626d75828f96a1abb5c0ccd7dfddd6cabeb3aa9f958d80736b61574d42382e23170e0500000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c13151b1f283039434e57616e7b86929facb9c5d2dfeceee2d6cabeb3a9988b7f7265584c3f2d22170b0000000815212e3b47535f6a7783909da9b3beccd5e2ebf3e9e0d5cbc3bab2aba39f9a989291909192999d9fa7aeb5bdc6cfd8e2edf8fffbeee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864717d8a96a1adb9c5d2dfebf1e5dacfc4b7ab9f94887c6f62564c41362a1c12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facb8c5d1dce7efe3d7cbbfb4aa9f92867c6f69615a5756565860676d7983919da6b0bbc7d3dff4ecdfd2c6b9ada197897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313c46515b616d7a849199a4afbbc2cdd7e1dbd0c5bcb1a79f93887d70695e544a3f342820170b02000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291f2022272c313a424b555f6a73808d99a3aebbc7d3e0edecdfd2c6b9ada197897c6f6356493c302316060000000916222f3c4955626f7c88959fabbbc5cfdee7f4ece2d7cec3b9b1a8a099928e8985848384868a90959fa3abb4bdc6d1dce7f3fbfbeee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7683909ca8b2bdc9d5e1eef6ebe0d3c7bcb0a69b8e8174685e5246392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313131313131313130f0e0c0904000000000000000003080b0d0e13131313131313131313131313131313130707040100000000000000000000000000000000000000000000000000000000000000040607121313131313131313131313131313131313131313130a0a0804000000000000000000000000000000000000000000000000000000000006131f2c3845515c6675828f9babb4bfcbd7e3ede7dcd1c6baaea39891847b716c66636263656a6f79828f95a0acb8c2cdd8e4f4ebded1c5b8ab9e9285796c605346392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a343f46525d68707d87939fa6b0bbc5cfdbe1d7cec3bbafa49a92857b6e665c50443d32291d140a000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235282c2d2e32383d434c545c676e7b86929fabb5bfcbd7e3efebded1c5b8ab9e9285796d6053463a2d201307000004101d2935404b5566737f8c99a7b1bccdd7e1f0f2e7dbd0c5bcb1a7a0969187817c797776787a7e838b9299a3abb4bfcbd7dfeaf5ffeee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56626f7c88949fabbac4cfdae5f1fdf0e4d8cdc2b9ac9f92867a6d61544a4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020201c1b19151009020000000001080e14171a1b20202020202020202020202020202020201413110d0801000000000000000000000000000000000000000000000000000001070c1013141f202020202020202020202020202020202020202020171614100b0500000000000000000000000000000000000000000000000000000004101c2834404b5464717e8b99a3aebac6d1dce7ede2d7cbbfb4aaa09691857e7773706f7072767c838f949ea7b1bccad4dee9ebe2d4c8bcb1a79a8d8174665b5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18222935414c56606b73808c949fa9b3becad6dde0d8ccc0b6aca1979082786d60594f443a2f261b11060000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f422e34383a3b3d44484f555d666d79839099a3aebdc6d1dce7eee2d6cabeb3a99b8e8174665c5044382c1f120600000613202c3945515d677683909ca9b6c3cddce9f3eee2d6cabeb4aaa09590847c746f6c666a676d71787e879299a3aebac2cdd8e4f0ffeee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e6874818e9aa6b0bbccd6e0ebf6fff5e9e0d3c7baaea3988c7f73665c5144382c1f150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c030000020b131a1f2426272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d19130c04000000000000000000000000000000000000000000000000030b12181d1f202c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423201c1710080000000000000000000000000000000000000000000000000000000c18232e3a4754606d7a86929fabb5bfcbd7e1ece7dcd1c6bcb2a8a097928a837f7d7c7d7e828790959ea6b0b9c3cedce6eee4d9d0c7b8aca095897d7063544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101924303a444f59606d78829097a2adbac0cbd5e0ddd2c7beb3a99f948c80736b60564c41382d22170d0400000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f44443f4446484a4f545960676d78818f95a0abb4bfcfd8e3edecdfd3c6baada2978a7d7064544a3f34281c100300000714202d3a4753606d7a86929facb9c5d2dfecf8ecdfd3c6baaea29890837a6f6a63605b555d60656c717d87929fa7b1bcc8d4e2edf8eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616d7a86929facb8c2cddfe8f2fdfffbefe3d7cbbfb4aa9e9184796d6053463d32271b0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393534312c261e150c02010b141d242b3033343939393939393939393939393939393939392c29241e160d0400000000000000000000000000000000000000000000030d151d24292c2d3939393939393939393939393939393939393939393931302d28221a110800000000000000000000000000000000000000000000000000000713202c3945525d6874818e99a3aebbc5cfdae6ede2d8cfc4bab2a9a19e95908c8a89898b8f9399a0a7b0b8c1cbd5dfeee8ddd2c7beb1a79d9083786c605346392d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323d44505c666e7b85929fa4aeb9c3ced8e2d9d0c5bbb0a69f93877d70685e53493f33271f160c01000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c5151514a505355575960636b707a828f939ea7b1bdc6d1e1eaefe2d6cabfb4aa9f9285796d6053473a2e23170c0000000916232f3c4956626f7c8999a3aebac7d3e0eceee2d6cabeb4aa9f92867b6e685f5853504c51535b606b727f8b959fabb8c6d1dce7f3eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66727f8c98a3aebac7d3e0ecfafffffff3e7dcd1c6b9ada1978a7e7164584e43372b1e1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464642413d3730271e140908131d262f363c3f4146464646464646464646464646464646464639352f2820160c010000000000000000000000000000000000000000010b151f272f35383a454646464646464646464646464646464646464646463d3c39332c231a10050000000000000000000000000000000000000000000000000004111d2935414c56616e7b86929fa9b3bec9d5dce6eae1d6ccc4bbb3ada7a09d99969596989c9fa4abb1b9c1cad3dde7e8dfd8ccc0b6aca0958a7e71655b5044372b1c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c162028343f4a545e69707e8a929da7b1bcc6d0dbe2d7cdc2bbafa49991857a6d655b50443d31281e1308000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685e5e5e5e545c606164676b6f757d848f949ea6b0b9c3cfd8e2f1e5dcd3c6baaea2988c8073675c5145382c1c11060000000b1825313e4b5864717e8b97abb4bfcbd7e3efecdfd3c6baaea2988c7f72695f564e46444145495059626d7683909daab4bfcbd7e3efeee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919eaab4bfcbd6e3effbfffffff8ede2d5c9beb2a99d9083766a6054473b3025190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353534f4d49423930261b100e1a242f3841474c4e53535353535353535353535353535353535345413a32281e1308000000000000000000000000000000000000000007121d273139404547525353535353535353535353535353535353535353534a49443e362c22170b00000000000000000000000000000000000000000000000000010d19242f3a46535e6974818e97a1adb9c1cad4dde6e8ded6cdc5beb9b1acaaa6a3a2a3a5a9acafb5bdc3cbd3dce5e8dfd6ccc4bbafa49a9183786c6053493f33271b0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3efe2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0ece8dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2dfe5e5dbcec2b5a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e17232e38424d57616c74818d95a0aab4bfcad6dedfd7ccc0b5aba1978f82776c60584e433a2f241910060000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f82756a6a6a6a6a6b666d6e7074777c828991969ea6b0b8c1cbd5e1eae9dfd6cabeb3a99f92867a6d61554b4034291c0a000000000d1a2733404d5a6673808d99a6b3c0d1dce7f3ebded2c5b8ab9f92857a6d60574d443c3835383f44515b64717d8a98a3aebac7d3e0eceee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864717d8a96a1acbcc6d0dce7f3fffffffffff1e6dacfc4b8ab9f95897c6f62564c41362a1d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060605c59544b42372c2115141f2b36414a52585a60606060606060606060606060606060605f524c443a2f24190d01000000000000000000000000000000000000000c18242f39434b51535f606060606060606060606060606060606060606060575550483e33281c10010000000000000000000000000000000000000000000000000008131e2a36424d57616e7a85929ea5afb8c2cbd4dce6e8dfd6cfc9c3bcb8b7b2b0afb0b1b5b9bbc0c7d0d5dde5e7ded6cdc4bab1a79f93887d70665b5041382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6e3e5e2d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3e0e5e5dbcfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5d2d9d9d9d9cec2b5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303b45505a606d79839098a2aebac1ccd6e1ddd2c7bdb2a99e948c7f726a60564c41352922180d0400000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f827777777777777878797b7d8084898f949ea0a8b0b8c1cad3dde7eae0d7cdc5baada2978d8074685e5243392f23180c000000000f1c2835424f5b6875828e9ba8b5c1cedbe8f8e8dbcec1b5a89b8e8275685d52453c322b292d333f4653606d7986929facb9c5d2dfeceee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3b47535f6a7683909ca8b2bdced8e2edf8fffffffffff7ebe0d4c7bcb1a79b8e8175685e5246392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d54493d3125191724303c47525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d564c4135291d110400000000000000000000000000000000000004101d2935404b555d606c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5044392d1d120700000000000000000000000000000000000000000000000000010e1a25313b46525e68707e8a939ea6b0b9c2cad5dae1e8e1dad5cdc8c4c3bfbdbcbcbec2c6c7ccd2d9e2e6e3dcd7ccc4bbb2a8a0958d80746b60544a3f2f261b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcad6d9d9d9d5c9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6d3d9d9d9d9cfc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8c5ccccccccccccc2b5a89b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e29333e45515d676f7c86929fa5afbac4cfd9e3d9d0c4bbb0a69f92877c6f685d52453f342a1f160c01000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebdfd2c5b8ac9f9286848484848484848586888a8d91969c9ea6acb2bac2cad3dce5ebe2d8cec5bbb0a69f92857b6e61564c4131271d120700000000101c2936434f5c6976828f9ca9b5c2cfdce8f1e5d8cbbeb2a5988b7f7265564c41332a201b222c3845515c677683909ca9b6c3cfdce9eee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935414c56626f7c88949fabbac4cee0eaf4fefcfaf9fafcfdf0e4d8cdc2b9ac9f92867a6e61544b4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3844515d69747979797979797979797979797979797979756f65594d4134281b1a26333f4c58646e74797979797979797979797979797979797976685d5245392c20130700000000000000000000000000000000000006131f2c3845515d676d78797979797979797979797979797979797979797979706c615549392f24180d010000000000000000000000000000000000000000000000000009141f2a36414c56616c74818e949fa7b0b8c0c9cfd8dde4e6dfd9d4d1d0ccc9c8c9cbcfd2d4d7dde3e4e0d8d1cbc2bab2a9a1969083796d60594f42382d1d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdcaccccccccccc9bcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9c6ccccccccccccc2b5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfb5a89b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c17212935404b555f6a727f8b939ea8b2bdc7d1dce2d6cdc2bbaea39991847a6d605b51463c31281d1207000000000000000000131f2c3946525f6c7985929facb8c5d2dfebecdfd3c6baaea2989291919191919191929399979a9ea0a8aab0b9bdc4ccd3dce5e9e2d9d0c6bcb3a99f948b7e71685e52443a301f150b0100000000101d2a3643505d697683909ca9b6c3cfdce9efe3d6c9bcb0a396897d7063564a3d2f2318111c2834404b556774818e9aa7b4c1cddae7eee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3946525e6874818e9aa6b0bbccd6e0f2f9f4f0edecedf0f4f5e9e0d3c7baaea3998c8073665c5145382c1f160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986868686868686868686868686868686868175685c4f4235291c1b2734414e5a67748086868686868686868686868686868686867a6d6054473a2d2114070000000000000000000000000000000000000714202d3a4753606d79868686868686868686868686868686868686868686867e7064554b4035291d100400000000000000000000000000000000000000000000000000030d1925303b44505a606d79828f959fa6afb9bec5ccd2d6dce0e3e0deddd9d6d5d6d8dcdfe0e3e4ddd8d4cfc6bfbbb1a8a19791847b6e675c51473d2f261c0b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0bdbfbfbfbfbfbfbfbcafa296897c6f6356493c302316202d3a4753606d7a8693a0adb9bfbfbfbfbfbfbfbfb5a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2a89b8f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f18242f39434e58626d75818f96a1abb5c0cbd7dfdfd7cbbfb5aba1968e81756d62584e43392f24180f060000000000000000131f2c3946525f6c7985929facb8c5d2dfebeee2d6cabfb4aaa29f9d9d9d9d9d9d9e9e9fa4aba7aaacb2b7bbc1c9ced6dee5e8e0d7d0c7bdb4aaa2978f82766c62564d4132281e0d030000000000111d2a3744505d6a7783909daab6c3d0dde9efe2d5c8bcafa295897c6f6256493c2f23160c18232e404d5a6773808d9aa6b3c0cdd9e6eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616d7a86929facb8c2cddfe8f2eee8e4e0dfe0e4e8eeefe3d7cbbfb4ab9e9185796d6053463d32271b0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79859293939393939393939393939393938f8275685c4f4235291c1b2734414e5a6774818d939393939393939393939393939393877a6d6054473a2d211407000000000000000000000000000000000004111d2935414b5564717d8a98939393939393939393939393939393939393938e8175675d5145392c201308000000000000000000000000000000000000000000000000000008141e29323e45515c676d798390949da5adb3bbc0c7cbd0d3d7dcdddfdfe2e7e3e0dfdedcd9d4d2ccc8c2bdb5aea79f9691857c6f695e554b40352b1d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0b2b2b2b2b2b2b2b2b2afa296897c6f6356493c302316202d3a4753606d7a8693a0adb2b2b2b2b2b2b2b2b2b2a89c8f8275695c4f4236291c0f000006131f2c3946525f6c7985929fa6a6a6a6a6a6a6a6a6a6a6a69b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313c46515b606d7a849199a3afbbc2cdd7e1dcd1c6bdb2a89e938b7f726a5f554b40352921180c0300000000000000131f2c3946525f6c7985929facb8c5d2dfebf2e7dbd0c5bcb4aeacaaaaaaaaaaaaababacafb5b3b7b9bdc3c7ccd5d9e0e8e5ded6cec6beb5aba39892857b6e615a50443b3020160c000000000000111e2a3744515d6a7784909daab7c3d0ddeaeee1d5c8bbaea295887b6f6255483c2f2215071a2633404d596673808c99a6b3bfccd9e6eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66727f8c98a2aebac7d3e0ecebe4ddd8d4d2d4d8dde4ebe7dcd1c6b9ada1978a7e7164584e43382b1f1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9b8f8275685c4f4235291c1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f9f93877a6d6054473a2d21140700000000000000000000000000000000000613202c3945515d6775828f9baa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f92867a6d6053473a2f24190d0100000000000000000000000000000000000000000000000000020d17202834404b555d676d7a828e939ea1a9afb6babfc5c7cbd1d0d2d3d6dbd7d3d2d1cfcec8c7c0bbb9b0aba39f9590847c6f6a5f574d43392f23190b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3a6a6a6a6a6a6a6a6a6a6a6a296897c6f6356493c302316202d3a4753606d7a8693a0a6a6a6a6a6a6a6a6a6a6a6a69c8f8275695c4f4236291c0f000006131f2c3946525f6c79859299999999999999999999999999998f8275685c4f4235291c0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a343f45525d686f7d87929fa6b0bbc5cfdbe3d8cfc4baafa59f92867c6f675d51453e332a1e150b00000000000000131f2c3946525f6c7985929facb8c5d2dfebf8ece2d7cec5bfbab8b7b7b7b7b7b7b7b8b9bbc0c0c4c5c8ced3d7dee5e6e0d9d5ccc4bcb4aca49992867d6f695e52483f32291f0e05000000000000101d2a3743505d6a7683909da9b6c3d0dce9efe2d5c9bcafa296897c6f6356493c3023160c152734414d5a6774808d9aa7b3c0cddae6eee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919eaab4bfcad6e2ebe2d9d2ccc8c6c8ccd2d9e2e9e2d5c9beb3a99d9083766a6054473b3025190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facacacacacacacacacacaca89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7acacacacacacacacacacaca093877a6d6054473a2d21140700000000000000000000000000000000000714212d3a4754606d7a86929facacacacacacacacacacacacacacacacacaea2988a7e7164564c4135291d11040000000000000000000000000000000000000000000000000000050e18232e39434c555e686d78818b92979fa4acaeb4b9bbc0c2c4c5c6cad0cbc7c5c4c2c0bcb8b6afaca69f99928d837a6f6a5f584e453b31271d11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a979999999999999999999999999996897c6f6356493c302316202d3a4753606d7a869399999999999999999999999999998f8275695c4f4236291c0f000006131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303030303030d18222935414c56606b737f8c949fa9b3becad6dde1d6ccc1baaea3989183796d605a50453c30271d1207000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f3e9e0d7d0cac6c5c4c4c4c4c4c4c4c5c6c7ccd2d1d2d4d9e0e3e5e1dad5cec9c1bab2aaa29a93877e706b60574d42362d20170d00000000000000101d293643505c6976838f9ca9b6c2cfdce9f0e3d6cabdb0a3978a7d7064574a3d31261b161e2a36424d576875828e9ba8b5c1cedbe8eee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864717d8a96a1acbcc6d0dbe7e4d9d0c7c0bbb9bbc0c7d0d7e0e6dacfc4b8ab9f95897c6f62564d41362a1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8b9b9b9b9b9b9b9b9b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4b9b9b9b9b9b9b9b9b9ada093877a6d6054473a2d2114070000000000000000000000000000000005111d2935414c5664717e8b98a3aebab9b9b9b9b9b9b9b9b9b9b9b9b9b9bfb4aa9b8f8275685d5245392c20130800000000000000000000000000000000000000000000000000000007121d27303a434c565e666d747e858e939a9fa3aaacafb5b5b7b8babfbabfbab9b7b5b3b1acaca49f9c94908780796e685f584e463c33291f150b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707e8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c897c6f6356493c302316202d3a4753606d79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275695c4f4236291c0f0000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0b1010101010101010101924303a444f59606d78829097a2adb9c0cbd5e0ded6cbbfb4aaa0958e81746c61574d43392e23180f050000000000131f2c3946525f6c7985929facb8c5d2dfebf2f2f2e9e2dbd6d3d2d0d0d0d0d0d0d1d1d2d4d7dddddee1e5e1ded9d4cfc9c4bdb9afa8a19892887f726c61594f453b30241b0e05000000000000000f1c2936424f5c6975828f9ca8b5c2cfdbe8f3e6d9ccc0b3a6998d807366584e43372b252428303946535f697884919eabb7c4d1deeaeee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3a47535f6a7683909ca8b2bdced8e2e8ddd2c7beb6afacafb6bec5ced7e1e1d4c8bcb1a79b8e8175685e5246392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5c6c6c6c6c6c6c2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0c6c6c6c6c6c6c6baada093877a6d6054473a2d211407000000000000000000000000000000000713202d3946525d6875828f9caab4bfcbc6c6c6c6c6c6c6c6c6c6c6c6d0c5b9ac9f92867a6d6054473a3025190d010000000000000000000000000000000000000000000000000000000b151e28313a444c545c606c717a81878e92989c9fa3aba8aaacaeb4aeb4aeacaba9a6a7a09d9a938f89837c736d675e564e463c342a21170d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b6e6154483b2e2115202d3a4653606d787f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574a3e3124170b0000000c1825313e4a57636d7273737373737373737373737373737373716c6155493c3023170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c111517181d1d1d1d1d1d1d1d1d1d1e28323d44505c666e7b85929ea4aeb9c3ced8e2dcd0c6bcb1a89d938b7e71695f554b40342821170c0300000000131f2c3946525f6c7985929facb8c5d2dfe5e5e5e5e5e5e7e2dfdfdddddddddddddededfe0e3e2dfdedcd9d4d2cec8c5beb9b2aca59e9691867e726d625a50473d33291f120900000000000000000e1b2834414e5b6774818e9aa7b4c1cddae7f7e9dccfc3b6a99c9083766a5f53473f363030313a424d57616e7b8896a1acb9c5d2deebeee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935414c56626f7c88949fabbac4cee0eae4d8ccc0b6aca49fa4acb3bcc5d0dbe4d8cdc2b9ac9f92867b6e61554b4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d2d2d2d2cec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cdd2d2d2d2d2c6baada093877a6d6054473a2d211407000000000000000000000000000000000714212e3a4754616d7a86929facb9c5d0dcd2d2d2d2d2d2d2d2d2d2d2d3c7baaea3988b7e7164564c41362a1d1105000000000000000000000000000000000000000000000000000000030c161f28323a424a515a62686d747b81868c8f9299999b9d9fa2aaa1aaa39f9e9c9a9795908d87827d766f6a605c554c443c342a22180f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f696e73737373737373737373737373737373736e695e52463a2d20141f2b3844505c666d7373737373737373737373737373737373716c6155493d3023170a0000000916222e3a46515b63666666666666666666666666666666666664615a5045392d211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911171d2124252a2a2a2a2a2a2a2a2a2a2a2a28343f4a545e69707d8a929da7b1bcc6d0dbe2d8cec3baafa59f92867b6e675c51453e33291e150a00000000131f2c3946525f6c7985929facb8c5d2d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7d7dbd6d3d2d0cec8c5c3bdb8b3ada8a09e938e847c706c625b51483e352b21170d0000000000000000000c1926323f4c5965727f8c98a5b2bfcfdae6f1eaddd0c4b7ab9f94887c6f625a5046423e3d3e434c545e6973808d9aa8b2bdc9d5e1edeee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3946525e6874818e9aa6b0bbccd6e0ede0d4c8bbafa49a939aa2aab3becad6e2e0d3c7bbaea3998c8073675c5145382c1f160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfdfdfdbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddadfdfdfd3c6baada093877a6d6054473a2d21140700000000000000000000000000000005111e2a36414c5665717e8b99a3aebbc7d3e2dfdfdfdfdfdfdfdfdfdfe3d7cbbfb4aa9c8f8276685e5246392d20140900000000000000000000000000000000000000000000000000000000040d1620283039404450565e616a6e747a7f83868a8c8f9192989394949892918f8d8b8784807b75706b625f58514b433b322a2218100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d575f626666666666666666666666666666666666615e574d42362a1e121c28343f4a545c60666666666666666666666666666666666664615a5045392d21140800000006121e2a353f4951575959565e616467696a6a696764605d5659575550483e33281c110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b22292d3032363636363636363636363636362e38424d57616c74808d95a0aab4bfcad6dee0d5ccc1baaea2989083796d605a50453b30261c1106000000131f2c3946525f6c7985929facb8c5cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcacad0cac6c5c3c1bdb9b7b2aca9a19e96918a817a6f6a615a51493f362c23190f050000000000000000000a1724313d4a5764707d8a97a9b2bec9d5e1eeece0d3c7bcb0a69b8e81756d625a524d4b4a4b4f555d666e7b86929facb8c4cedae5f1eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616d7a86929facb8c2cddfe8ecdfd2c6b9ac9f93869298a2aebac6d3dfe3d7cbbfb5ab9e9285796d6053463d32271b0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ece0d3c6baada093877a6d6054473a2d2114070000000000000000000000000000000714202d3946525e6876828f9cabb5bfcbd7e3f4ecf3efecebeceff3f3e7dcd1c5b9ac9f92867a6d6154473b30251a0e0200000000000000000000000000000000000000000000000000000000050e161e272e343e444c52585f62686d72767a7d808284858687878786868482807e7b77736e6a636059534e45403930292018100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c454d5355595959595959595959595959595959595954524d453b30251a0e17232e38424a50535959595959595959595959595959595959575550483e33281d1105000000020d17202d373f4750575e61686e71747677767674716d68605d554e463e362c1e140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b242d34393d3e4343434343434343434343434343434345505a606d79839098a2aebac1ccd6e0ded6cabfb4aaa0958d80746c61574d42382e23170c050000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbebebdbcbebab8b6b4b2acaaa8a09d97928c847d756e685f5850483f372d241a1007000000000000000000000815222f3b4855626e7b8897a1adb9c6d2dfebf0e4d8cdc2b6aa9e938b7e716c615e575757585961676d78839098a2aebac6d6e0ebf6eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66727f8c98a2aebac7d3e0ece0d4c8bcb1a79a8e8186929fabb8c4cfdae6dcd1c6b9ada1978b7e7164594f43382c1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2114070000000000000000000000000000000814212e3b4754616e7a87939facb9c6d1dce7f3ede7e3e0dfe0e3e7edede0d3c7bbafa3998b7e7265574d42362a1e11050000000000000000000000000000000000000000000000000000000000050c151c2328323a41464e53565e6165686d7173757779797a7b7a7979787673716e6966625f58544f47433c342e271e170e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151f2a333c4247484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4846423b33291f1409111c2630383f44464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e362c22170c0000000008141f29323e47505a61696e747b7e8182838382817d7a736d675f584e453c30261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c17222d363f45494b505050505050505050505050505050505050515c676e7c86929fa5afbac4cedae5dbd0c5bcb1a79d928a7e70695e544a3f342821160b0000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b0b0b3aeaba9a7a8a09e9a96918b857f79706b615e564e463e362d251b120800000000000000000000000814212e3a47535f697885919eabb8c4d0dbe7f3e9ded2c6bbafa59f92877e746e6965646364676c707a828f959faab4bfcad6e8f2fceee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919eaab4bfcad6e2eaded1c5b8aca095887c818e9ba9b2bdc9d5e1e3d5c9beb3a99d9083776b6054483b30251a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d211407000000000000000000000000000005121e2a36424d5765727f8b99a4afbbc7d4e3edeae2dcd6d3d2d3d6dce2eae3d7cbc0b5ab9c908376695e52463a2d201409000000000000000000000000000000000000000000000000000000000000030b1218202830353c43474c5254565d606466686a666d6d6e6d6d666b696764615e5755534e48443d373128231d150c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18212a31373a3b40404040404040404040404040404040403b3a36302921170d030a141e262e34383a40404040404040404040404040404040403e3d39332c241a1005000000020e1925303b444f59616c707b81868b8e8f90908f8d8a8580796f6a5f574d42382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d29343f485056585d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d555f6a717e8b939ea8b2bdc9d5e1e2d7cec3b9aea49f92857b6e665c50443d33271c100400131f2c3946525f6c7985929fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a3aaa29f9d9b9896918d89847e79736d676159524c443c342c231b120900000000000000000000000006121e2b37424d576875818e9baab4bfcad6e2efefe3d7ccc1bbaea399928b817b767271707173777d848f949fa7b1bcc5d0dbe7fafbeee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864717d8a96a1acbcc6d0dbe7e3d7cbc0b5ab9d9083777d8996a1adb9c5d2dfe6dacfc5b8ab9f95897c6f63574d42362a1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d21140700000000000000000000000000000714212d3a46535e697683909dabb5c0ccd7e3eae0d8d0cbc7c5c7cbd0d8e0e8dcd1c6b9ac9f93877b6e6154473b31261a0e0200000000000000000000000000000000000000000000000000000000000000070e161e252931373a4146474c525457595c545c60606161605c545c5a5854534d4847433c38332b262018120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f181f262b2e2f33333333333333333333333333333333332e2d2a251f170f0500020c141c23282b2d333333333333333333333333333333333331302d28221a12080000000005111e2a36414d56616b707e858e92999a9c9d9d9c9a98928d847c6f695f544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212d3945505a6265696969696969696969696969696969696969696969696d75818e96a1acb9c5d2dee9e0d5cbc0baada2979083786d60594f44382c20140700131f2c3946525f6c798592989898989898989898989898989898989898989898989898979796959892908e8b8884807c78716d67605d554f46413b322a221a110900000000000000000000000000020e1a26313e4b5864717e8b98a2aebac6d3e0ebf5e8ddd7cbbfb5aba39f938e86827f7e7d7e80848a91969fa6b0b9c2ced7e2ecf8fbeee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3a47535f6a76838f9ca8b2bdced8e2ede0d3c7bbafa3998c7f727884919eabb8c3ced9e5e1d4c8bcb1a79b8e8175695e5246392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d21140700000000000000000000000000000815212e3b4854616e7b87939facb9c6d2dde8e1d8cec6bfbab8babfc6ced8e2e0d4c7bbafa4998c7f7265574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000040c131920262b3036393a4145474a4d4f4a505354545453514a4f4d4b4846423b3a37312c27211a150c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1e2122262626262626262626262626262626262621201e1a140d05000000020a11171c1f2026262626262626262626262626262626262423211d17100800000000000714202d3946525e68707d8792979fa3aba9aaa9a9aaa29f9691857b6e665c5044382b1f12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724303d4956626c717676767676767676767676767676767676767676767676767a84919eabb7c4d1deeae7ddd6cabeb3a99f958d80736b6054483c2f22160900131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8b8a8989878583817f7b7774706c65605c55514b433e363029201810080000000000000000000000000000000914212d3a4754606d7a86929facb8c2cfd9e3eef3e7dcd1c6bdb5aea59d99928f8c8a8a8b8d91969ea0a8b0b8c2cbd4e0e9f3fefbeee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935414c56626f7c88949fabbac4cee0eaecdfd2c5b9ac9f92867a6e73808d9aa7b1bcc8d4e4e4d8cdc3b9ac9f92867b6e61554b4034291c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2114070000000000000000000000000006121e2b37424d5766727f8c9aa4afbbc8d4e3e2d8cfc6bcb4aeacaeb4bcc6d0dce3d7ccc0b5ab9d908376695f53463a2d21150900000000000000000000000000000000000000000000000000000000000000000002080d151a1e252a2d2f35393a3e40423f444647484746444043403e3b3a36312e2b26201c160f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141519191919191919191919191919191919191514120e0903000000000000060b1012131919191919191919191919191919191919171714110c05000000000004101c2834404b55616e7b869299a2a9aeb5b5b6b6b5b4aea8a0979083786d6053463a2f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8383838383838383838383838383838383838383838383838384919eabb7c4d1deeaefe6dbcfc5bbb1a79f93877d7063564a3d3023170a000c1925323f4c5865727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7d7d7c7b787674726e6a6763605b53514b454039312a251e170e06000000000000000000000000000000000613202c3945525d6874818e9aa6b0bdc7d1dce8f2ede3d8cfc6bfbbafaba39f9c989796979a9da0a8acb2bac2cad5dae1e8f1fafbeee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3946525d6874818e9aa6b0bbccd6e0eee2d6cabeb3a99c8f8275686f7c8895a0acb8c7d2dde8e0d3c7bbafa3998d8073675c5145382c1f160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d211407000000000000000000000000000814212e3a47535f697783909dacb6c0ccd8e4dcd1c6bcb4aaa39fa3aab4bfcbd6e3ddd2c7b8ab9f95887b6e6155483c31261a0f020000000000000000000000000000000000000000000000000000000000000000000003090f13191d2024292c2d31332e34383a3a3b3a3a38342e34312e2d2a25211f1a15100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d08070502000000000000000000000306070d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a08050000000000000006131f2c3845515c6774818e98a2abb3bbbfc2c3c3c2bebab2a9a0958b7e7265554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c9090909090909090909090909090909090909090909090909196a1acb9c5d2deebf7ece1d7cdc2bbafa49a8e8175685b4f4235281c0f000b1824313e4a56626d72727272727272727272727272727272727272727272727272727171706f6e696a6865625f5756535049454039352f271f19140d05000000000000000000000000000000000004111d2935414c56626f7c88949fabb5c0cbd7e0eaf3eae1d8d1cbc1bdb4aeaca9a5a4a3a4a6aaacb2b8bdc3c4c6c9cfd6dfe8f2fdeee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616d7a86929facb8c2cddfe8ecdfd3c6baada2978a7d71646a7784909dacb6c0ccd8e4e3d7cbc0b5ab9e9285796d6053473d32271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d211407000000000000000000000000000815222f3b4855626e7b8895a0acbec7d2dde3d7cbbfb4aaa3989298a3aebac7d3e0e3d4c8bcb1a7998c7f7266584e43372b1f120600000000000000000000000000000000000000000000000000000000000000000000000002080d1113191d2021242623282b2d2d2e2e2d2c2823272521211e1a14120f090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929faab4bdc5cbd1d0d0d0cac3bbb1a79c908376675d5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c999c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9ea1a8b2bdc9d5e1edfaf3e9dfd8ccc0b6ac9b8e8275685b4f4235281c0f000916222e3a46515b62656565656565656565656565656565656565656565656565656564646362615e575b5855534e4946443f38342f29241d150d0802000000000000000000000000000000000000010d19242f3a4754606a76828f99a3afbbc3ced8e1eaf3eae3dcd7cfc6bfbab9b5b2b1b0b1b3b7b8bdc3beb9b8b9bec4cdd6e1ebf7eee1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66727f8c98a2aebac7d3e0ecebded2c5b8ab9f9285796d6066727f8c9aa4afbbc8d4e0e8dcd1c7b9ada1978b7e7164594f44382c1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d21140700000000000000000000000006121f2b37434e5866737f8c99a7b1bcd0d9e4e0d3c7baaea3989285929facb8c5d0dbe4d8cdc2b7aa9d9083776a5f53473a2e21150a00000000000000000000000000000000000000000000000000000000000000000000000000000105080d111314171a171c1f20212121201f1c181a181514120e090602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0a1313131313131313131313131313131313131313130e0e0c08030000000000000000000003060612131313131313131313131313131313131313131313070603000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8998a2aebcc5cfd7dcdddcdbd6cdc3b9ac9f9386796d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9abacb2bac4cedae5f1fdfbf1e8ddd2c1b5a89b8e8275685b4f4235281c0f0006121e29343f49515658595959595959595959595959595959595959595959595959585857565654524d4e4c4847423d3937332d29231d18120b0300000000000000000000000000000000000000000008131e2b37434e58626f7c87929fa7b1bcc6cfd9e1e9f1ede7e1d8d1cbc7c5c2bfbdbdbec0c4c5c2bbb3adabadb3bbc4cfdae6f1eee1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919eaab4bfcad6e2ede1d4c8bdb2a89a8d8174675c616e7b87939facb9c6d1dce7e3d5c9beb3a99d9083776b6054483b30251a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2114070000000000000000000000000815212e3a47535f6a7784919daab7c3cdddebdfd2c5b9ac9f9286808d9aa9b3becad6e2ded1c5b8aca095887b6e6255483c32261b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000010407070b060b1012131415141312100c070b08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101416172020202020202020202020202020202020202020201b1a18140f0901000000000000060b0f12131f20202020202020202020202020202020202020201f1312100b06000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97aab4beced7e1e7e9e9e7dfd4c7bbafa499887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b7b9bdc4ccd6e0ebf6fffff9e8dbcec1b5a89b8e8275685b4f4235281c0f00010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a4a49484642413f3b3a37312d2b27221b18120c070100000000000000000000000000000000000000000000010f1b27323c47535f6a74808d95a0aab4bdc7cfd7dfe5ebf3eae2dcd7d3d2cfcbcac9cacdcdc2b9b1a9a19ea1a9b3bec9d5e1eeeee1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864707d8a96a1acbcc6d0dbe7ebded1c5b8aca096897c6f62555e697683909caab4bfcbd7e3e6dacfc5b8aca095897c6f63574d42362a1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2114070000000000000000000000000915222f3c4855626f7c8895a0acb8c5d1dee8dccfc2b5a99c8f827d8997a2adbac6d3dfe0d4c8bcb1a7998c807366584e43372b1b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070708070706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282724201a130b03000000020a11171c1f202c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c201f1c17110a0200000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97acb6c0ccd8e4eef1f1ede1d5c9bdb2a895887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c4c5c9ced6dee8f2f2f2f2f2e8dbcec1b5a89b8e8275685b4f4235281c0f000006111b252d343a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3e3d3c3b3a3630322f2e2b26201f1b17110c0701000000000000000000000000000000000000000000000000000a15202b37434e58606d79839198a2abb5bdc5cdd5dae0e4eaece7e3e0dfdcd8d7dcd7cdc4bbb1a79f979197a1adb9c6d2dfe5e5e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3a47535f6a76838f9ca8b2bdced8e2ede3d7ccc0b5ab9d9184776a60545765717e8b98a3aebac7d3e0ece1d4c8bcb1a79b8e8275695e5246392f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d211407000000000000000000000006131f2b37434e586673808d99a7b1bcc8d4e0e1d5c9bdb2a8988b7f7885929fabb8c5d2dee4d9cec3b7aa9d9184776a5f5447382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a22282d30313939393939393939393939393939393939393939393534302b251d150b0100020b141c22282b2d393939393939393939393939393939393939393939392d2b28231c140c02000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a9aa4afbbc8d4dce3e5e5e2dbd2c5b9ada196877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfcccfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfd1d2d5dae0e8e5e5e5e5e5e5e5dbcec1b5a89b8e8275685b4f4235281c0f00000009131b23292e3132323232323232323232323232323232323232323232323232323131302f2e2d2a252522211e1a13120f0b0600000000000000000000000000000000000000000000000000000000040f1a26313c45515d676f7c869299a3abb3bbc2c9cfd4d9dedfe0e3e2dfdedbd6d1cbc3bbb3a99f959085919eabb8c4d1d9d9d9d9d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935414c56626f7c88949fabbac4cee0eaede0d4c7bbafa4998c7f7266584e54606d7a86929facb9c5d0dbe6e4d9cdc3b9ac9f92877b6e61554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d21140700000000000000000000000815222e3b4754606a7784919eaab7c3ced9e5ded2c5b9aca096887b75828f9ba8b5c2ced9e5ded1c5b8aca096887c6f6253493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a232c33393c3d46464646464646464646464646464646464646464641403c372f271d1309000a141d262d333839454646464646464646464646464646464646464646463a38342e261e140a000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a86939facb9c1cbd1d5dad9d4d0cabfb4aa9e918478685e5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8cec1b5a89b8e8275685b4f4235281c0f000000010911181e222425262626262626262626262626262626262626262626262626252524232321201e1a191514120e090503000000000000000000000000000000000000000000000000000000000000000a15202935404b555f6a707e879299a2a9b0b9bdc4c8cdd1d2d3d7d6d3d2d0cac6bfbbb1a9a1979083808c99a6b3bfccccccccccccc8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3946525d6874818e9aa6b0bbccd6e0f2ecdfd2c6b9ac9f93877b6e615448525d6875828f9ba9b3becad6e2eae0d4c7bbafa3998d8073675d5145382c1f160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d21140700000000000000000000030f1c28333f4a54626f7c8996a0acb9c5d5dfeaddd1c4b7aa9e918477717e8b98a8b1bdc8d4e1e1d4c8bdb2a89a8d8073655b5044372b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222c353e44494a5353535353535353535353535353535353535353534e4d4841392f251a0f06111c262f383f44465253535353535353535353535353535353535353535246443f3830261c11060000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687683909da5afbbc0c7c9cecec8c6bfbaaea3988d807467564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc1b5a89b8e8275685b4f4235281c0f0000000000060d1216181919191919191919191919191919191919191919191919191919181717161514120e090808060200000000000000000000000000000000000000000000000000000000000000000000030d18242f39434e58616c717e8792979fa6adb2b8bcc1c4c5c7cbcac6c5c3bfbab5aea7a09791857b7f8c99a6b2bfbfbfbfbfbfbfbfbbaea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616d7a86929facb8c2cddfe8eee2d6cabfb4aa9c8f8276695e52464c5664717d8a97a2adbac6d3dfebe3d7cbc0b5ab9e9285796d6053473d32271b1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2114070000000000000000000006121f2b3844505b6674808d9aa8b2bdc9d5e7e3d7cbbfb4ab9a8d81746e7b8795a0acb8c5d1dee5d9cec3b7ab9e9184786c605346392d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e475055576060606060606060606060606060606060606060605b59534b41372b20140b17222d38424a50535f60606060606060606060606060606060606060605f53504a42382e23170b00000000000000000000000000000000000000000000000000000000000000000005111e2a36414d5663707d8a939ea6afb5b9bdbdbdbdb8b4aea49f92867b6e6154483b3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb5a89b8e8275685b4f4235281c0f0000000000000106090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0b0a09080705020000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313c46505a616c717d8590949ea1a8acb1b5b7b9babfbebab8b6b4aeaba39f9590857c737f8c99a6b2b2b2b2b2b2b2b2b2b2aea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66727f8c98a2aebac7d3e0ececdfd3c6baaea2988b7e7164574d424653606d7985929fabb8c4cedae5e8dcd1c7b9ada1978b7e7165594f44382c1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d211407000000000000000000000613202d394653606c7884919eabb8c4ced9e5e0d3c7baaea3998a7d70697784919daab7c4d0dce7ded2c5b9aca196897c6f63544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202d3944505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68645d53483c301e130f1c28333f4a545b606c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c605c544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000020e1925303b4855616b75818e949fa3abacb2b0b0b1acaaa29f928c7f72695e53463a2d1e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343e48505a616b707b838b91969da0a7a8abacaeb4b3adaba9aaa29f99928d837b6f737f8c99a6a6a6a6a6a6a6a6a6a6a6a6a195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919eaab4bfcad6e2efebdfd2c5b8ac9f9285796d6053473b45515c6774818e9aa8b2bdc9d5e1eee3d6cabeb3a99d9083776b6054483b31251a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d21140700000000000000000003101c28343f4a5463707c8996a1adb9c5d6e0ecdfd2c5b9ac9f92867a6d6774808d9aaab4bfcbd6e3e1d5c9bdb2a89a8d8074665b5044382b1f12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303c4955616c70797979797979797979797979797979797979797979746f64594d3a302519121f2b3844505b666c787979797979797979797979797979797979797979796d665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000000008141f2c38444f59606d79828d92999ea1a8a3a3a8a09d98928b80746d62574d42362a1e0c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222c363e48505961696e787e848b9095989b9e9fa3aba9a29f9d9a98928d8680796e69737f8c999999999999999999999999999995887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864707d8a96a1acbcc6d0dbe7ede1d5c9bdb2a89b8e8174675d514539404b5563707c8996a1acb9c5d2deeae6dacfc5b8aca095897d7063574d42362a1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d21140700000000000000000006121f2c3844505c6674818d9aa8b2bdc9d5e8e8dccfc2b5a99c8f82766763707d8998a3aebac7d3e0e5dacec4b8ab9e9185786c605346392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707e868686868686868686868686868686868686868686817468564c41362a1e13202d394653606c7886868686868686868686868686868686868686868686786d6053463a2d20130600000000000000000000000000000000000000000000000000000000000000000002101c28333e45515c676d7880878d91969697969595918c867e746e645b51453b31251a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c989898989898989898989898989898989898989898989898989898989898989898989898989898989898988e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a232c363e474f575e666d71797f83888c8e91929994949792908d8a86807b736d6766737f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3a47535f6a76838f9ca8b2bdced8e2edebded2c5b9aca196897c7063554b4035394653606c7884919eabb7c3ced9e4ece1d4c8bcb1a79b8f8275695e5346392f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcec2b5a89b8f8275685c4f4235291c1b2734414e5a6774818d9aa7b4c0cddae7ede0d3c6baada093877a6d6054473a2d2114070000000000000000000713202d3a4653606d7985929eabb8c4cfdae5e1d5c9bdb2a8988c7f7265606d7986929facb8c5d2dfebdfd2c6b9ada197897d7063544a4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b556773808d93939393939393939393939393939393939393918477685e5246392d2015222f3c4855626f7c889893939393939393939393939393939393939398897c6f6256493c2d22170b000000000000000000000000000000000000000000000000000000000000000000000b16212834404b555c666d737b808487898a8a898784807a716c645c52493f33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8175685b4f4235281c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a242c353e454d545c60676d72777c7f828486868787868583817d79746e69605c636f7d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2935414c56626f7c88949fabbac4cee0eaf4eaded1c4b7ab9e9184786c605346392f3744505b6573808d99a7b1bcc8d4e3eee4d9cec3b9ac9f92877b6e61554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe8dbcfc2b5a89c8f8275695c4f4231261a1b2834414e5b6774818e9aa7b4c1cddae7ede0d3c6baada093877a6d6054473a2d211407000000000000000004101c2834404b5563707d8997a1adb9c6d6e0ebded2c5b9aca196887b6e625c6776828f9ca9b5c2cedae5e1d5c9beb3a99a8e8174665c5144382c1f1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677783909d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa096877a6d6154473a2e211825323f4b5865727e8b98aa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa988c7f7265544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000050c18232e39434b545c60696e74787b7c7d7d7c7a77736d68625a524a40372d21170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a232c333b424a50555d60656a6f727578797a7a7a79787674706d67615f5754606b6f73737373737373737373737373737373736d685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3946525d6874818e9aa6b0bbccd6e0f2ece0d3c7bcb0a6998c8073655b5044372b333f4953626f7b8895a0acb8c7d2dde8eae0d4c7bbafa3998d8073675d5145392c1f160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebe9dcd0c3b6a99d9083766a574d42372b1e1b2935414b556875828f9ba8b5c2cedbe8ede0d3c6baada093877a6d6054473a2d211407000000000000000006131f2c3845515c6774818e9ba9b3bec9d5e8eaded1c4b7ab9e9184786a5f5565727f8c98a8b2bdc9d5e1e6dacfc4b8ab9e9285796d6053463a2f23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86929facacacacacacacacacacacacacacacacb2a8978a7d7064574a3d2e231d2a36414c566874818e9ba7acacacacacacacacacacacacacacacaca89c8f8275665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000007121d273039424a50575f6167696e6f70706f6e6866615e56504840382f251b0f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3b4854606b6f727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272706b6155483c2f23160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a212930383f444b5153585f6265686b676d6e6d6d676a6764605d55534d4f5960636666666666666666666666666666666666615e564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616d7a86929facb8c2cddfe8e5e5ddd0c4b7ab9f94887b6e6153493f33272d3847535f6a7783909dabb5c0ccd7e3e5e3d7cbc0b5ab9f9285796d6053473d33271c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebebded1c5b8ab9e928578695f53473a2f29282d3945515d677783909daab6c3d0dde9ede0d3c6baada093877a6d6054473a2d21140700000000000000000713202d3a4653606d7985929fabb8c5cfdae6e3d7cbbfb4ab9a8d8174675855626e7b8896a1acb9c5d2deebdfd2c6b9ada2978a7d7063554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8999a3afbbb9b9b9b9b9b9b9b9b9b9b9b9b9b9b3a69a8d807367554b403428202d3946525e687784919eaab7b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8ab9f9285796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000b151e2730383f444d5355575e6163646362615e5654524c443f362f261d130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2c38434f5960636565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656361594f44382c201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f171e262e34394045474e5355595b555d606161605c555a5753514b4642474f5456595959595959595959595959595959595954524c443a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66727f8c98a2aebac7d3d9d9d9d9d6cabfb4aa9c908376695f5341382d222b37434e5865727f8c99a4afbbc7d4d9d9d9dcd1c7baada2978b7e7165594f44382c1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebecdfd2c6b9ada197887b6e61564c4139353438404b54606d7a86929facb9c5d2dfecede0d4c7bbafa49986796d6053463a2d2013070000000000000004101d2935404b5564707d8a97a2adbac6d6e1ece0d3c7baaea3998a7d706457535f6a7884919eabb7c4d1dce8e2d6cabeb3a99b8e8175675c5145382c1f1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b556673808d99abb5c0cbc6c6c6c6c6c6c6c6c6c6c6c6c3b6a99d908376675c5145382c212e3a4754616d7a8796a0acb9c5c6c6c6c6c6c6c6c6c6c6c6c6c6baada297887c6f6255493c2d22170b0000000000000000000000000000000000000000000000000000000000000000000000030c151e262e343b4246484d53545657575654524c4746413a322d241d140b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d464f545659595959595959595959595959595959595959595959595959595959595959595959595959595959595959595957554f473e33281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c141c23282f35383c4347484c4f4b5153545453514b4e4a47454039363d4348494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4746413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919eaab4bfcaccccccccccccc7baaea2988b7e7165574d422f261b26313c4754616e7b87939facb9c6d0cccccccccccabeb3a99d9083776b6054483b31261a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebeee1d5c9beb3a9998c7f73685d524a4540404449515c66717e8b99a3afbbc7d4e0edecdfd2c6b9ac9f938679665c5145382c1f13060000000000000006131f2c3945515d6775818e9ba9b3becad6e8ecdfd2c5b9ac9f92867a6d60534e586774818e9aabb5c0cbd7e3e6dbcfc5b8ab9f9285796d6053473a2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c677683909ca9b6c3d1dcd2d2d2d2d2d2d2d2d2d2d2c5b9ac9f9286796d6053463a2d24313d4a5764707d8a97a8b2bdc8d4d2d2d2d2d2d2d2d2d2d2d6cabeb3a9988b7f726553493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000030c151c232831363a3b424648494a4a494746413b39353028201b120b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212b343d4348494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a48443e352c21170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171d24292c31373a3c3f424045474747464540413d3a39352f2a32383b3c40404040404040404040404040404040403a3935302820160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864707d8a96a1acbcbfbfbfbfbfbfbfbfbfb8ac9f92867a6d6054473b312114202d3a46525e6976828f9caab4bfbfbfbfbfbfbfbfbfb8aca095897d7063574d42362a1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf2e6dacfc5b8ab9e92857a6d605c54514b4a51535b606d7984919dabb5c0cbd7e3efebded1c4b8ab9e9185786b544b4034281c1004000000000000000714202d3a4753606d7985929facb8c5d0dbe6e9dccfc2b6a99c8f8276675d514a5764717d8a99a3afbbc7d3e0ecdfd3c6baaea2988a7d7164554b4035291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929facb9c5d2dfdfdfdfdfdfdfdfdfdfe0d3c7baaea399897c6f6356493c3028343f4a546673808d99a6b3c0ced9e5dfdfdfdfdfdfdfdfe6dbd0c2b5a89b8f8275655b5044372b1f1205000000000000000000000000000000000000000000000000000000000000000000000000030a11171f262a2d31363a3b3c3d3d3c3b3936302d29251e160e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222b32383b3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c38332c231a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b12181d1f262b2e2f322f35393a3b3a3a38342e312d2c292421272c2f3033333333333333333333333333333333332e2d29251e160e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a76828f9ca8b2b2b2b2b2b2b2b2b2b2b2b2a99b8e8175675d5145392c20131e2a36424d5765717e8b98a3aeb2b2b2b2b2b2b2b2b2b2b1a79b8f8275695f5346392f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf7ecdfd2c6b9ada1978e81756d66605d55545c60656c74808d95a0acbdc7d1dce8f4e9ddd0c3b6aa9d9083776a5d50442e23180c0000000000000004111d2935414c5664717e8a98a2aebac6d3e1ece1d5c9bdb2a8988c7f7265554b4754606d7a86929facb9c5d2dfece2d6cabeb4aa9b8e8275675d5145392c201308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8999a3aebac7d3e0ececececececececefe3d7cbbfb4ab998c7f7266594c3f312c3844505c667683909ca9b6c3cfdce9f6ececececececf7ebded1c5b8ab9e9285796c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000060c141a1e21252a2d2e3031302f2e2d2a25201d19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101921272c2f30323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232302f2c28211a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10151b1f21222624292c2d2e2e2d2c282324201f1d18161b1f2223262626262626262626262626262626262621201d19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56626f7c88949fa6a6a6a6a6a6a6a6a6a6a6a6a6a196897d7063554c4135291d111a25303b4754606d7a86929fa6a6a6a6a6a6a6a6a6a6a6a6a69f93877b6e61554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8eee1d5c9beb3a99e938e8178716d676968666d7077808d929da8b1bdcfd9e3eef9e8dbcec1b5a89b8e8275685b4f4235281c07000000000000000613202c3945525d6875828f9baab4bfcad6e2ebdfd2c5b9ada196887b6f62554845525d687683909ca9b6c3cfdae6e7dbd0c5b8ac9f92867a6d6053473a3024190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5466737f8c99abb4bfcbd7e3effbf9f9f9f9f9fff3e7dcd1c2b5a89b8f827568574d42372d3a4653606d7985929facb8c5d2dfebf8f9f9f9f9f9f9f8ecdfd2c6b9ada197887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141a1e21212324242321201e1914110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f22232626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262423201c1710080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f12151519181d20202121201f1c18171413100c0a0f13151619191919191919191919191919191919191413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d6874818e999999999999999999999999999999999184796d6053463a2f24190d14202c3945515d6775828e999999999999999999999999999999998d8073675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f2e6dacfc5bbafa59d938e847e7a76757576797d838d929ca4aebac3cee1ebf5efe2d6cabfb4aa998c7f7366594c403326190d000000000000000714212d3a4754606d7a86929facb9c5d0dbe7eaded1c4b7ab9e9184786a5f5347414c5666737f8c99a9b3bec9d5e2ece0d3c7baaea2988a7e7164564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c6676828f9ca9b6c2d1dce7f3fffffffffffffff8ebded1c5b8ab9e928578695f53473a2f3c4955626f7c8898a2aebac6d3e0ecf9fffffffffffffaeee2d6cabeb3a9988b7e7265584b3f31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000205090e121415161717161414110d0805010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f131516191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919171614100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060809070d10131414141313100c070706040000030709090d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8073665c504438281e1308111d2935414c5564707d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c857a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f7ece1d6cdc1b7afa59d96918a8683828283858990959ca4aeb6c0ccd5dff3f9ece0d3c7baaea298897d7063564a3d3023170a00000000000005111d2a36414c5664717e8b98a3aebac7d3e2ede3d7cbbfb5ab9a8e817467584e433c4956626f7c8997a1adb9c6d2dfece2d6cabfb4aa9c8f8275685d5245392c20140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929facb8c5d2dfebf8fdf9f7f7f8f9fbf8ecdfd2c6b9ada197887b6e6255483b323f4c5865727f8b98aab4bfcad6e2effbfbf9f8f9fafcfef2e6dacfc1b5a89b8e827568574d42372b1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050708090a0a090807050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030709090c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a0a070400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607080707060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b6e61544a3f3428160c010d19242f3a4653606d787f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f9f0e7dfd3c9c1b7afa8a09d9892908f8e9092989d9fa7aeb6c0c8d2dee7f1f3eadfd2c5b8ac9f9286796d6053473a2d2014070000000000000713202d3946525e6876828f9caab4bfcbd7e3ede0d3c7bbaea3998a7d7064574a3d394653606c7885929eabb8c5d2dde8e7dbd0c5b9ac9f92867a6d6054473b3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8998a2aebac6d3dfecf6f1edebeaececeff3eee2d5c9beb3a9978b7e7164584b3e36424d566875818e9ba8b4c1d0dbe7f3f2eeecebecedf0f4f7ebded1c4b8ab9e918578695f53473a2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a6f737373737373737373737373737373737373736e695e5342382e2317040008131f2c3844515c666d737373737373737373737373737373737373736e695f53473a2d21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf8f1e7ded5cec8c5c1bab2acaaa39f9d9c9b9c9fa2aaabb1b9c0c8d1dae4f0f4eae1d5c9bdb2a89c8f8275675c5145382c1f13060000000000000714212e3a4754616d7a86929facb9c5d1dce7ecdfd2c5b9ac9f92867a6d6054473a3744505b6575818e9bacb6c0ccd8e4ede0d3c7bbaea3998b7e7165564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a5466727f8c99aab4bfcad6e2efeae5e1dedddfe0e3e7ede6dacfc1b4a79a8e817467564c413a46525e697884919eabb7c4d1deeaece6e2dfdedfe0e4e8eeebdfd2c6b9ada197887b6e6255483b2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e585f6266666666666666666666666666666666666666615e574d4230261c11060004101c2834404a545c6066666666666666666666666666666666666666615f574d42372b1e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf6eadfd5ccc3bdb8b7b8bab8b4aeaca9a8a8a9abaeb3b8bcc2cbd1dae3ecf8ede3d8cfc6b9aca1968a7d7064554b4034291c1004000000000005111e2a36424d5665727e8b99a3afbbc7d3e2ede9dccfc2b6a99c8f8376675d514539333f495364717e8b9aa4afbbc8d4e0ede3d7cbbfb5ab9c8f8276685e5246392d20140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b6675828f9ca8b5c2d0dbe7e7e0d9d4d1d0d2d3d7dce2eaddd0c4b7aa9d918477685d52463b4754616e7b8796a1acb9c5d2dee9e1dbd6d3d2d2d4d8dde4ebe1d5c9beb3a9988b7e7165584b3e31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a26313c464e53555959595959595959595959595959595959595954534d453b311e140a0000000c18232e39424a51535959595959595959595959595959595959595955534d453c31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebf1e5d9cec3bab1acaaacaeb4bcbab9b6b5b5b6b8babec5c8cdd4dde3ecf3ece7dcd1c6bdb1a79e9184796d6053463a2f23180c0000000000000714202d3a46525e697683909cabb5c0cbd7e3eee1d5c9bdb2a8998c7f7266554b41352d3b4754616e7a87939facb9c6d2dfece7dcd1c5b9ac9f92867a6e6154473b30251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7985929fabb8c5d2dee7ded5cec8c5c4c5c7cbd1d8e1dfd2c6b9ac9f93867a6d6154473e4a5764717d8a97a8b2bdc9d5e1e0d7d0cac6c5c6c8ccd2d9e2e6dacfc1b4a89b8e817568574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c4347484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4846423b33291f0c0200000007121c2730394044464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847423c332a1f15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfebede1d4c8bdb1a8a09d9fa2aab4bfc5c3c2c1c3c5c6cad0d4d8dfe6efeee9e2dbd6cbbfb5aba0958b7e71665c5144382c1d12070000000000000814212e3b4754616e7b87939facb9c6d1dce8ebdfd2c5b9ada196887b6f6255483c2f2d3946525e687783909daab6c3d0dbe7ede0d4c7bbafa3998b7f7265574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8897a2adbac6d3dfe0d5ccc3bdb8b7b9babfc6cfd8e0d4c8bbafa49a8a7d7063574a404b556773808d9aa6b3c0cedae1d7cec5bebab8b9bbc0c7d0d9e4ded1c4b7ab9e918478695f53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222a31373a3c404040404040404040404040404040404040403b3a36312921170d00000000000b151e272e34383a404040404040404040404040404040404040403b3a37312a21180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2dfe5e5ded1c5b8aca095919298a2aebac0c7cfcecfd2d3d6dbe1e4eae9e6e2dfd7d0cac0bbaea3999083786d60544a4034281c0b01000000000005121e2a36424d5765727f8c99a4afbbc7d4e3e5e5ded1c4b8ab9e9184786a5f53473a2e2a36414c566673808d99aab4becad6e2e5e3d7cbc0b5ab9c908376695e52463a2d20140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a9b3becad6e2d9cec3bab2acaaacaeb4bdc6d1dcd8ccc0b6ac998d807366544a45515c677683909da9b6c3d0dcdbd0c5bcb3aeabacafb6bec7d2dddfd2c5b9ada196887b6e6155483b2e2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101820262b2e2f333333333333333333333333333333333333332e2d2a251f170f050000000000030c151c23282c2d333333333333333333333333333333333333332e2d2b261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5d2d9d9d9d9d0c4b7aa9d918386929fa3afb5bdc4cbd0d5dadcdddedededddbd6d3cec5bfbaaea49f92877c6f665c5042392e23180c0000000000000714212d3a46535f697683909dabb5c0ccd7d9d9d9d7cbc0b5ab9a8e817467584e43372b25303d495663707c8998a2aebac6d3d9d9d9dcd1c6b9ac9f93877b6e6154483c31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424e576875828e9ba8b5c1d0dbe1d4c8bdb2a8a09d9fa3abb4bfcbd7ddd2c2b6a99c8f8376665c514653606d7986929facb9c5d2dfd6cabeb3aaa29f9fa4acb6c0ccd8e1d5c9bdb2a8978b7e7164584b3e30251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1f21222626262626262626262626262626262626262621211e1a140d0500000000000000030b12181c1f202626262626262626262626262626262626262622211e1a150e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8c5ccccccccccccc2b5a89b8f827e8b919fa3abb2babfc6c9cfd0d1d1d1d1d0d0cac6c1bcb4aea49c928b7f726a60544a3f30271c12070000000000000815222e3b4855616e7b88959fabbdc7d2ccccccccccc7bbafa3998a7d7164574a3e3126202d3a4653606d7985929fabb8c5ccccccccccccc8bbafa49a8c7f7265574d42372b1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a7885929eabb8c5d1deded1c5b8aca096919299a3aebac7d3dfd2c5b8ac9f9285796d60534956636f7c8999a3aebac7d3dfd3c6baaea29892939aa4afbbc8d4e0dacfc1b4a79b8e817468574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f121515191919191919191919191919191919191919191514120e090300000000000000000000070c101213191919191919191919191919191919191919191514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8bfbfbfbfbfbfbfbfb5a89b8f82757f8b9299a1a8aeb4b9bdc1c3c4c4c5c4c3c1bebab8afaaa29f928d80736d62584e42382e1e150b00000000000006121f2b37434e5866727f8c99a7b1bcbfbfbfbfbfbfbfbfb9ac9f92867a6d6054473a2d211f2c3844515c6675828f9ba8b5bfbfbfbfbfbfbfbfc0b6ac9d908377695f53463a2d21150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8897a1adb9c6d2dfddd0c4b7aa9d918487929facb9c5d2dfd3c7baaea298897c6f62564c5965727f8c98abb4bfcbd7ded2c5b8ab9f928588939facb9c6d2dfddd1c4b7aa9e918477695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0807050200000000000000000000000000000406070d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0808060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb2b2b2b2b2b2b2b2b2b2a89b8f8275727f8791969fa3aaadb2b4b6b7b8b8b7b6b5b3aeaba59e98928b80736e645b51463c30261c0c030000000000000814212e3a47535f6a7783909daab2b2b2b2b2b2b2b2b2b2b2a99c908376685d5245392c201c2834404a5465727e8b98a8b2b2b2b2b2b2b2b2b2b2b2ab9f95887b6e6155483c31261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a9b3bec9d5e1dbcec1b4a89b8e8183909da9b6c3d0dcd6cabfb4aa988b7f7265584d576875828f9ba8b5c2d1dcdbcfc2b5a89c8f8284919eaab7c4d1ddded2c5b9aca096877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929fa6a6a6a6a6a6a6a6a6a6a6a69b8f82756d727d848d92989ea1a8a7a9aaabababaaa8aaa29f9b938f867e736e645c52493f342b1e150a000000000000000815222f3b4855626e7b8895a0a6a6a6a6a6a6a6a6a6a6a6a6a9998c7f7266564c4135291d18232e3b4855616e7b8896a0a6a6a6a6a6a6a6a6a6a6a6a6a7998c7f7366584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576875818e9ba8b4c1cfdae6d8ccbfb2a5998c7f808d9aa6b3c0ced9dbd0c1b5a89b8e82756857535e697885919eabb8c4d1ded7cbc0b5ab998c7f828f9ca8b5c2cfdbe1d5c9bdb2a8978a7e7164574b3e3025190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79859299999999999999999999999999998f8275686b6f7980868c9196989b9d9e9e9e9e9d9b9998928e88827b716c635c524a40372d22190c0300000000000004111d2935414b556673808c99999999999999999999999999999997887c6f6255493c2f241914212d3a46535f697784919999999999999999999999999999999184776a5f53473a2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697884919eabb7c4d1dee2d6cabfb4aa978a7d7d8a97a8b2bdc9d5ded1c4b8ab9e918478695e54616e7b8797a1adb9c6d2dfd4c7bbafa399897d808d99a6b3c0d1dce5d9cec1b4a79a8e817467564d41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c82756860676d737a8084888c8e9091919291908e8c8985817c756e69615a524a40382e251b1007000000000000000613202c3945515d6777848c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c84786a5f53473b2e1e13121e2a36424d576774808c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8796a1acb9c5d2dee0d3c6baaea298887b7a8796a0acb9c5d2ded2c5b9ada196877b6e615764717e8a97a9b2bec9d5dfd2c5b9ac9f9286797e8a97abb5c0cbd7e3ddd0c4b7aa9d918477685e5246392d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164555d60686d73787c7f81838485858483827f7c79746f6a615e57504840382e261c130900000000000000000714212d3a4754606d797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164584e43372b1f0c0e1a26313c4855626f7c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a8b2bdc9d5e1dfd2c5b8ac9f9285797784919eaab7c4d1ddd5c9bdb2a9978a7e7164556774808d9aa7b3c0cfdaddd0c3b6aa9d9083777b8899a3afbbc7d3e0ded1c5b8aca096877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825313e4a57636d7273737373737373737373737373737373716c615551565e61666a6f72747677787878777573706d67625f58534d453e362e261c140a0000000000000000000613202c3945515d676d737373737373737373737373737373737373716c6155463c32261b0f0915212e3a47535f6a6f7373737373737373737373737373737373736f6a6054473b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c566774818e9aa7b4c1cedae5ddd0c3b6aa9d90837774818e9ba7b4c1cfdbdacfc0b4a79a8d8174675d677783909daab6c3d0dddacdc0b4a79a8d81747986929facb9c5d2dfe1d4c8bdb2a8978a7e7164574a3e3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b63666666666666666666666666666666666664615a50454c5254585f6265686a6b6b6b6b6a686663605c55534e46423b332d241c140a0200000000000000000004111d2935414b555d6066666666666666666666666666666666666664615a5045342a20150a06121f2b37434e585f626666666666666666666666666666666666666260584e43372b1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687784919eaab7c4d1dde7dacec1b4a79b8e8174717e8b98a9b3becad6ddd0c3b7aa9d90837767606d7a86929facb9c5d2dfd5c9beb3a9978a7e717784919daab7c4d0dde5d9cec0b4a79a8d817467564c41362a1d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f4951575959595959595959595959595959595959575550483e4146474e5355595b5d5e5e5f5e5d5b595653514b47433c363129211b120a0200000000000000000000010d18242f3a434b5154595959595959595959595959595959595959575550483e3322180e04030f1b26313c464e535559595959595959595959595959595959595956544e463d32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8796a0acb8c5d2dee5d8cbbfb2a5988c7f726f7b8897a2adbac6d3dfd2c6b9ac9f93867a6d63707c8999a3afbbc7d3dfd2c6b9ada197887b6e75828e9ba8b5c1cedbe8ddd0c3b7aa9d908477685e5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e3636393c4347484c4e5051525251504f4c494745403937322a251f170f090000000000000000000000000007131d28313a4145474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e362c22100600000a15202a343c4347484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4947433d342b20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8a97a8b2bdc8d4e1e2d6cabeb3aa968a7d706c7985929fabb8c5d2ded4c7bbafa499897d7066727f8c99abb5c0cbd7ded1c4b8ab9e91857869737f8c99a6b2bfd0dce7dfd2c6b9ac9f93867a6d6154473a2e211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c252d353a3e3f404040404040404040404040404040403e3c39332c2a2d32373b3c3f4143444545454442403d3a38342f2b26201a140d050000000000000000000000000000010c161f282f35393a4040404040404040404040404040404040403e3c39332c241a10000000040e18222a31373a3c4040404040404040404040404040404040403c3b37322b22190f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c566774818d9aa7b4c0ced9e5dfd3c6baaea298877b6e6575828f9ca8b5c2d1dcd7ccc0b5ab998c80736975828f9ca8b5c2d1dcdbcec2b5a89b8f827568717d8a97aab4bfcbd6e3e0d4c8bbafa49a8a7d7064574a3d3024190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2e31333333333333333333333333333333333331302d28221d20262b2e2f32353738383838373533302d2c29231d1b150e090300000000000000000000000000000000040d161d24292c2d33333333333333333333333333333333333331302d28221a12080000000006101820262b2e2f3333333333333333333333333333333333332f2e2b2720191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d687784909daab7c3d0ddeaded2c5b8ab9f9285786966727f8c99abb5bfcbd7ddd2c2b5a99c8f8276697885929eabb8c5d1ded7cbbfb4aa988c7f72656e7b8898a3aebac7d3e0e4d8ccc0b6ac9a8d807467564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a11181e222526262626262626262626262626262626262423211c1711151b1f212226282a2b2b2c2b2a282623201f1c18120f0a0400000000000000000000000000000000000000040c13181d20212626262626262626262626262626262626262423211c171008000000000000060e151b1f212226262626262626262626262626262626262623221f1b150f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939facb9c6d2dfe9dcd0c3b6a99d9083766a63707c8999a3aebbc7d3ded2c5b8ab9f9285796e7b8897a1adb9c6d2dfd3c7baaea398897c6f636d7986929facb8c5d2dfe8ddd2c3b7aa9d908377685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d1216181919191919191919191919191919191919171714110c050a0f121515191b1d1e1f1f1e1d1c19161413100c07010000000000000000000000000000000000000000000001070d111314191919191919191919191919191919191919171714110c050000000000000000040a0f1215151919191919191919191919191919191919191615130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a9aa4afbbc8d4e0e7dacdc1b4a79a8e817467606d7a86929facb9c5d2dfd3c6baaea298887c717e8b97a9b3bec9d5dfd2c5b9ac9f9286796d60667783909daab6c3d0dde9dfd2c6b9ac9f93867a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a0805000000030608090c0e1011121212110f0d0a070604000000000000000000000000000000000000000000000000000000010406070d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a0805000000000000000000000000030608090d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d090806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b556773808d9aacb6c0ccd8e4e5d8cbbeb2a5988b7f72655d677683909da9b6c3d0dcd6cabeb4aa988b7e74818e9aa7b4c1cfdadcd0c3b6a99d908376675c6875818e9ba8b4c1cedbe7e0d4c7bbafa4998a7d7063574a3d2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677783909daab6c3d2dde8e2d6cabeb3a996897d7063556774808d9aa7b3c0ced9dbd0c1b4a89b8e817784909daab7c3d0ddd9cdc0b3a69a8d8073675566727f8c99a5b2bfd0dbe7e3d7ccc0b5ab9a8d807367554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929facb9c5d2dfecdfd2c6b9ada197877a6e615764717d8a97a8b2bdc9d5ded1c4b7ab9e91847a86939facb9c6d2dfd5c9bdb2a8978a7d70645763707d8a96aab4becad6e2e8ddd2c3b6aa9d908377675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8999a3afbbc7d3e0ebded1c5b8ab9e928578685e54616e7a8796a0acb9c5d2ded2c5b9aca1968b7e8b99a4afbbc7d4ded2c5b9aca196877a6e6154616e7b8798a2aebac6d3dfecdfd2c5b9ac9f92867a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b556673808d99abb5c0cbd7e3e9dccfc3b6a99c9083766956525e687784919eaab7c4d1ddd5c9bdb2a89d9084909dabb5c0ccd7ded1c4b7ab9e918478685e53606c7985929fabb8c5d2deebe0d4c7bbafa399897d7063564a3d2f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c677683909ca9b6c3d1dce8e7dacdc0b4a79a8d8174675a4d566875818e9ba8b4c1d0dbdacec4b8aca0959095a0acbdc7d2dddbcec1b4a89b8e81756856505b657683909da9b6c3d0dce9e3d7cbc0b5ab998d807366554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929facb9c5d2dfece4d8cbbeb1a5988b7e7265584b5865727e8b98a9b3becad6e0d4c8bcb1a7a09da0a7b1bcd0d9e3d6cabfb4aa988b7e72655849536774818e9aa7b4c1cddae7e8dcd1c3b6a99d908376675d5145392c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8998a3aebac7d3e0ece1d5c9beb3a996897c6f63564955626f7b8897a2adbac6d3dfd9cec3b9b1acaaacb1b9c3cee2dfd3c6baaea298887c6f62554c5865727f8b98a5b2becfdae6ecdfd2c5b9ac9f92867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5466737f8c99aab4bfcbd7e3ebdfd2c6b9ada197877a6d61544753606c7985929fabb8c5d2dedfd5cbc3bcb8b7b8bcc3cbd5dfdfd2c5b8ac9f9285796d60534a5663707d8996a9b3bec9d5e2ede0d3c7bbaea399897d7063564a3d2f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c6676828f9ca9b5c2d1dce7ebded1c4b8ab9e918578685e5246505b6676828f9ca9b5c2d1dce8ddd5cec8c5c3c5c8ced5dde7dccfc2b6a99c8f8376665c504754616e7a8797a1adb9c6d2dfece3d7cbbfb5ab998c807366554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929facb8c5d2dfebe9dccfc2b6a99c8f827669564c414a5466737f8c99abb5c0cbd7e3e7dfd9d4d1d0d1d4d9dfe7e4d8ccc0b6ac998c807366544a46525e687885929eabb8c5d1deebe7dcd1c3b6a99c908376675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8998a2aebac6d3dfece6dacdc0b3a79a8d8074675a4d41495663707c8999a3afbbc7d3e0edeae4e0dedddee0e4eaede0d4c8bbafa49a8a7d7063574a414c566976838f9ca9b6c2cfdce9ecdfd2c5b9ac9f9286796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a5465727f8c98aab4bfcad6e2efe4d7cbbeb1a4988b7e7165584b3e4753606d7a86929facb9c5d2dfecf5f0edeaeaeaedf0f5ecdfd2c6b9ac9f93867a6d605447414e5a6774818d9aa7b4c0cddae7ece0d3c7baaea398897c706356493d2e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b6675828f9ca8b5c2d0dbe7ede1d5c9bdb2a895897c6f6256493c45515d677783909daab6c3d0dde9f6fcf9f7f6f7f9fcf7eaddd0c4b7aa9d918477685d52453f4b5865727e8b98a5b1becfdae6efe3d7cbbfb4aa998c7f7366544a4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7985929fabb8c5d2deebebdfd2c5b9ada196877a6d6054473a404b556774808d9aa7b3c0cedae5f1fdfffffffffffff4e7dacdc1b4a79a8e817467564c413c4956636f7c8996a9b2bdc9d5e1eee7dcd1c2b6a99c8f8276665c5144382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7c8897a2adbac6d3dfeceaded1c4b7ab9e918478685d5245393e4a5764717d8a97a8b2bdc9d5e1edfafffffffffffaeee2d6cabeb3a9988b7e7165584b3e3a4754606d7a8796a1adb9c5d2dfebebdfd2c5b8ac9f9285796d6053463a2d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a9b3becad6e2eee8dccfc2b5a99c8f827669564c41353b4754616e7b8796a1acb9c5d2deebf8fffffffffff8ecdfd2c6b9ada297887b6e6255483b3945525d687885919eabb8c4d1deebece0d3c6baaea298897c6f6356493c2e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d576875828e9ba8b5c1cfdbe6f2e6d9cdc0b3a69a8d8073675a4d402f3a46525e697884919eabb7c4d1deeaf8fffffffffff8ebded1c5b8ab9e9285796c6053463935414c566976828f9ca9b5c2cfdce8efe2d6cabfb4aa998c7f7266544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f697885919eabb8c4d1deebf0e4d8ccc0b6ac978b7e7164584b3e3136424d576875818e9ba8b4c1d0dbe7f2fefffffffff5e8dbcfc2b5a89c8f8275655b5044372f404d5a6773808d9aa6b3c0d2dde8f3e7dbd0c2b5a99c8f8276665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8897a1adb9c6d2dfebede0d4c8bbafa49a887c6f6255493c2f303f4b5865727e8b98aab4becad6e2eefbfefefefcefe3d7cbc0b5ab998c7f736653493f33313e4b5864717e8b97acb6c0ccd8e4f0ebded2c5b8ab9f9285796d6053463a2d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a9b3bec9d5e1eeecdfd2c6b9ac9f93867a6d6053473a2d2f3c4955626f7c8898a2aebac6d3dfecf2f2f2f2f2ede0d4c7bbafa399897c706356493d2d2f3c4956626f7c899aa4afbbc8d4e0edecdfd3c6baaea298897c6f6256493c2d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576875818e9ba8b4c1cfdae6e5e5ddd1c4b7aa9e918477675d5145392c2d394653606c7985929fabb8c5d2dee5e5e5e5e5e5e5dfd2c5b9ac9f92867a6d6053473a2d2d3a4753606d7a86939facb9c6d2dfe5e5e2d6cabeb4aa988c7f7265544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697884919eabb7c4d1d8d8d8d8d8cfc2b5a89c8f827569554b4035292b3844505b6676828f9ca9b5c2d1dcd8d8d8d8d8d8d8d8d0c3b6aa9d908377675d5145392c2c3945515d677784919eaab7c4d1d8d8d8d8dbd0c2b5a89c8f8275665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8796a1acb9c5cbcbcbcbcbcbcbc0b3a6998d8073665a4d402f2428333f4a5466737f8c99abb5c0cbcbcbcbcbcbcbcbcbcbcbc0b4a79a8d817467554b4035292935404b556975828f9ca8b5c2cbcbcbcbcbcbcbc5b8ab9f9285796c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a8b2bdbfbfbfbfbfbfbfbfc0b5ab978a7e7164574b3e3124222d3d4a5663707d8999a3afbbbfbfbfbfbfbfbfbfbfbfbfbeb2a9978a7e7164574b3e2f24242f404d5a6673808d99a6b3bfbfbfbfbfbfbfbfbfbaada297887c6f6255493c2d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c566774818e9aa7b2b2b2b2b2b2b2b2b2b2b2afa399887c6f6255483c2f22202d3a4753606d7a86929facb2b2b2b2b2b2b2b2b2b2b2b2b2ada197877b6e6154483b2e2124313e4b5764717e8a97abb5b2b2b2b2b2b2b2b2b2b2b3a9988b7f726553493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687784919da5a5a5a5a5a5a5a5a5a5a5a5a59f9286796d6053463a2d20202c3945515d677783909da5a5a5a5a5a5a5a5a5a5a5a5a5a5a59e918578695e53463a2d21222f3c4855626f7b8899a3a5a5a5a5a5a5a5a5a5a5a5a5a59b8f8275655b5044372b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8796989898989898989898989898989898918477675c5145382c1f1d2935404b556774808d98989898989898989898989898989898988e827568574d42362a1e202d3a4653606d7986929898989898989898989898989898989285786c605346392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c827568554b4034281c18242f3e4b5764717e8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f7265594c3f31251a1f2c3845515c6677838c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d706356493d2e231814212e3a4754616d7a7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b6e6155483b2e22151c2834404b5464707e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3b4854606b6f727272727272727272727272727272727272706b6054483b2f1d1213202d3946525e686d727272727272727272727272727272727272726e695f53463a2d211418232e394955616c707272727272727272727272727272727272726e6a5f53473a2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2c38434f5960636565656565656565656565656565656565656360594f44382c200b111d2a36414c565e6165656565656565656565656565656565656565615f574d42362a1e12121d2d3944505a6164656565656565656565656565656565656565625f574e42372b1e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d474f545659595959595959595959595959595959595956544f473d32271b100d1925303a444c52545959595959595959595959595959595959595955534d453b31261a0e101c28333e4850555759595959595959595959595959595959595955534e453c31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212b343d4348494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4948443d352b21160b08131e28323a4146474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4846423b33291f14090b17222c363e44494a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847423c332a201509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222b32383b3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3b38322b23190f04020c1620283036393a3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b3a36312921170d0305101a242c33393c3d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b3a37312a21180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101921272c2f30323232323232323232323232323232323232302f2c27211911070000050e161e252a2d2e323232323232323232323232323232323232322e2d2a261f170f06000008121a22282d30313232323232323232323232323232323232322f2e2b2620180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f22232626262626262626262626262626262626262322201b160f0700000000050c13191d20212626262626262626262626262626262626262622211e1a140d06000000000810171c20232426262626262626262626262626262626262622211e1a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f131516191919191919191919191919191919191919161613100b0400000000000002080d111314191919191919191919191919191919191919191514120e0903000000000000050b101416171919191919191919191919191919191919191514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030709090c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a09070400000000000000000000010507070c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c080705020000000000000000000004080a0a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c080806020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} - m_Name: Poppins-ExtraBold SDF - m_EditorClassIdentifier: - m_Version: 1.1.0 - m_FaceInfo: - m_FaceIndex: 0 - m_FamilyName: Poppins - m_StyleName: ExtraBold - m_PointSize: 90 - m_Scale: 1 - m_UnitsPerEM: 1000 - m_LineHeight: 135 - m_AscentLine: 94.5 - m_CapLine: 64 - m_MeanLine: 51 - m_Baseline: 0 - m_DescentLine: -31.500002 - m_SuperscriptOffset: 94.5 - m_SuperscriptSize: 0.5 - m_SubscriptOffset: -31.500002 - m_SubscriptSize: 0.5 - m_UnderlineOffset: -9 - m_UnderlineThickness: 4.5 - m_StrikethroughOffset: 20.4 - m_StrikethroughThickness: 4.5 - m_TabWidth: 17 - m_Material: {fileID: -3558660214557783719} - m_SourceFontFileGUID: 7a4f40e83d935d54bacd49e923f1a0c8 - m_CreationSettings: - sourceFontFileName: - sourceFontFileGUID: 7a4f40e83d935d54bacd49e923f1a0c8 - faceIndex: 0 - pointSizeSamplingMode: 0 - pointSize: 90 - padding: 9 - paddingMode: 0 - packingMode: 0 - atlasWidth: 1024 - atlasHeight: 1024 - characterSetSelectionMode: 7 - characterSequence: - referencedFontAssetGUID: - referencedTextAssetGUID: - fontStyle: 0 - fontStyleModifier: 0 - renderMode: 4165 - includeFontFeatures: 0 - m_SourceFontFile: {fileID: 12800000, guid: 7a4f40e83d935d54bacd49e923f1a0c8, type: 3} - m_SourceFontFilePath: - m_AtlasPopulationMode: 1 - InternalDynamicOS: 0 - m_GlyphTable: - - m_Index: 3 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 17.1875 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 662 - m_Metrics: - m_Width: 79.390625 - m_Height: 66.59375 - m_HorizontalBearingX: 1.34375 - m_HorizontalBearingY: 66.59375 - m_HorizontalAdvance: 82.703125 - m_GlyphRect: - m_X: 247 - m_Y: 80 - m_Width: 80 - m_Height: 67 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 675 - m_Metrics: - m_Width: 52.28125 - m_Height: 66.78125 - m_HorizontalBearingX: 3.515625 - m_HorizontalBearingY: 67.140625 - m_HorizontalAdvance: 59.125 - m_GlyphRect: - m_X: 175 - m_Y: 10 - m_Width: 53 - m_Height: 68 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 676 - m_Metrics: - m_Width: 27.71875 - m_Height: 65.796875 - m_HorizontalBearingX: 1.625 - m_HorizontalBearingY: 65.796875 - m_HorizontalAdvance: 34.828125 - m_GlyphRect: - m_X: 175 - m_Y: 97 - m_Width: 29 - m_Height: 66 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 677 - m_Metrics: - m_Width: 46.078125 - m_Height: 66.234375 - m_HorizontalBearingX: 2.796875 - m_HorizontalBearingY: 67.140625 - m_HorizontalAdvance: 51.203125 - m_GlyphRect: - m_X: 923 - m_Y: 93 - m_Width: 47 - m_Height: 68 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 678 - m_Metrics: - m_Width: 46.53125 - m_Height: 67.78125 - m_HorizontalBearingX: 3.59375 - m_HorizontalBearingY: 67.234375 - m_HorizontalAdvance: 54.90625 - m_GlyphRect: - m_X: 421 - m_Y: 95 - m_Width: 48 - m_Height: 69 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 679 - m_Metrics: - m_Width: 53.90625 - m_Height: 64.796875 - m_HorizontalBearingX: 4.59375 - m_HorizontalBearingY: 64.796875 - m_HorizontalAdvance: 62.1875 - m_GlyphRect: - m_X: 560 - m_Y: 93 - m_Width: 55 - m_Height: 65 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 680 - m_Metrics: - m_Width: 46.96875 - m_Height: 65.796875 - m_HorizontalBearingX: 8.015625 - m_HorizontalBearingY: 65.796875 - m_HorizontalAdvance: 58.953125 - m_GlyphRect: - m_X: 488 - m_Y: 95 - m_Width: 47 - m_Height: 66 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 681 - m_Metrics: - m_Width: 47.703125 - m_Height: 67.5 - m_HorizontalBearingX: 5.125 - m_HorizontalBearingY: 67.046875 - m_HorizontalAdvance: 57.15625 - m_GlyphRect: - m_X: 346 - m_Y: 164 - m_Width: 48 - m_Height: 69 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 682 - m_Metrics: - m_Width: 43.5625 - m_Height: 65.703125 - m_HorizontalBearingX: 2.0625 - m_HorizontalBearingY: 65.703125 - m_HorizontalAdvance: 47.0625 - m_GlyphRect: - m_X: 554 - m_Y: 177 - m_Width: 44 - m_Height: 66 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 683 - m_Metrics: - m_Width: 49.5 - m_Height: 68.3125 - m_HorizontalBearingX: 4.59375 - m_HorizontalBearingY: 67.140625 - m_HorizontalAdvance: 58.765625 - m_GlyphRect: - m_X: 223 - m_Y: 166 - m_Width: 51 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 684 - m_Metrics: - m_Width: 47.515625 - m_Height: 67.6875 - m_HorizontalBearingX: 3.6875 - m_HorizontalBearingY: 67.234375 - m_HorizontalAdvance: 54.546875 - m_GlyphRect: - m_X: 897 - m_Y: 180 - m_Width: 49 - m_Height: 69 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 692 - m_Metrics: - m_Width: 66.515625 - m_Height: 63.453125 - m_HorizontalBearingX: 0.71875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 67.953125 - m_GlyphRect: - m_X: 636 - m_Y: 10 - m_Width: 68 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 693 - m_Metrics: - m_Width: 52.640625 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 60.390625 - m_GlyphRect: - m_X: 413 - m_Y: 183 - m_Width: 53 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 694 - m_Metrics: - m_Width: 62.015625 - m_Height: 64.53125 - m_HorizontalBearingX: 2.875 - m_HorizontalBearingY: 64.078125 - m_HorizontalAdvance: 68.21875 - m_GlyphRect: - m_X: 81 - m_Y: 130 - m_Width: 63 - m_Height: 66 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 695 - m_Metrics: - m_Width: 58.21875 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 66.15625 - m_GlyphRect: - m_X: 617 - m_Y: 248 - m_Width: 59 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 696 - m_Metrics: - m_Width: 40.578125 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 49.3125 - m_GlyphRect: - m_X: 723 - m_Y: 10 - m_Width: 41 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 697 - m_Metrics: - m_Width: 43.015625 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 50.484375 - m_GlyphRect: - m_X: 488 - m_Y: 180 - m_Width: 44 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 698 - m_Metrics: - m_Width: 62.375 - m_Height: 64.53125 - m_HorizontalBearingX: 2.875 - m_HorizontalBearingY: 64.078125 - m_HorizontalAdvance: 68.125 - m_GlyphRect: - m_X: 634 - m_Y: 93 - m_Width: 64 - m_Height: 66 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 699 - m_Metrics: - m_Width: 56.78125 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 66.875 - m_GlyphRect: - m_X: 560 - m_Y: 10 - m_Width: 57 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 700 - m_Metrics: - m_Width: 17.640625 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 27.71875 - m_GlyphRect: - m_X: 991 - m_Y: 10 - m_Width: 18 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 703 - m_Metrics: - m_Width: 37.34375 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 44.1875 - m_GlyphRect: - m_X: 852 - m_Y: 10 - m_Width: 38 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 704 - m_Metrics: - m_Width: 74.0625 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 84.15625 - m_GlyphRect: - m_X: 717 - m_Y: 95 - m_Width: 75 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 705 - m_Metrics: - m_Width: 58.765625 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 68.84375 - m_GlyphRect: - m_X: 97 - m_Y: 47 - m_Width: 59 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 706 - m_Metrics: - m_Width: 65.078125 - m_Height: 65.0625 - m_HorizontalBearingX: 2.875 - m_HorizontalBearingY: 64.4375 - m_HorizontalAdvance: 70.828125 - m_GlyphRect: - m_X: 475 - m_Y: 10 - m_Width: 66 - m_Height: 66 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 707 - m_Metrics: - m_Width: 50.125 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 57.234375 - m_GlyphRect: - m_X: 10 - m_Y: 203 - m_Width: 51 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 708 - m_Metrics: - m_Width: 66.6875 - m_Height: 75.0625 - m_HorizontalBearingX: 2.875 - m_HorizontalBearingY: 64.4375 - m_HorizontalAdvance: 70.921875 - m_GlyphRect: - m_X: 723 - m_Y: 178 - m_Width: 68 - m_Height: 76 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 709 - m_Metrics: - m_Width: 51.828125 - m_Height: 63.453125 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 59.484375 - m_GlyphRect: - m_X: 852 - m_Y: 93 - m_Width: 52 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 710 - m_Metrics: - m_Width: 49.5 - m_Height: 65.0625 - m_HorizontalBearingX: 3.15625 - m_HorizontalBearingY: 64.4375 - m_HorizontalAdvance: 55.796875 - m_GlyphRect: - m_X: 783 - m_Y: 10 - m_Width: 50 - m_Height: 66 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 711 - m_Metrics: - m_Width: 51.296875 - m_Height: 63.453125 - m_HorizontalBearingX: 1.53125 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 54.359375 - m_GlyphRect: - m_X: 10 - m_Y: 120 - m_Width: 52 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 712 - m_Metrics: - m_Width: 54.640625 - m_Height: 64.078125 - m_HorizontalBearingX: 4.765625 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 64.078125 - m_GlyphRect: - m_X: 346 - m_Y: 80 - m_Width: 56 - m_Height: 65 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 713 - m_Metrics: - m_Width: 66.421875 - m_Height: 63.453125 - m_HorizontalBearingX: 0.359375 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 67.234375 - m_GlyphRect: - m_X: 811 - m_Y: 176 - m_Width: 67 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 715 - m_Metrics: - m_Width: 64.4375 - m_Height: 63.453125 - m_HorizontalBearingX: 1.078125 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 66.515625 - m_GlyphRect: - m_X: 80 - m_Y: 215 - m_Width: 65 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 716 - m_Metrics: - m_Width: 62.375 - m_Height: 63.453125 - m_HorizontalBearingX: 0.359375 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 63.09375 - m_GlyphRect: - m_X: 909 - m_Y: 10 - m_Width: 63 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 722 - m_Metrics: - m_Width: 58.3125 - m_Height: 17.09375 - m_HorizontalBearingX: 6.03125 - m_HorizontalBearingY: -3.78125 - m_HorizontalAdvance: 69.484375 - m_GlyphRect: - m_X: 97 - m_Y: 10 - m_Width: 59 - m_Height: 18 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 724 - m_Metrics: - m_Width: 54 - m_Height: 51.75 - m_HorizontalBearingX: 2.15625 - m_HorizontalBearingY: 51.125 - m_HorizontalAdvance: 61.203125 - m_GlyphRect: - m_X: 695 - m_Y: 273 - m_Width: 55 - m_Height: 53 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 728 - m_Metrics: - m_Width: 51.125 - m_Height: 51.75 - m_HorizontalBearingX: 2.15625 - m_HorizontalBearingY: 51.125 - m_HorizontalAdvance: 55.4375 - m_GlyphRect: - m_X: 10 - m_Y: 48 - m_Width: 52 - m_Height: 53 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 732 - m_Metrics: - m_Width: 20.609375 - m_Height: 73.34375 - m_HorizontalBearingX: 3.59375 - m_HorizontalBearingY: 73.34375 - m_HorizontalAdvance: 27.71875 - m_GlyphRect: - m_X: 365 - m_Y: 252 - m_Width: 22 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 735 - m_Metrics: - m_Width: 17.640625 - m_Height: 66.59375 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 66.59375 - m_HorizontalAdvance: 27.71875 - m_GlyphRect: - m_X: 989 - m_Y: 93 - m_Width: 18 - m_Height: 67 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 736 - m_Metrics: - m_Width: 86.390625 - m_Height: 50.9375 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 50.9375 - m_HorizontalAdvance: 96.03125 - m_GlyphRect: - m_X: 617 - m_Y: 178 - m_Width: 87 - m_Height: 51 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 737 - m_Metrics: - m_Width: 52.015625 - m_Height: 50.9375 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 50.9375 - m_HorizontalAdvance: 61.734375 - m_GlyphRect: - m_X: 10 - m_Y: 298 - m_Width: 53 - m_Height: 51 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 738 - m_Metrics: - m_Width: 52.921875 - m_Height: 51.75 - m_HorizontalBearingX: 2.15625 - m_HorizontalBearingY: 51.125 - m_HorizontalAdvance: 57.234375 - m_GlyphRect: - m_X: 164 - m_Y: 255 - m_Width: 54 - m_Height: 53 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 741 - m_Metrics: - m_Width: 33.921875 - m_Height: 50.9375 - m_HorizontalBearingX: 5.046875 - m_HorizontalBearingY: 50.9375 - m_HorizontalAdvance: 40.234375 - m_GlyphRect: - m_X: 293 - m_Y: 166 - m_Width: 34 - m_Height: 51 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 742 - m_Metrics: - m_Width: 45.078125 - m_Height: 51.75 - m_HorizontalBearingX: 2.4375 - m_HorizontalBearingY: 51.125 - m_HorizontalAdvance: 51.125 - m_GlyphRect: - m_X: 965 - m_Y: 180 - m_Width: 46 - m_Height: 53 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 743 - m_Metrics: - m_Width: 33.203125 - m_Height: 62.734375 - m_HorizontalBearingX: 1.625 - m_HorizontalBearingY: 62.734375 - m_HorizontalAdvance: 37.890625 - m_GlyphRect: - m_X: 422 - m_Y: 10 - m_Width: 34 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 744 - m_Metrics: - m_Width: 52.015625 - m_Height: 50.9375 - m_HorizontalBearingX: 4.6875 - m_HorizontalBearingY: 50.484375 - m_HorizontalAdvance: 61.734375 - m_GlyphRect: - m_X: 293 - m_Y: 252 - m_Width: 53 - m_Height: 52 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 745 - m_Metrics: - m_Width: 56.703125 - m_Height: 50.484375 - m_HorizontalBearingX: 0.8125 - m_HorizontalBearingY: 50.484375 - m_HorizontalAdvance: 58.40625 - m_GlyphRect: - m_X: 82 - m_Y: 298 - m_Width: 58 - m_Height: 51 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 746 - m_Metrics: - m_Width: 79.46875 - m_Height: 50.484375 - m_HorizontalBearingX: 0.1875 - m_HorizontalBearingY: 50.484375 - m_HorizontalAdvance: 79.65625 - m_GlyphRect: - m_X: 247 - m_Y: 10 - m_Width: 80 - m_Height: 51 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 747 - m_Metrics: - m_Width: 56.15625 - m_Height: 50.484375 - m_HorizontalBearingX: 0.1875 - m_HorizontalBearingY: 50.484375 - m_HorizontalAdvance: 56.515625 - m_GlyphRect: - m_X: 346 - m_Y: 10 - m_Width: 57 - m_Height: 51 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 748 - m_Metrics: - m_Width: 59.859375 - m_Height: 74.515625 - m_HorizontalBearingX: -0.453125 - m_HorizontalBearingY: 50.484375 - m_HorizontalAdvance: 58.953125 - m_GlyphRect: - m_X: 810 - m_Y: 259 - m_Width: 61 - m_Height: 76 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 1000 - m_Metrics: - m_Width: 66.953125 - m_Height: 18.265625 - m_HorizontalBearingX: 3.234375 - m_HorizontalBearingY: 17.546875 - m_HorizontalAdvance: 73.34375 - m_GlyphRect: - m_X: 10 - m_Y: 10 - m_Width: 68 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 714 - m_Metrics: - m_Width: 91.96875 - m_Height: 63.453125 - m_HorizontalBearingX: 2.4375 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 96.84375 - m_GlyphRect: - m_X: 237 - m_Y: 323 - m_Width: 93 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - - m_Index: 717 - m_Metrics: - m_Width: 46.171875 - m_Height: 63.453125 - m_HorizontalBearingX: 4.5 - m_HorizontalBearingY: 63.453125 - m_HorizontalAdvance: 55.171875 - m_GlyphRect: - m_X: 551 - m_Y: 262 - m_Width: 47 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - m_CharacterTable: - - m_ElementType: 1 - m_Unicode: 32 - m_GlyphIndex: 3 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 35 - m_GlyphIndex: 662 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 48 - m_GlyphIndex: 675 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 49 - m_GlyphIndex: 676 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 50 - m_GlyphIndex: 677 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 51 - m_GlyphIndex: 678 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 52 - m_GlyphIndex: 679 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 53 - m_GlyphIndex: 680 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 54 - m_GlyphIndex: 681 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 55 - m_GlyphIndex: 682 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 56 - m_GlyphIndex: 683 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 57 - m_GlyphIndex: 684 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 65 - m_GlyphIndex: 692 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 66 - m_GlyphIndex: 693 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 67 - m_GlyphIndex: 694 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 68 - m_GlyphIndex: 695 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 69 - m_GlyphIndex: 696 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 70 - m_GlyphIndex: 697 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 71 - m_GlyphIndex: 698 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 72 - m_GlyphIndex: 699 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 73 - m_GlyphIndex: 700 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 76 - m_GlyphIndex: 703 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 77 - m_GlyphIndex: 704 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 78 - m_GlyphIndex: 705 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 79 - m_GlyphIndex: 706 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 80 - m_GlyphIndex: 707 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 81 - m_GlyphIndex: 708 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 82 - m_GlyphIndex: 709 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 83 - m_GlyphIndex: 710 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 84 - m_GlyphIndex: 711 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 85 - m_GlyphIndex: 712 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 86 - m_GlyphIndex: 713 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 88 - m_GlyphIndex: 715 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 89 - m_GlyphIndex: 716 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 95 - m_GlyphIndex: 722 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 97 - m_GlyphIndex: 724 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 101 - m_GlyphIndex: 728 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 105 - m_GlyphIndex: 732 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 108 - m_GlyphIndex: 735 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 109 - m_GlyphIndex: 736 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 110 - m_GlyphIndex: 737 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 111 - m_GlyphIndex: 738 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 114 - m_GlyphIndex: 741 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 115 - m_GlyphIndex: 742 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 116 - m_GlyphIndex: 743 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 117 - m_GlyphIndex: 744 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 118 - m_GlyphIndex: 745 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 119 - m_GlyphIndex: 746 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 120 - m_GlyphIndex: 747 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 121 - m_GlyphIndex: 748 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8230 - m_GlyphIndex: 1000 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 87 - m_GlyphIndex: 714 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 90 - m_GlyphIndex: 717 - m_Scale: 1 - m_AtlasTextures: - - {fileID: -302379094496337422} - m_AtlasTextureIndex: 0 - m_IsMultiAtlasTexturesEnabled: 0 - m_GetFontFeatures: 1 - m_ClearDynamicDataOnBuild: 0 - m_AtlasWidth: 1024 - m_AtlasHeight: 1024 - m_AtlasPadding: 9 - m_AtlasRenderMode: 4165 - m_UsedGlyphRects: - - m_X: 0 - m_Y: 0 - m_Width: 87 - m_Height: 38 - - m_X: 87 - m_Y: 0 - m_Width: 78 - m_Height: 37 - - m_X: 165 - m_Y: 0 - m_Width: 72 - m_Height: 87 - - m_X: 87 - m_Y: 37 - m_Width: 78 - m_Height: 83 - - m_X: 0 - m_Y: 38 - m_Width: 71 - m_Height: 72 - - m_X: 237 - m_Y: 0 - m_Width: 99 - m_Height: 70 - - m_X: 0 - m_Y: 110 - m_Width: 71 - m_Height: 83 - - m_X: 336 - m_Y: 0 - m_Width: 76 - m_Height: 70 - - m_X: 412 - m_Y: 0 - m_Width: 53 - m_Height: 82 - - m_X: 237 - m_Y: 70 - m_Width: 99 - m_Height: 86 - - m_X: 165 - m_Y: 87 - m_Width: 48 - m_Height: 85 - - m_X: 71 - m_Y: 120 - m_Width: 82 - m_Height: 85 - - m_X: 465 - m_Y: 0 - m_Width: 85 - m_Height: 85 - - m_X: 336 - m_Y: 70 - m_Width: 75 - m_Height: 84 - - m_X: 550 - m_Y: 0 - m_Width: 76 - m_Height: 83 - - m_X: 0 - m_Y: 193 - m_Width: 70 - m_Height: 83 - - m_X: 626 - m_Y: 0 - m_Width: 87 - m_Height: 83 - - m_X: 713 - m_Y: 0 - m_Width: 60 - m_Height: 83 - - m_X: 773 - m_Y: 0 - m_Width: 69 - m_Height: 85 - - m_X: 842 - m_Y: 0 - m_Width: 57 - m_Height: 83 - - m_X: 899 - m_Y: 0 - m_Width: 82 - m_Height: 83 - - m_X: 842 - m_Y: 83 - m_Width: 71 - m_Height: 83 - - m_X: 913 - m_Y: 83 - m_Width: 66 - m_Height: 87 - - m_X: 550 - m_Y: 83 - m_Width: 74 - m_Height: 84 - - m_X: 411 - m_Y: 85 - m_Width: 67 - m_Height: 88 - - m_X: 624 - m_Y: 83 - m_Width: 83 - m_Height: 85 - - m_X: 707 - m_Y: 85 - m_Width: 94 - m_Height: 83 - - m_X: 801 - m_Y: 166 - m_Width: 86 - m_Height: 83 - - m_X: 478 - m_Y: 85 - m_Width: 66 - m_Height: 85 - - m_X: 336 - m_Y: 154 - m_Width: 67 - m_Height: 88 - - m_X: 544 - m_Y: 167 - m_Width: 63 - m_Height: 85 - - m_X: 213 - m_Y: 156 - m_Width: 70 - m_Height: 89 - - m_X: 887 - m_Y: 170 - m_Width: 68 - m_Height: 88 - - m_X: 981 - m_Y: 0 - m_Width: 37 - m_Height: 83 - - m_X: 478 - m_Y: 170 - m_Width: 63 - m_Height: 83 - - m_X: 70 - m_Y: 205 - m_Width: 84 - m_Height: 83 - - m_X: 403 - m_Y: 173 - m_Width: 72 - m_Height: 83 - - m_X: 283 - m_Y: 242 - m_Width: 72 - m_Height: 71 - - m_X: 154 - m_Y: 245 - m_Width: 73 - m_Height: 72 - - m_X: 0 - m_Y: 288 - m_Width: 72 - m_Height: 70 - - m_X: 955 - m_Y: 170 - m_Width: 65 - m_Height: 72 - - m_X: 607 - m_Y: 168 - m_Width: 106 - m_Height: 70 - - m_X: 713 - m_Y: 168 - m_Width: 87 - m_Height: 95 - - m_X: 355 - m_Y: 242 - m_Width: 41 - m_Height: 93 - - m_X: 72 - m_Y: 288 - m_Width: 77 - m_Height: 70 - - m_X: 800 - m_Y: 249 - m_Width: 80 - m_Height: 95 - - m_X: 607 - m_Y: 238 - m_Width: 78 - m_Height: 83 - - m_X: 283 - m_Y: 156 - m_Width: 53 - m_Height: 70 - - m_X: 685 - m_Y: 263 - m_Width: 74 - m_Height: 72 - - m_X: 979 - m_Y: 83 - m_Width: 37 - m_Height: 86 - - m_X: 227 - m_Y: 313 - m_Width: 112 - m_Height: 83 - - m_X: 541 - m_Y: 252 - m_Width: 66 - m_Height: 83 - m_FreeGlyphRects: - - m_X: 71 - m_Y: 38 - m_Width: 16 - m_Height: 82 - - m_X: 411 - m_Y: 70 - m_Width: 1 - m_Height: 15 - - m_X: 411 - m_Y: 82 - m_Width: 54 - m_Height: 3 - - m_X: 707 - m_Y: 83 - m_Width: 66 - m_Height: 2 - - m_X: 801 - m_Y: 85 - m_Width: 41 - m_Height: 81 - - m_X: 544 - m_Y: 85 - m_Width: 6 - m_Height: 82 - - m_X: 213 - m_Y: 87 - m_Width: 24 - m_Height: 69 - - m_X: 887 - m_Y: 166 - m_Width: 26 - m_Height: 4 - - m_X: 153 - m_Y: 120 - m_Width: 12 - m_Height: 85 - - m_X: 70 - m_Y: 193 - m_Width: 1 - m_Height: 12 - - m_X: 153 - m_Y: 172 - m_Width: 60 - m_Height: 33 - - m_X: 403 - m_Y: 154 - m_Width: 8 - m_Height: 19 - - m_X: 475 - m_Y: 173 - m_Width: 3 - m_Height: 850 - - m_X: 154 - m_Y: 120 - m_Width: 11 - m_Height: 125 - - m_X: 154 - m_Y: 172 - m_Width: 59 - m_Height: 73 - - m_X: 0 - m_Y: 276 - m_Width: 70 - m_Height: 12 - - m_X: 955 - m_Y: 242 - m_Width: 68 - m_Height: 781 - - m_X: 1018 - m_Y: 0 - m_Width: 5 - m_Height: 170 - - m_X: 1020 - m_Y: 0 - m_Width: 3 - m_Height: 1023 - - m_X: 607 - m_Y: 167 - m_Width: 17 - m_Height: 1 - - m_X: 396 - m_Y: 242 - m_Width: 7 - m_Height: 781 - - m_X: 149 - m_Y: 288 - m_Width: 5 - m_Height: 735 - - m_X: 880 - m_Y: 249 - m_Width: 7 - m_Height: 774 - - m_X: 880 - m_Y: 258 - m_Width: 143 - m_Height: 765 - - m_X: 800 - m_Y: 168 - m_Width: 1 - m_Height: 81 - - m_X: 283 - m_Y: 226 - m_Width: 53 - m_Height: 16 - - m_X: 685 - m_Y: 238 - m_Width: 28 - m_Height: 25 - - m_X: 759 - m_Y: 263 - m_Width: 41 - m_Height: 760 - - m_X: 979 - m_Y: 169 - m_Width: 44 - m_Height: 1 - - m_X: 1016 - m_Y: 83 - m_Width: 7 - m_Height: 87 - - m_X: 227 - m_Y: 245 - m_Width: 56 - m_Height: 68 - - m_X: 0 - m_Y: 396 - m_Width: 1023 - m_Height: 627 - - m_X: 0 - m_Y: 358 - m_Width: 227 - m_Height: 665 - - m_X: 339 - m_Y: 313 - m_Width: 16 - m_Height: 710 - - m_X: 149 - m_Y: 317 - m_Width: 78 - m_Height: 706 - - m_X: 339 - m_Y: 344 - m_Width: 684 - m_Height: 679 - - m_X: 339 - m_Y: 335 - m_Width: 461 - m_Height: 688 - - m_X: 541 - m_Y: 170 - m_Width: 3 - m_Height: 82 - - m_X: 475 - m_Y: 253 - m_Width: 66 - m_Height: 770 - - m_X: 396 - m_Y: 256 - m_Width: 145 - m_Height: 767 - - m_X: 607 - m_Y: 321 - m_Width: 78 - m_Height: 702 - m_FontFeatureTable: - m_MultipleSubstitutionRecords: [] - m_LigatureSubstitutionRecords: [] - m_GlyphPairAdjustmentRecords: [] - m_MarkToBaseAdjustmentRecords: [] - m_MarkToMarkAdjustmentRecords: [] - m_ShouldReimportFontFeatures: 0 - m_FallbackFontAssetTable: [] - m_FontWeightTable: - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - - regularTypeface: {fileID: 0} - italicTypeface: {fileID: 0} - fontWeights: [] - normalStyle: 0 - normalSpacingOffset: 0 - boldStyle: 0.75 - boldSpacing: 7 - italicStyle: 35 - tabSize: 10 - m_fontInfo: - Name: - PointSize: 0 - Scale: 0 - CharacterCount: 0 - LineHeight: 0 - Baseline: 0 - Ascender: 0 - CapHeight: 0 - Descender: 0 - CenterLine: 0 - SuperscriptOffset: 0 - SubscriptOffset: 0 - SubSize: 0 - Underline: 0 - UnderlineThickness: 0 - strikethrough: 0 - strikethroughThickness: 0 - TabWidth: 0 - Padding: 0 - AtlasWidth: 0 - AtlasHeight: 0 - m_glyphInfoList: [] - m_KerningTable: - kerningPairs: [] - fallbackFontAssets: [] - atlas: {fileID: 0} diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold.ttf b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold.ttf deleted file mode 100644 index df70936..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold.ttf and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold.ttf.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold.ttf.meta deleted file mode 100644 index ec30795..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Fonts/Poppins/Poppins-ExtraBold.ttf.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 7a4f40e83d935d54bacd49e923f1a0c8 -TrueTypeFontImporter: - externalObjects: {} - serializedVersion: 4 - fontSize: 16 - forceTextureCase: -2 - characterSpacing: 0 - characterPadding: 1 - includeFontData: 1 - fontNames: - - Poppins - fallbackFontReferences: - - {fileID: 12800000, guid: 1470e8b5e3fb5a845a1ef195f3153981, type: 3} - - {fileID: 12800000, guid: d6096043cefb70244b563cac99ebba53, type: 3} - - {fileID: 12800000, guid: 49a98faf5f4057549bc790e989c41e96, type: 3} - - {fileID: 12800000, guid: 993159e388eca474aa46f1f8f3b6bd2b, type: 3} - - {fileID: 12800000, guid: 55bcc2b1fb1316743ae1148a5b6b1c2d, type: 3} - - {fileID: 12800000, guid: a7b7c58fa4e0b3348b8815442690c1ca, type: 3} - - {fileID: 12800000, guid: b458a0ec99a8ac44ca856a1afbd8d6d7, type: 3} - - {fileID: 12800000, guid: 529ff81a5b9bae84da70a810c1c02e2c, type: 3} - - {fileID: 12800000, guid: 2a334172a629ca4469f19be1f05cfac5, type: 3} - - {fileID: 12800000, guid: 22654d696ac364349b184b720aedae99, type: 3} - - {fileID: 12800000, guid: 940f758662b4cca4a81c28511cda3038, type: 3} - - {fileID: 12800000, guid: 7953c14cb1e7adb418f46cca80e68c10, type: 3} - - {fileID: 12800000, guid: d4f9cf3f05365e8488e11dabfef5288d, type: 3} - - {fileID: 12800000, guid: 3738ee413dbcfd648ae01d62ed242b52, type: 3} - - {fileID: 12800000, guid: 243b02d51de58eb4b8ba63f12d424233, type: 3} - customCharacters: - fontRenderingMode: 0 - ascentCalculationMode: 1 - useLegacyBoundsCalculation: 0 - shouldRoundAdvanceValue: 1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials.meta deleted file mode 100644 index f6ad9af..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d39bf6b221d61f947b0f6e1c00893930 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue Emissive.mat b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue Emissive.mat deleted file mode 100644 index 53eec6e..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue Emissive.mat +++ /dev/null @@ -1,140 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Blue Emissive - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION - m_InvalidKeywords: [] - m_LightmapFlags: 2 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 0.42352942, g: 0.5921569, b: 0.8117647, a: 1} - - _Color: {r: 0.4235294, g: 0.5921568, b: 0.8117647, a: 1} - - _EmissionColor: {r: 0.59896094, g: 1.3832405, b: 2.1185474, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] - m_AllowLocking: 1 ---- !u!114 &8144558003598938912 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue Emissive.mat.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue Emissive.mat.meta deleted file mode 100644 index ce90913..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue Emissive.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9ffac03b6178e044d89eabb79d170881 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue.mat b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue.mat deleted file mode 100644 index 0d24569..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue.mat +++ /dev/null @@ -1,138 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Blue - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _UVSec: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 0.42352942, g: 0.5921569, b: 0.8117647, a: 1} - - _Color: {r: 0.4235294, g: 0.5921568, b: 0.8117647, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] - m_AllowLocking: 1 ---- !u!114 &2634680133181071804 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue.mat.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue.mat.meta deleted file mode 100644 index 4f5c20d..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Materials/Blue.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 49ed5275dc212294dabf1045619e38d8 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles.meta deleted file mode 100644 index 71d7a58..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1e44af19bd5ccaa4f86ea6e540e1c972 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Post-processing Profile.asset b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Post-processing Profile.asset deleted file mode 100644 index cb670ed..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Post-processing Profile.asset +++ /dev/null @@ -1,1526 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-4668261860098917247 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d65e486e4de6e5448a8fbb43dc8756a0, type: 3} - m_Name: Grain - m_EditorClassIdentifier: - active: 1 - enabled: - overrideState: 1 - value: 1 - colored: - overrideState: 0 - value: 1 - intensity: - overrideState: 1 - value: 0.1 - size: - overrideState: 0 - value: 1 - lumContrib: - overrideState: 0 - value: 0.8 ---- !u!114 &-4470595070750571488 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 48a79b01ea5641d4aa6daa2e23605641, type: 3} - m_Name: Bloom - m_EditorClassIdentifier: - active: 1 - enabled: - overrideState: 1 - value: 1 - intensity: - overrideState: 1 - value: 1 - threshold: - overrideState: 1 - value: 1 - softKnee: - overrideState: 0 - value: 0.5 - clamp: - overrideState: 0 - value: 65472 - diffusion: - overrideState: 0 - value: 7 - anamorphicRatio: - overrideState: 0 - value: 0 - color: - overrideState: 0 - value: {r: 1, g: 1, b: 1, a: 1} - fastMode: - overrideState: 0 - value: 0 - dirtTexture: - overrideState: 0 - value: {fileID: 0} - defaultState: 1 - dirtIntensity: - overrideState: 0 - value: 0 ---- !u!114 &-1686436350185199926 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: adb84e30e02715445aeb9959894e3b4d, type: 3} - m_Name: ColorGrading - m_EditorClassIdentifier: - active: 1 - enabled: - overrideState: 1 - value: 1 - gradingMode: - overrideState: 1 - value: 1 - externalLut: - overrideState: 0 - value: {fileID: 0} - defaultState: 1 - tonemapper: - overrideState: 1 - value: 2 - toneCurveToeStrength: - overrideState: 0 - value: 0 - toneCurveToeLength: - overrideState: 0 - value: 0.5 - toneCurveShoulderStrength: - overrideState: 0 - value: 0 - toneCurveShoulderLength: - overrideState: 0 - value: 0.5 - toneCurveShoulderAngle: - overrideState: 0 - value: 0 - toneCurveGamma: - overrideState: 0 - value: 1 - ldrLut: - overrideState: 0 - value: {fileID: 0} - defaultState: 4 - ldrLutContribution: - overrideState: 0 - value: 1 - temperature: - overrideState: 0 - value: 0 - tint: - overrideState: 0 - value: 0 - colorFilter: - overrideState: 0 - value: {r: 1, g: 1, b: 1, a: 1} - hueShift: - overrideState: 0 - value: 0 - saturation: - overrideState: 0 - value: 0 - brightness: - overrideState: 0 - value: 0 - postExposure: - overrideState: 1 - value: 1 - contrast: - overrideState: 0 - value: 0 - mixerRedOutRedIn: - overrideState: 0 - value: 100 - mixerRedOutGreenIn: - overrideState: 0 - value: 0 - mixerRedOutBlueIn: - overrideState: 0 - value: 0 - mixerGreenOutRedIn: - overrideState: 0 - value: 0 - mixerGreenOutGreenIn: - overrideState: 0 - value: 100 - mixerGreenOutBlueIn: - overrideState: 0 - value: 0 - mixerBlueOutRedIn: - overrideState: 0 - value: 0 - mixerBlueOutGreenIn: - overrideState: 0 - value: 0 - mixerBlueOutBlueIn: - overrideState: 0 - value: 100 - lift: - overrideState: 1 - value: {x: 0.7452586, y: 0.8089445, z: 1, w: 0} - gamma: - overrideState: 1 - value: {x: 1, y: 1, z: 1, w: -0.18319647} - gain: - overrideState: 1 - value: {x: 1, y: 1, z: 1, w: 0.15161085} - masterCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 0 - m_ZeroValue: 0 - m_Range: 1 - cachedData: - - 0 - - 0.0078125 - - 0.015625 - - 0.0234375 - - 0.03125 - - 0.0390625 - - 0.046875 - - 0.0546875 - - 0.0625 - - 0.0703125 - - 0.078125 - - 0.0859375 - - 0.09375 - - 0.1015625 - - 0.109375 - - 0.1171875 - - 0.125 - - 0.1328125 - - 0.140625 - - 0.1484375 - - 0.15625 - - 0.1640625 - - 0.171875 - - 0.1796875 - - 0.1875 - - 0.1953125 - - 0.203125 - - 0.2109375 - - 0.21875 - - 0.2265625 - - 0.234375 - - 0.2421875 - - 0.25 - - 0.2578125 - - 0.265625 - - 0.2734375 - - 0.28125 - - 0.2890625 - - 0.296875 - - 0.3046875 - - 0.3125 - - 0.3203125 - - 0.328125 - - 0.3359375 - - 0.34375 - - 0.3515625 - - 0.359375 - - 0.3671875 - - 0.375 - - 0.3828125 - - 0.390625 - - 0.3984375 - - 0.40625 - - 0.4140625 - - 0.421875 - - 0.4296875 - - 0.4375 - - 0.4453125 - - 0.453125 - - 0.4609375 - - 0.46875 - - 0.4765625 - - 0.484375 - - 0.4921875 - - 0.5 - - 0.5078125 - - 0.515625 - - 0.5234375 - - 0.53125 - - 0.5390625 - - 0.546875 - - 0.5546875 - - 0.5625 - - 0.5703125 - - 0.578125 - - 0.5859375 - - 0.59375 - - 0.6015625 - - 0.609375 - - 0.6171875 - - 0.625 - - 0.6328125 - - 0.640625 - - 0.6484375 - - 0.65625 - - 0.6640625 - - 0.671875 - - 0.6796875 - - 0.6875 - - 0.6953125 - - 0.703125 - - 0.7109375 - - 0.71875 - - 0.7265625 - - 0.734375 - - 0.7421875 - - 0.75 - - 0.7578125 - - 0.765625 - - 0.7734375 - - 0.78125 - - 0.7890625 - - 0.796875 - - 0.8046875 - - 0.8125 - - 0.8203125 - - 0.828125 - - 0.8359375 - - 0.84375 - - 0.8515625 - - 0.859375 - - 0.8671875 - - 0.875 - - 0.8828125 - - 0.890625 - - 0.8984375 - - 0.90625 - - 0.9140625 - - 0.921875 - - 0.9296875 - - 0.9375 - - 0.9453125 - - 0.953125 - - 0.9609375 - - 0.96875 - - 0.9765625 - - 0.984375 - - 0.9921875 - redCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 0 - m_ZeroValue: 0 - m_Range: 1 - cachedData: - - 0 - - 0.0078125 - - 0.015625 - - 0.0234375 - - 0.03125 - - 0.0390625 - - 0.046875 - - 0.0546875 - - 0.0625 - - 0.0703125 - - 0.078125 - - 0.0859375 - - 0.09375 - - 0.1015625 - - 0.109375 - - 0.1171875 - - 0.125 - - 0.1328125 - - 0.140625 - - 0.1484375 - - 0.15625 - - 0.1640625 - - 0.171875 - - 0.1796875 - - 0.1875 - - 0.1953125 - - 0.203125 - - 0.2109375 - - 0.21875 - - 0.2265625 - - 0.234375 - - 0.2421875 - - 0.25 - - 0.2578125 - - 0.265625 - - 0.2734375 - - 0.28125 - - 0.2890625 - - 0.296875 - - 0.3046875 - - 0.3125 - - 0.3203125 - - 0.328125 - - 0.3359375 - - 0.34375 - - 0.3515625 - - 0.359375 - - 0.3671875 - - 0.375 - - 0.3828125 - - 0.390625 - - 0.3984375 - - 0.40625 - - 0.4140625 - - 0.421875 - - 0.4296875 - - 0.4375 - - 0.4453125 - - 0.453125 - - 0.4609375 - - 0.46875 - - 0.4765625 - - 0.484375 - - 0.4921875 - - 0.5 - - 0.5078125 - - 0.515625 - - 0.5234375 - - 0.53125 - - 0.5390625 - - 0.546875 - - 0.5546875 - - 0.5625 - - 0.5703125 - - 0.578125 - - 0.5859375 - - 0.59375 - - 0.6015625 - - 0.609375 - - 0.6171875 - - 0.625 - - 0.6328125 - - 0.640625 - - 0.6484375 - - 0.65625 - - 0.6640625 - - 0.671875 - - 0.6796875 - - 0.6875 - - 0.6953125 - - 0.703125 - - 0.7109375 - - 0.71875 - - 0.7265625 - - 0.734375 - - 0.7421875 - - 0.75 - - 0.7578125 - - 0.765625 - - 0.7734375 - - 0.78125 - - 0.7890625 - - 0.796875 - - 0.8046875 - - 0.8125 - - 0.8203125 - - 0.828125 - - 0.8359375 - - 0.84375 - - 0.8515625 - - 0.859375 - - 0.8671875 - - 0.875 - - 0.8828125 - - 0.890625 - - 0.8984375 - - 0.90625 - - 0.9140625 - - 0.921875 - - 0.9296875 - - 0.9375 - - 0.9453125 - - 0.953125 - - 0.9609375 - - 0.96875 - - 0.9765625 - - 0.984375 - - 0.9921875 - greenCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 0 - m_ZeroValue: 0 - m_Range: 1 - cachedData: - - 0 - - 0.0078125 - - 0.015625 - - 0.0234375 - - 0.03125 - - 0.0390625 - - 0.046875 - - 0.0546875 - - 0.0625 - - 0.0703125 - - 0.078125 - - 0.0859375 - - 0.09375 - - 0.1015625 - - 0.109375 - - 0.1171875 - - 0.125 - - 0.1328125 - - 0.140625 - - 0.1484375 - - 0.15625 - - 0.1640625 - - 0.171875 - - 0.1796875 - - 0.1875 - - 0.1953125 - - 0.203125 - - 0.2109375 - - 0.21875 - - 0.2265625 - - 0.234375 - - 0.2421875 - - 0.25 - - 0.2578125 - - 0.265625 - - 0.2734375 - - 0.28125 - - 0.2890625 - - 0.296875 - - 0.3046875 - - 0.3125 - - 0.3203125 - - 0.328125 - - 0.3359375 - - 0.34375 - - 0.3515625 - - 0.359375 - - 0.3671875 - - 0.375 - - 0.3828125 - - 0.390625 - - 0.3984375 - - 0.40625 - - 0.4140625 - - 0.421875 - - 0.4296875 - - 0.4375 - - 0.4453125 - - 0.453125 - - 0.4609375 - - 0.46875 - - 0.4765625 - - 0.484375 - - 0.4921875 - - 0.5 - - 0.5078125 - - 0.515625 - - 0.5234375 - - 0.53125 - - 0.5390625 - - 0.546875 - - 0.5546875 - - 0.5625 - - 0.5703125 - - 0.578125 - - 0.5859375 - - 0.59375 - - 0.6015625 - - 0.609375 - - 0.6171875 - - 0.625 - - 0.6328125 - - 0.640625 - - 0.6484375 - - 0.65625 - - 0.6640625 - - 0.671875 - - 0.6796875 - - 0.6875 - - 0.6953125 - - 0.703125 - - 0.7109375 - - 0.71875 - - 0.7265625 - - 0.734375 - - 0.7421875 - - 0.75 - - 0.7578125 - - 0.765625 - - 0.7734375 - - 0.78125 - - 0.7890625 - - 0.796875 - - 0.8046875 - - 0.8125 - - 0.8203125 - - 0.828125 - - 0.8359375 - - 0.84375 - - 0.8515625 - - 0.859375 - - 0.8671875 - - 0.875 - - 0.8828125 - - 0.890625 - - 0.8984375 - - 0.90625 - - 0.9140625 - - 0.921875 - - 0.9296875 - - 0.9375 - - 0.9453125 - - 0.953125 - - 0.9609375 - - 0.96875 - - 0.9765625 - - 0.984375 - - 0.9921875 - blueCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: 1 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 0 - m_ZeroValue: 0 - m_Range: 1 - cachedData: - - 0 - - 0.0078125 - - 0.015625 - - 0.0234375 - - 0.03125 - - 0.0390625 - - 0.046875 - - 0.0546875 - - 0.0625 - - 0.0703125 - - 0.078125 - - 0.0859375 - - 0.09375 - - 0.1015625 - - 0.109375 - - 0.1171875 - - 0.125 - - 0.1328125 - - 0.140625 - - 0.1484375 - - 0.15625 - - 0.1640625 - - 0.171875 - - 0.1796875 - - 0.1875 - - 0.1953125 - - 0.203125 - - 0.2109375 - - 0.21875 - - 0.2265625 - - 0.234375 - - 0.2421875 - - 0.25 - - 0.2578125 - - 0.265625 - - 0.2734375 - - 0.28125 - - 0.2890625 - - 0.296875 - - 0.3046875 - - 0.3125 - - 0.3203125 - - 0.328125 - - 0.3359375 - - 0.34375 - - 0.3515625 - - 0.359375 - - 0.3671875 - - 0.375 - - 0.3828125 - - 0.390625 - - 0.3984375 - - 0.40625 - - 0.4140625 - - 0.421875 - - 0.4296875 - - 0.4375 - - 0.4453125 - - 0.453125 - - 0.4609375 - - 0.46875 - - 0.4765625 - - 0.484375 - - 0.4921875 - - 0.5 - - 0.5078125 - - 0.515625 - - 0.5234375 - - 0.53125 - - 0.5390625 - - 0.546875 - - 0.5546875 - - 0.5625 - - 0.5703125 - - 0.578125 - - 0.5859375 - - 0.59375 - - 0.6015625 - - 0.609375 - - 0.6171875 - - 0.625 - - 0.6328125 - - 0.640625 - - 0.6484375 - - 0.65625 - - 0.6640625 - - 0.671875 - - 0.6796875 - - 0.6875 - - 0.6953125 - - 0.703125 - - 0.7109375 - - 0.71875 - - 0.7265625 - - 0.734375 - - 0.7421875 - - 0.75 - - 0.7578125 - - 0.765625 - - 0.7734375 - - 0.78125 - - 0.7890625 - - 0.796875 - - 0.8046875 - - 0.8125 - - 0.8203125 - - 0.828125 - - 0.8359375 - - 0.84375 - - 0.8515625 - - 0.859375 - - 0.8671875 - - 0.875 - - 0.8828125 - - 0.890625 - - 0.8984375 - - 0.90625 - - 0.9140625 - - 0.921875 - - 0.9296875 - - 0.9375 - - 0.9453125 - - 0.953125 - - 0.9609375 - - 0.96875 - - 0.9765625 - - 0.984375 - - 0.9921875 - hueVsHueCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 1 - m_ZeroValue: 0.5 - m_Range: 1 - cachedData: - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - hueVsSatCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 1 - m_ZeroValue: 0.5 - m_Range: 1 - cachedData: - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - satVsSatCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 0 - m_ZeroValue: 0.5 - m_Range: 1 - cachedData: - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - lumVsSatCurve: - overrideState: 0 - value: - curve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_Loop: 0 - m_ZeroValue: 0.5 - m_Range: 1 - cachedData: - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 - - 0.5 ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} - m_Name: Post-processing Profile - m_EditorClassIdentifier: - settings: - - {fileID: -1686436350185199926} - - {fileID: -4470595070750571488} - - {fileID: -4668261860098917247} - - {fileID: 8872035810126474437} - - {fileID: 5508522316044230136} - - {fileID: 5682528318933345576} ---- !u!114 &5508522316044230136 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6050e2d5de785ce4d931e4dbdbf2d755, type: 3} - m_Name: ChromaticAberration - m_EditorClassIdentifier: - active: 1 - enabled: - overrideState: 1 - value: 1 - spectralLut: - overrideState: 0 - value: {fileID: 0} - defaultState: 1 - intensity: - overrideState: 1 - value: 0.1 - fastMode: - overrideState: 0 - value: 0 ---- !u!114 &5682528318933345576 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c1cb7e9e120078f43bce4f0b1be547a7, type: 3} - m_Name: AmbientOcclusion - m_EditorClassIdentifier: - active: 1 - enabled: - overrideState: 1 - value: 1 - mode: - overrideState: 1 - value: 1 - intensity: - overrideState: 1 - value: 0.4 - color: - overrideState: 0 - value: {r: 0, g: 0, b: 0, a: 1} - ambientOnly: - overrideState: 0 - value: 1 - noiseFilterTolerance: - overrideState: 0 - value: 0 - blurTolerance: - overrideState: 0 - value: -4.6 - upsampleTolerance: - overrideState: 0 - value: -12 - thicknessModifier: - overrideState: 0 - value: 1 - directLightingStrength: - overrideState: 0 - value: 0 - radius: - overrideState: 0 - value: 0.25 - quality: - overrideState: 0 - value: 2 ---- !u!114 &8872035810126474437 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 40b924e2dad56384a8df2a1e111bb675, type: 3} - m_Name: Vignette - m_EditorClassIdentifier: - active: 1 - enabled: - overrideState: 1 - value: 1 - mode: - overrideState: 0 - value: 0 - color: - overrideState: 0 - value: {r: 0, g: 0, b: 0, a: 1} - center: - overrideState: 0 - value: {x: 0.5, y: 0.5} - intensity: - overrideState: 1 - value: 0.3 - smoothness: - overrideState: 0 - value: 0.2 - roundness: - overrideState: 0 - value: 1 - rounded: - overrideState: 0 - value: 0 - mask: - overrideState: 0 - value: {fileID: 0} - defaultState: 1 - opacity: - overrideState: 0 - value: 1 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Post-processing Profile.asset.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Post-processing Profile.asset.meta deleted file mode 100644 index b2b993d..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Post-processing Profile.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c6d922362dc829846a7c3bc072431992 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Volume Profile.asset b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Volume Profile.asset deleted file mode 100644 index 445a96d..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Volume Profile.asset +++ /dev/null @@ -1,168 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-6752174640764782317 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3} - m_Name: Vignette - m_EditorClassIdentifier: - active: 1 - color: - m_OverrideState: 0 - m_Value: {r: 0, g: 0, b: 0, a: 1} - center: - m_OverrideState: 0 - m_Value: {x: 0.5, y: 0.5} - intensity: - m_OverrideState: 1 - m_Value: 0.3 - smoothness: - m_OverrideState: 0 - m_Value: 0.2 - rounded: - m_OverrideState: 0 - m_Value: 0 ---- !u!114 &-3452979246046339123 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3} - m_Name: Tonemapping - m_EditorClassIdentifier: - active: 1 - mode: - m_OverrideState: 1 - m_Value: 2 ---- !u!114 &-2060400318868653376 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 29fa0085f50d5e54f8144f766051a691, type: 3} - m_Name: FilmGrain - m_EditorClassIdentifier: - active: 1 - type: - m_OverrideState: 0 - m_Value: 0 - intensity: - m_OverrideState: 1 - m_Value: 0.3 - response: - m_OverrideState: 0 - m_Value: 0.8 - texture: - m_OverrideState: 0 - m_Value: {fileID: 0} ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} - m_Name: Volume Profile - m_EditorClassIdentifier: - components: - - {fileID: -3452979246046339123} - - {fileID: 2625386451137447955} - - {fileID: -2060400318868653376} - - {fileID: 1252278377717628555} - - {fileID: -6752174640764782317} - - {fileID: 8134289475685239384} ---- !u!114 &1252278377717628555 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 81180773991d8724ab7f2d216912b564, type: 3} - m_Name: ChromaticAberration - m_EditorClassIdentifier: - active: 1 - intensity: - m_OverrideState: 1 - m_Value: 0.25 ---- !u!114 &2625386451137447955 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3} - m_Name: Bloom - m_EditorClassIdentifier: - active: 1 - threshold: - m_OverrideState: 0 - m_Value: 0.9 - intensity: - m_OverrideState: 1 - m_Value: 1 - scatter: - m_OverrideState: 0 - m_Value: 0.7 - clamp: - m_OverrideState: 0 - m_Value: 65472 - tint: - m_OverrideState: 0 - m_Value: {r: 1, g: 1, b: 1, a: 1} - highQualityFiltering: - m_OverrideState: 0 - m_Value: 0 - skipIterations: - m_OverrideState: 0 - m_Value: 1 - dirtTexture: - m_OverrideState: 0 - m_Value: {fileID: 0} - dirtIntensity: - m_OverrideState: 0 - m_Value: 0 ---- !u!114 &8134289475685239384 -MonoBehaviour: - m_ObjectHideFlags: 3 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5485954d14dfb9a4c8ead8edb0ded5b1, type: 3} - m_Name: LiftGammaGain - m_EditorClassIdentifier: - active: 1 - lift: - m_OverrideState: 1 - m_Value: {x: 0.88826716, y: 0.9085918, z: 1, w: 0} - gamma: - m_OverrideState: 0 - m_Value: {x: 1, y: 1, z: 1, w: 0} - gain: - m_OverrideState: 0 - m_Value: {x: 1, y: 1, z: 1, w: 0} diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Volume Profile.asset.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Volume Profile.asset.meta deleted file mode 100644 index 87f3740..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Profiles/Volume Profile.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 753347ea62ee7464ba7d0843cb11ab40 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes.meta deleted file mode 100644 index 2543360..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1f7128f137660a94ea5dba8ba6786852 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample Lighting Settings.lighting b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample Lighting Settings.lighting deleted file mode 100644 index d9bfb5c..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample Lighting Settings.lighting +++ /dev/null @@ -1,64 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Sample Lighting Settings - serializedVersion: 4 - m_GIWorkflowMode: 1 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 1 - m_BakeBackend: 2 - m_LightmapMaxSize: 1024 - m_BakeResolution: 20 - m_Padding: 2 - m_LightmapCompression: 3 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 2 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 1 - m_PVREnvironmentMIS: 1 - m_PVRFilteringMode: 1 - m_PVRDenoiserTypeDirect: 1 - m_PVRDenoiserTypeIndirect: 1 - m_PVRDenoiserTypeAO: 1 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_PVRTiledBaking: 0 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample Lighting Settings.lighting.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample Lighting Settings.lighting.meta deleted file mode 100644 index eb32f85..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample Lighting Settings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1fa4364c36503ff4a8252c1ccb2630a0 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.meta deleted file mode 100644 index d8ed076..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9783636571400194f93c1753ac9dd3f4 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.unity b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.unity deleted file mode 100644 index 1c21958..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.unity +++ /dev/null @@ -1,4120 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.1783086, g: 0.22325999, b: 0.30529937, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 1 - m_PVRDenoiserTypeDirect: 1 - m_PVRDenoiserTypeIndirect: 1 - m_PVRDenoiserTypeAO: 1 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: 8d45325a30452d84ca3e5dbd217f75ba, - type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: 1fa4364c36503ff4a8252c1ccb2630a0, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &12467749 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 12467753} - - component: {fileID: 12467752} - - component: {fileID: 12467751} - - component: {fileID: 12467750} - m_Layer: 0 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &12467750 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 12467749} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &12467751 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 12467749} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &12467752 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 12467749} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &12467753 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 12467749} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 19.28, y: 1, z: 5.52} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &30524958 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 30524962} - - component: {fileID: 30524961} - - component: {fileID: 30524960} - - component: {fileID: 30524959} - m_Layer: 0 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &30524959 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 30524958} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &30524960 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 30524958} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &30524961 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 30524958} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &30524962 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 30524958} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -21.08, y: 1, z: 6.24} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &115804491 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 115804492} - - component: {fileID: 115804495} - - component: {fileID: 115804494} - - component: {fileID: 115804493} - m_Layer: 0 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &115804492 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 115804491} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 6.42, y: 1, z: 3.38} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &115804493 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 115804491} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &115804494 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 115804491} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &115804495 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 115804491} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &133932346 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 133932349} - - component: {fileID: 133932348} - - component: {fileID: 133932347} - - component: {fileID: 133932350} - - component: {fileID: 133932351} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &133932347 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133932346} - m_Enabled: 1 ---- !u!20 &133932348 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133932346} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 1, g: 1, b: 1, a: 1} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 40 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &133932349 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133932346} - m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927} - m_LocalPosition: {x: 0, y: 14.6, z: -18.5} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 40, y: 0, z: 0} ---- !u!114 &133932350 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133932346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} - m_Name: - m_EditorClassIdentifier: - volumeTrigger: {fileID: 133932349} - volumeLayer: - serializedVersion: 2 - m_Bits: 256 - stopNaNPropagation: 1 - finalBlitToCameraTarget: 0 - antialiasingMode: 0 - temporalAntialiasing: - jitterSpread: 0.75 - sharpness: 0.25 - stationaryBlending: 0.95 - motionBlending: 0.85 - subpixelMorphologicalAntialiasing: - quality: 2 - fastApproximateAntialiasing: - fastMode: 0 - keepAlpha: 0 - fog: - enabled: 1 - excludeSkybox: 1 - debugLayer: - lightMeter: - width: 512 - height: 256 - showCurves: 1 - histogram: - width: 512 - height: 256 - channel: 3 - waveform: - exposure: 0.12 - height: 256 - vectorscope: - size: 256 - exposure: 0.12 - overlaySettings: - linearDepth: 0 - motionColorIntensity: 4 - motionGridSize: 64 - colorBlindnessType: 0 - colorBlindnessStrength: 1 - m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} - m_ShowToolkit: 0 - m_ShowCustomSorter: 0 - breakBeforeColorGrading: 0 - m_BeforeTransparentBundles: [] - m_BeforeStackBundles: [] - m_AfterStackBundles: [] ---- !u!114 &133932351 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133932346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_VolumeFrameworkUpdateModeOption: 2 - m_RenderPostProcessing: 1 - m_Antialiasing: 1 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_Version: 2 ---- !u!1 &188424004 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 188424005} - - component: {fileID: 188424008} - - component: {fileID: 188424007} - - component: {fileID: 188424006} - m_Layer: 0 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &188424005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 188424004} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.9399996, y: 1, z: 7.01} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &188424006 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 188424004} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &188424007 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 188424004} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &188424008 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 188424004} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &208388699 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 208388703} - - component: {fileID: 208388702} - - component: {fileID: 208388701} - - component: {fileID: 208388700} - m_Layer: 0 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &208388700 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208388699} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &208388701 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208388699} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &208388702 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208388699} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &208388703 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208388699} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -20.78, y: 1, z: 0.47} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &212154662 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 212154666} - - component: {fileID: 212154665} - - component: {fileID: 212154664} - - component: {fileID: 212154663} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &212154663 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 212154662} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &212154664 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 212154662} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &212154665 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 212154662} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &212154666 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 212154662} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -13.6, y: 0.5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &216020526 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 216020527} - - component: {fileID: 216020530} - - component: {fileID: 216020529} - - component: {fileID: 216020528} - m_Layer: 0 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &216020527 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 216020526} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -6.22, y: 1, z: 11.26} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 27 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &216020528 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 216020526} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &216020529 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 216020526} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &216020530 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 216020526} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &218579872 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 218579875} - - component: {fileID: 218579874} - - component: {fileID: 218579873} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &218579873 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 218579872} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_SendPointerHoverToParent: 1 - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &218579874 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 218579872} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &218579875 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 218579872} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &313583788 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 313583789} - - component: {fileID: 313583792} - - component: {fileID: 313583791} - - component: {fileID: 313583790} - m_Layer: 0 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &313583789 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 313583788} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1.2700005, y: 1, z: -3.1899998} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &313583790 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 313583788} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &313583791 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 313583788} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &313583792 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 313583788} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &422977144 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 422977148} - - component: {fileID: 422977147} - - component: {fileID: 422977146} - - component: {fileID: 422977145} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &422977145 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422977144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &422977146 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422977144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 1 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!223 &422977147 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422977144} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 25 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &422977148 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422977144} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1591235421} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1001 &446987950 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1591235421} - m_Modifications: - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_SizeDelta.x - value: -100 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_SizeDelta.y - value: -300 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4188684299239068553, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_Name - value: Graphic Settings Panel - objectReference: {fileID: 0} - - target: {fileID: 8743124262264935861, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124262264935861, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124262264935861, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124262264935861, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263316548205, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263316548205, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263766170473, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263766170473, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263801308464, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263801308464, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263902500267, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263902500267, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8743124263902500267, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 2f64764278885e3438c7e7e3ebb84335, type: 3} ---- !u!1 &525866733 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 525866737} - - component: {fileID: 525866736} - - component: {fileID: 525866735} - - component: {fileID: 525866734} - m_Layer: 0 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &525866734 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 525866733} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &525866735 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 525866733} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &525866736 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 525866733} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &525866737 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 525866733} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 13.22, y: 0.5, z: 10.07} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &546325480 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 546325481} - - component: {fileID: 546325484} - - component: {fileID: 546325483} - - component: {fileID: 546325482} - m_Layer: 0 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &546325481 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 546325480} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1.57, y: 1, z: 2.58} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &546325482 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 546325480} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &546325483 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 546325480} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &546325484 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 546325480} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &599331763 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 599331767} - - component: {fileID: 599331766} - - component: {fileID: 599331765} - - component: {fileID: 599331764} - m_Layer: 0 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &599331764 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 599331763} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &599331765 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 599331763} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &599331766 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 599331763} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &599331767 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 599331763} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -15.3, y: 1, z: -3.16} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &620417475 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 620417476} - - component: {fileID: 620417478} - - component: {fileID: 620417477} - m_Layer: 5 - m_Name: Text (TMP) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &620417476 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620417475} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1497382795} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &620417477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620417475} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Apply - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, type: 2} - m_sharedMaterial: {fileID: -3558660214557783719, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4283256141 - m_fontColor: {r: 0.3018868, g: 0.3018868, b: 0.3018868, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 36 - m_fontSizeBase: 36 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 16 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &620417478 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620417475} - m_CullTransparentMesh: 1 ---- !u!224 &782171308 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 685773581538143215, guid: 2f64764278885e3438c7e7e3ebb84335, - type: 3} - m_PrefabInstance: {fileID: 446987950} - m_PrefabAsset: {fileID: 0} ---- !u!1 &794755225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 794755229} - - component: {fileID: 794755228} - - component: {fileID: 794755227} - - component: {fileID: 794755226} - m_Layer: 0 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &794755226 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794755225} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &794755227 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794755225} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &794755228 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794755225} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &794755229 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794755225} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 12.28, y: 1, z: -3.16} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &806612424 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 806612428} - - component: {fileID: 806612427} - - component: {fileID: 806612426} - - component: {fileID: 806612425} - m_Layer: 0 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &806612425 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 806612424} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &806612426 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 806612424} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &806612427 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 806612424} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &806612428 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 806612424} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -16.77, y: 0.5, z: 5.49} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &860402557 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 860402561} - - component: {fileID: 860402560} - - component: {fileID: 860402559} - - component: {fileID: 860402558} - m_Layer: 0 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &860402558 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 860402557} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &860402559 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 860402557} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &860402560 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 860402557} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &860402561 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 860402557} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 13.8, y: 1, z: 2.78} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &886700066 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 886700067} - - component: {fileID: 886700070} - - component: {fileID: 886700069} - - component: {fileID: 886700068} - m_Layer: 0 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &886700067 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 886700066} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2.1899996, y: 1, z: -9.83} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &886700068 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 886700066} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &886700069 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 886700066} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &886700070 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 886700066} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1065172194 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1065172198} - - component: {fileID: 1065172197} - - component: {fileID: 1065172196} - - component: {fileID: 1065172195} - m_Layer: 0 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &1065172195 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1065172194} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1065172196 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1065172194} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1065172197 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1065172194} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1065172198 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1065172194} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -20.7, y: 1, z: 12.27} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1099820393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1099820394} - - component: {fileID: 1099820397} - - component: {fileID: 1099820396} - - component: {fileID: 1099820395} - m_Layer: 0 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &1099820394 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1099820393} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -7.67, y: 1, z: -6.2} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1099820395 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1099820393} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1099820396 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1099820393} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1099820397 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1099820393} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1111723210 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1111723212} - - component: {fileID: 1111723211} - - component: {fileID: 1111723213} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &1111723211 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1111723210} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &1111723212 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1111723210} - m_LocalRotation: {x: 0.4768749, y: 0.09096882, z: -0.04970084, w: 0.87283725} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 57.3, y: 11.9, z: 0} ---- !u!114 &1111723213 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1111723210} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 1 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} ---- !u!1 &1218977269 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1218977270} - m_Layer: 0 - m_Name: Environment - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &1218977270 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1218977269} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 212154666} - - {fileID: 1585417499} - - {fileID: 599331767} - - {fileID: 208388703} - - {fileID: 1230545711} - - {fileID: 1065172198} - - {fileID: 806612428} - - {fileID: 1690580553} - - {fileID: 860402561} - - {fileID: 30524962} - - {fileID: 1583438917} - - {fileID: 794755229} - - {fileID: 1763403275} - - {fileID: 525866737} - - {fileID: 12467753} - - {fileID: 886700067} - - {fileID: 1099820394} - - {fileID: 1424853713} - - {fileID: 1802115350} - - {fileID: 1237814471} - - {fileID: 313583789} - - {fileID: 1502398111} - - {fileID: 546325481} - - {fileID: 115804492} - - {fileID: 188424005} - - {fileID: 2039591545} - - {fileID: 1281289023} - - {fileID: 216020527} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1230545707 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1230545711} - - component: {fileID: 1230545710} - - component: {fileID: 1230545709} - - component: {fileID: 1230545708} - m_Layer: 0 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &1230545708 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1230545707} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1230545709 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1230545707} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1230545710 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1230545707} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1230545711 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1230545707} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -10.54, y: 1, z: 5.52} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1237814470 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1237814471} - - component: {fileID: 1237814474} - - component: {fileID: 1237814473} - - component: {fileID: 1237814472} - m_Layer: 0 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &1237814471 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237814470} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 4.21, y: 1, z: -6.8199997} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1237814472 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237814470} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1237814473 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237814470} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1237814474 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237814470} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1281289022 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1281289023} - - component: {fileID: 1281289026} - - component: {fileID: 1281289025} - - component: {fileID: 1281289024} - m_Layer: 0 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &1281289023 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281289022} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 6.3, y: 1, z: 9.55} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 26 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1281289024 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281289022} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1281289025 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281289022} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1281289026 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281289022} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1424853712 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1424853713} - - component: {fileID: 1424853716} - - component: {fileID: 1424853715} - - component: {fileID: 1424853714} - m_Layer: 0 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &1424853713 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424853712} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2.5700006, y: 1, z: -1.1499996} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1424853714 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424853712} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1424853715 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424853712} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1424853716 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424853712} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1448265654 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1448265656} - - component: {fileID: 1448265658} - - component: {fileID: 1448265657} - m_Layer: 0 - m_Name: Volume - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1448265656 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1448265654} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1448265657 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1448265654} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IsGlobal: 1 - priority: 0 - blendDistance: 0 - weight: 1 - sharedProfile: {fileID: 11400000, guid: 753347ea62ee7464ba7d0843cb11ab40, type: 2} ---- !u!114 &1448265658 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1448265654} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ad76d02bedb82f341b59136a9c970d17, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1497382794 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1497382795} - - component: {fileID: 1497382799} - - component: {fileID: 1497382798} - - component: {fileID: 1497382797} - - component: {fileID: 1497382796} - - component: {fileID: 1497382800} - m_Layer: 5 - m_Name: Apply Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1497382795 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1497382794} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 620417476} - m_Father: {fileID: 1591235421} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 50} - m_SizeDelta: {x: 250, y: 80} - m_Pivot: {x: 0.5, y: 0} ---- !u!114 &1497382796 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1497382794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 17e9f2e223bd22a4fabb136cd3f16ba9, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1497382797 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1497382794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.5411765, g: 1, b: 0.69803923, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1497382798} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1497382798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1497382794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1497382799 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1497382794} - m_CullTransparentMesh: 1 ---- !u!114 &1497382800 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1497382794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 0.19607843} - m_EffectDistance: {x: 4, y: -4} - m_UseGraphicAlpha: 1 ---- !u!1 &1502398110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1502398111} - - component: {fileID: 1502398114} - - component: {fileID: 1502398113} - - component: {fileID: 1502398112} - m_Layer: 0 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &1502398111 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1502398110} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 8.97, y: 1, z: 1.8600004} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1502398112 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1502398110} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1502398113 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1502398110} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1502398114 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1502398110} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1583438913 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583438917} - - component: {fileID: 1583438916} - - component: {fileID: 1583438915} - - component: {fileID: 1583438914} - m_Layer: 0 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &1583438914 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583438913} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1583438915 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583438913} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1583438916 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583438913} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1583438917 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583438913} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -13.44, y: 1, z: 3.28} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1585417495 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1585417499} - - component: {fileID: 1585417498} - - component: {fileID: 1585417497} - - component: {fileID: 1585417496} - m_Layer: 0 - m_Name: Plane - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!64 &1585417496 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1585417495} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &1585417497 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1585417495} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1585417498 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1585417495} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1585417499 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1585417495} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 10, y: 10, z: 5} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1591235420 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1591235421} - - component: {fileID: 1591235423} - - component: {fileID: 1591235422} - m_Layer: 5 - m_Name: Panel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1591235421 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1591235420} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2063629859} - - {fileID: 782171308} - - {fileID: 1497382795} - m_Father: {fileID: 422977148} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1200, y: 900} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1591235422 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1591235420} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c7ed0c60c53f23f4ca808b5f7a4f2b5c, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1.5 ---- !u!222 &1591235423 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1591235420} - m_CullTransparentMesh: 1 ---- !u!1 &1690580549 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1690580553} - - component: {fileID: 1690580552} - - component: {fileID: 1690580551} - - component: {fileID: 1690580550} - m_Layer: 0 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &1690580550 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1690580549} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1690580551 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1690580549} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1690580552 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1690580549} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1690580553 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1690580549} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 22.51, y: 1, z: 12.27} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1763403271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1763403275} - - component: {fileID: 1763403274} - - component: {fileID: 1763403273} - - component: {fileID: 1763403272} - m_Layer: 0 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!65 &1763403272 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1763403271} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1763403273 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1763403271} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1763403274 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1763403271} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1763403275 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1763403271} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 17.22, y: 0.5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1802115349 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1802115350} - - component: {fileID: 1802115353} - - component: {fileID: 1802115352} - - component: {fileID: 1802115351} - m_Layer: 0 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &1802115350 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1802115349} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -7.97, y: 1, z: -0.43} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1802115351 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1802115349} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1802115352 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1802115349} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9ffac03b6178e044d89eabb79d170881, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1802115353 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1802115349} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &2039591544 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2039591545} - - component: {fileID: 2039591548} - - component: {fileID: 2039591547} - - component: {fileID: 2039591546} - m_Layer: 0 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 2147483647 - m_IsActive: 1 ---- !u!4 &2039591545 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039591544} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 11.18, y: 1, z: 12.06} - m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 1 - m_Children: [] - m_Father: {fileID: 1218977270} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2039591546 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039591544} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &2039591547 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039591544} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 49ed5275dc212294dabf1045619e38d8, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &2039591548 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039591544} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &2063629858 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2063629859} - - component: {fileID: 2063629861} - - component: {fileID: 2063629860} - m_Layer: 5 - m_Name: Title - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2063629859 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2063629858} - m_LocalRotation: {x: -0, y: 0.008726558, z: -0, w: 0.999962} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1591235421} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 1, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -25} - m_SizeDelta: {x: 0, y: 100} - m_Pivot: {x: 0.5, y: 1} ---- !u!114 &2063629860 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2063629858} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Graphics - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, type: 2} - m_sharedMaterial: {fileID: -3558660214557783719, guid: d87cbfe2ec8a9b04aa5c532acc09f9e7, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 65 - m_fontSizeBase: 65 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 16 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &2063629861 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2063629858} - m_CullTransparentMesh: 1 diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.unity.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.unity.meta deleted file mode 100644 index 48ffc55..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 3f8cec8e9de28da49b6b3fff178a2900 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/LightingData.asset b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/LightingData.asset deleted file mode 100644 index e111e4e..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/LightingData.asset and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/LightingData.asset.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/LightingData.asset.meta deleted file mode 100644 index ea3da52..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/LightingData.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8d45325a30452d84ca3e5dbd217f75ba -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 112000000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_dir.png b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_dir.png deleted file mode 100644 index 34ea10c..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_dir.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_dir.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_dir.png.meta deleted file mode 100644 index 121f01b..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_dir.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 0ff8a3df531181247899dcd8495f8073 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 1 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 3 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 12 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_light.exr b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_light.exr deleted file mode 100644 index 61e8530..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_light.exr and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_light.exr.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_light.exr.meta deleted file mode 100644 index b50072f..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-0_comp_light.exr.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 5b79c4b60d5111a4e9d6e0ca841153ae -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 1 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 3 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 0 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 6 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_dir.png b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_dir.png deleted file mode 100644 index 26ea7c8..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_dir.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_dir.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_dir.png.meta deleted file mode 100644 index 3653be8..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_dir.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 09f6666df970c3e45b58e7c388b54602 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 1 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 3 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 12 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_light.exr b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_light.exr deleted file mode 100644 index de4637f..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_light.exr and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_light.exr.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_light.exr.meta deleted file mode 100644 index e23a38c..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/Lightmap-1_comp_light.exr.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 361be2bbd09d60248b91539e71d500d6 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 1 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 3 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 0 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 6 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/ReflectionProbe-0.exr b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/ReflectionProbe-0.exr deleted file mode 100644 index 83802da..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/ReflectionProbe-0.exr.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/ReflectionProbe-0.exr.meta deleted file mode 100644 index 4edff12..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Scenes/Sample/ReflectionProbe-0.exr.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 55bafea97f5983d43b79bc1dee8d7c99 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 0 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 100 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures.meta deleted file mode 100644 index 8005909..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 787d2cd219762174cb475c50cd914636 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_left.png b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_left.png deleted file mode 100644 index 96fd186..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_left.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_left.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_left.png.meta deleted file mode 100644 index 55122c6..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_left.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: 0728e75ff02cc344989e09570f37ac4f -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 8 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_right.png b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_right.png deleted file mode 100644 index 14020a9..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_right.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_right.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_right.png.meta deleted file mode 100644 index ded7a13..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/arrow_right.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: 5bc3d9a43036b9b4491566738f4ac6e4 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 8 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/panel.png b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/panel.png deleted file mode 100644 index 9efe906..0000000 Binary files a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/panel.png and /dev/null differ diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/panel.png.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/panel.png.meta deleted file mode 100644 index b0e8c0f..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Sample/Textures/panel.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: c7ed0c60c53f23f4ca808b5f7a4f2b5c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 25, y: 25, z: 25, w: 25} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 8 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 1537655665 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts.meta deleted file mode 100644 index b9d06ab..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 82bf4846606e2e64baa911eddc7953ee -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers.meta deleted file mode 100644 index cdf14b9..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 78eea6e8bb5e9b749b24a4245f0fbec7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn.meta deleted file mode 100644 index 4741044..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 29d171e52a3428a45adc655aa7470e5d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/Ilumisoft.GraphicsControl.BuiltIn.asmdef b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/Ilumisoft.GraphicsControl.BuiltIn.asmdef deleted file mode 100644 index f337f24..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/Ilumisoft.GraphicsControl.BuiltIn.asmdef +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "Ilumisoft.GraphicsControl.BuiltIn", - "rootNamespace": "", - "references": [ - "GUID:7f595fd175e67274183d17fac15b74c9", - "GUID:d60799ab2a985554ea1a39cd38695018" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [ - "POST_PROCESSING_BUILT_IN" - ], - "versionDefines": [ - { - "name": "com.unity.postprocessing", - "expression": "1.0.0", - "define": "POST_PROCESSING_BUILT_IN" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/Ilumisoft.GraphicsControl.BuiltIn.asmdef.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/Ilumisoft.GraphicsControl.BuiltIn.asmdef.meta deleted file mode 100644 index 3b6ba77..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/Ilumisoft.GraphicsControl.BuiltIn.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: bd0ede699487c6c479fb7b3301ef8884 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/PostProcessSettingsApplierBuiltIn.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/PostProcessSettingsApplierBuiltIn.cs deleted file mode 100644 index b459cd0..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/PostProcessSettingsApplierBuiltIn.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering.PostProcessing; - -namespace Ilumisoft.GraphicsControl.Rendering -{ - [RequireComponent(typeof(PostProcessVolume))] - public class PostProcessSettingsApplierBuiltIn : GraphicSettingsApplier - { - PostProcessVolume PostProcessVolume { get; set; } - - GraphicSettingsManager GraphicSettingsManager { get; set; } - - private void Awake() - { - GraphicSettingsManager = FindObjectOfType(); - PostProcessVolume = GetComponent(); - } - - void Start() - { - ApplySettings(); - } - - public override void ApplySettings() - { - ApplySetting(); - ApplySetting(); - ApplySetting(); - ApplySetting(); - ApplySetting(); - } - - void ApplySetting() - where TGraphicSetting : ToggleGraphicSetting - where TPostProcessEffect : PostProcessEffectSettings - { - // Settings cannot be applied when no profile has been set - if (PostProcessVolume.profile == null) - { - return; - } - - // Try to get the effect and the settings and enable/disable effect depending on the settings - if (PostProcessVolume.profile.TryGetSettings(out var effect) && - GraphicSettingsManager.TryGet(out var setting)) - { - effect.enabled.value = setting.IsEnabled(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/PostProcessSettingsApplierBuiltIn.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/PostProcessSettingsApplierBuiltIn.cs.meta deleted file mode 100644 index d4d6476..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/BuiltIn/PostProcessSettingsApplierBuiltIn.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c95cae303388304418e930a12566ccc1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 511d86b6354e6d6408dff5c757484b7f, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/GlobalSettingsApplier.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/GlobalSettingsApplier.cs deleted file mode 100644 index 5723ac4..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/GlobalSettingsApplier.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.Collections; -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - /// - /// Applies global 's like the resolution, vsync and general quality settings (if they have been added to the . - /// - [DisallowMultipleComponent] - [AddComponentMenu("Graphics Control/Global Settings Applier")] - public class GlobalSettingsApplier : GraphicSettingsApplier - { - public override void ApplySettings() - { - ApplyScreenSettings(); - ApplyQuality(); - ApplyVSync(); - } - - void ApplyScreenSettings() - { - // Get the current resolution and fullscreen mode - var resolution = Screen.currentResolution; - var fullScreenMode = Screen.fullScreenMode; - - // Get the selected resolution setting - if (TryGetSetting(out var resolutionSetting)) - { - resolution = resolutionSetting.GetSelectedOption(); - } - - // Get the selected fullscreen mode setting - if (TryGetSetting(out var fullScreenModeSetting)) - { - fullScreenMode = fullScreenModeSetting.GetSelectedOption(); - } - - // If any of the settings is available apply resolution/fullScreenMode (if neither ResolutionSetting or FullScreenModeSetting is available, no update is required) - if (resolutionSetting != null || fullScreenModeSetting != null) - { - Screen.SetResolution(resolution.width, resolution.height, fullScreenMode); - } - } - - void ApplyVSync() - { - if (TryGetSetting(out var setting)) - { - bool isEnabled = setting.GetSelectedOption(); - - QualitySettings.vSyncCount = isEnabled ? 1 : 0; - } - } - - void ApplyQuality() - { - if (TryGetSetting(out var setting)) - { - int qualityLevel = setting.GetSelectedOption(); - - QualitySettings.SetQualityLevel(qualityLevel); - } - } - - bool TryGetSetting(out T setting) where T : GraphicSetting - { - return GraphicSettingsManager.Instance.TryGet(out setting); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/GlobalSettingsApplier.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/GlobalSettingsApplier.cs.meta deleted file mode 100644 index d9fd47f..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/GlobalSettingsApplier.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 954b3a7630ee6b84680bd1ae3c6b9393 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 511d86b6354e6d6408dff5c757484b7f, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP.meta deleted file mode 100644 index f737eac..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5a1ee97a15c825e4a88d95ed3b1939ae -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/Ilumisoft.GraphicsControl.URP.asmdef b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/Ilumisoft.GraphicsControl.URP.asmdef deleted file mode 100644 index 7e4c44e..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/Ilumisoft.GraphicsControl.URP.asmdef +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "Ilumisoft.GraphicsControl.URP", - "rootNamespace": "", - "references": [ - "Ilumisoft.GraphicsControl", - "Unity.RenderPipelines.Core.Runtime", - "Unity.RenderPipelines.Universal.Runtime" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [ - "POST_PROCESSING_URP" - ], - "versionDefines": [ - { - "name": "com.unity.render-pipelines.universal", - "expression": "1.0.0", - "define": "POST_PROCESSING_URP" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/Ilumisoft.GraphicsControl.URP.asmdef.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/Ilumisoft.GraphicsControl.URP.asmdef.meta deleted file mode 100644 index 9f3e823..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/Ilumisoft.GraphicsControl.URP.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 43db925e0ab44994eb47f5daa359ecae -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/PostProcessSettingsApplierURP.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/PostProcessSettingsApplierURP.cs deleted file mode 100644 index fc67e77..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/PostProcessSettingsApplierURP.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; -using UnityEngine.Rendering.Universal; - -namespace Ilumisoft.GraphicsControl.Rendering.Universal -{ - [RequireComponent(typeof(Volume))] - public class PostProcessSettingsApplierURP : GraphicSettingsApplier - { - Volume PostProcessVolume { get; set; } - - GraphicSettingsManager GraphicSettingsManager { get; set; } - - private void Awake() - { - GraphicSettingsManager = FindObjectOfType(); - PostProcessVolume = GetComponent(); - } - - void Start() - { - ApplySettings(); - } - - public override void ApplySettings() - { - ApplySetting(); - ApplySetting(); - ApplySetting(); - ApplySetting(); - } - - void ApplySetting() - where TGraphicSetting : ToggleGraphicSetting - where TPostProcessEffect : VolumeComponent - { - // Settings cannot be applied when no profile has been set - if (PostProcessVolume.profile == null) - { - return; - } - - // Try to get the effect and the settings and enable/disable effect depending on the settings - if (PostProcessVolume.profile.TryGet(out var effect) && - GraphicSettingsManager.TryGet(out var setting)) - { - effect.active = setting.IsEnabled(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/PostProcessSettingsApplierURP.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/PostProcessSettingsApplierURP.cs.meta deleted file mode 100644 index 61e92b5..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Appliers/URP/PostProcessSettingsApplierURP.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ad76d02bedb82f341b59136a9c970d17 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 511d86b6354e6d6408dff5c757484b7f, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core.meta deleted file mode 100644 index feb84e0..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bb015b73c5432c74bb8c7a98910b5687 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/Configuration.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/Configuration.cs deleted file mode 100644 index 5bddfbd..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/Configuration.cs +++ /dev/null @@ -1,39 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [CreateAssetMenu(menuName = "Gaphics Control/Configuration", fileName = "Configuration")] - public class Configuration : ScriptableObject - { - public const string ConfigurationPath = "Ilumisoft/Graphics Control/Configuration"; - - [Header("Prefabs")] - public GameObject GraphicSettingsManager; - - [Tooltip("Automatically creates a persistent instance of the Graphic Settings Manager at startup when enabled")] - public bool AutoCreate = true; - - public GameObject GraphicSettingsPanel; - - public static Configuration Find() - { - var result = Resources.Load(ConfigurationPath); - - return result; - } - - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] - static void Initialize() - { - var configuration = Find(); - - // Automatically create the Graphic Settings Manager at startup - if(configuration.AutoCreate && configuration.GraphicSettingsManager !=null) - { - var instance = Instantiate(configuration.GraphicSettingsManager); - instance.name = configuration.GraphicSettingsManager.name; - DontDestroyOnLoad(instance); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/Configuration.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/Configuration.cs.meta deleted file mode 100644 index 5c22f81..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/Configuration.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 295992f08e41b134b92787aaf7435315 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSetting.cs deleted file mode 100644 index ed058c2..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSetting.cs +++ /dev/null @@ -1,20 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [RequireComponent(typeof(GraphicSettingsManager))] - public abstract class GraphicSetting : MonoBehaviour, IGraphicSetting - { - protected GraphicSettingsStorage GraphicSettingsStorage { get; set; } - - protected virtual void Awake() - { - GraphicSettingsStorage = GetComponent(); - } - - public abstract void Initialize(); - public abstract string GetSettingName(); - public abstract void LoadSetting(); - public abstract void SaveSetting(); - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSetting.cs.meta deleted file mode 100644 index abe62be..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7d941ca13646b6047959b3ecbb732da2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsApplier.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsApplier.cs deleted file mode 100644 index 9b6778e..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsApplier.cs +++ /dev/null @@ -1,28 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - /// - /// Abstract base class for all 's. - /// - public abstract class GraphicSettingsApplier : MonoBehaviour - { - protected virtual void OnEnable() - { - if (GraphicSettingsManager.Instance != null) - { - GraphicSettingsManager.Instance.Register(this); - } - } - - protected virtual void OnDisable() - { - if (GraphicSettingsManager.Instance != null) - { - GraphicSettingsManager.Instance.Unregister(this); - } - } - - public abstract void ApplySettings(); - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsApplier.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsApplier.cs.meta deleted file mode 100644 index 2412d4b..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsApplier.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 664d217953f234541af976eb1ea845c8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsManager.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsManager.cs deleted file mode 100644 index bf0294d..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsManager.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; - -namespace Ilumisoft.GraphicsControl -{ - public abstract class GraphicSettingsManager : SingletonBehaviour - { - protected List GraphicSettingsAppliers { get; set; } = new(); - - public abstract List GetGraphicSettings(); - - public abstract T Get() where T : GraphicSetting; - - public abstract bool TryGet(out T graphicSetting) where T : GraphicSetting; - - public abstract void LoadSettings(); - - public abstract void SaveSettings(); - - public abstract void ApplySettings(); - - public void Register(GraphicSettingsApplier graphicSettingsApplier) - { - if(graphicSettingsApplier != null && !GraphicSettingsAppliers.Contains(graphicSettingsApplier)) - { - GraphicSettingsAppliers.Add(graphicSettingsApplier); - } - } - - public void Unregister(GraphicSettingsApplier graphicSettingsApplier) - { - GraphicSettingsAppliers.Remove(graphicSettingsApplier); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsManager.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsManager.cs.meta deleted file mode 100644 index 009da65..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 09959d570680f234e97182aa1882ecaa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsStorage.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsStorage.cs deleted file mode 100644 index 6a28b3c..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsStorage.cs +++ /dev/null @@ -1,16 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - public abstract class GraphicSettingsStorage : MonoBehaviour - { - public abstract bool GetBool(string key, bool defaultValue); - public abstract float GetFloat(string key, float defaultValue); - public abstract int GetInt(string key, int defaultValue); - public abstract string GetString(string key, string defaultValue); - public abstract void SetBool(string key, bool value); - public abstract void SetFloat(string key, float value); - public abstract void SetInt(string key, int value); - public abstract void SetString(string key, string value); - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsStorage.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsStorage.cs.meta deleted file mode 100644 index 7b69d8f..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/GraphicSettingsStorage.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 786eafc0a79685247be430eff085729a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IGraphicSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IGraphicSetting.cs deleted file mode 100644 index f9c1c9e..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IGraphicSetting.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Ilumisoft.GraphicsControl -{ - public interface IGraphicSetting - { - void Initialize(); - string GetSettingName(); - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IGraphicSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IGraphicSetting.cs.meta deleted file mode 100644 index d1ebd92..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IGraphicSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 57b76debcf750ed4fa5e4ceb1258f03d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IMultiOptionGraphicSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IMultiOptionGraphicSetting.cs deleted file mode 100644 index dd3f172..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IMultiOptionGraphicSetting.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; - -namespace Ilumisoft.GraphicsControl -{ - public interface IMultiOptionGraphicSetting - { - List GetOptionNames(); - int GetIndex(); - void SetIndex(int index); - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IMultiOptionGraphicSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IMultiOptionGraphicSetting.cs.meta deleted file mode 100644 index 2089a41..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/IMultiOptionGraphicSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b3b02f234e94a07438f1760e688082fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/MultiOptionGraphicSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/MultiOptionGraphicSetting.cs deleted file mode 100644 index 13e1e9a..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/MultiOptionGraphicSetting.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Ilumisoft.GraphicsControl -{ - public abstract class MultiOptionGraphicSetting : GraphicSetting, IMultiOptionGraphicSetting - { - /// - /// Option table holding all available options for the graphic setting (e.g. all available resolutions for the resolution setting) - /// - protected OptionTable OptionTable = new(); - - /// - /// The index of the selected option (e.g. the selected resolution) - /// - int selectedIndex; - - /// - /// Adds a new option to the option table - /// - /// - /// - protected void AddOption(string name, T value) - { - OptionTable.Add(name, value); - } - - /// - /// Gets the names of all available options - /// - /// - public List GetOptionNames() - { - return OptionTable.GetNames(); - } - - /// - /// Sets the selected index - /// - /// - public void SetIndex(int index) - { - this.selectedIndex = index; - } - - /// - /// Gets the index of the selected option - /// - /// - public int GetIndex() - { - return selectedIndex; - } - - /// - /// Selects the given option. If the option is not available, the defaultIndex will be used to pick an option from the option table - /// - /// - /// - protected void SelectOption(T value, int defaultIndex = 0) - { - if (TryGetIndex(value, out var index)) - { - SetIndex(index); - } - else - { - SetIndex(defaultIndex); - } - } - - /// - /// Selects the option that fulfills the given predicate. If no option applies, the defaultIndex will be used to pick an option from the option table - /// - /// - /// - protected void SelectOption(Predicate predicate, int defaultIndex = 0) - { - if(TryGetIndex(predicate, out var index)) - { - SetIndex(index); - } - else - { - SetIndex(defaultIndex); - } - } - - /// - /// Tries to get the index of the given option - /// - /// - /// - /// - protected bool TryGetIndex(T option, out int index) - { - return TryGetIndex(entry => entry.Equals(option), out index); - } - - /// - /// Tries to get the first index that fulfills the given predicate - /// - /// - /// - /// - protected bool TryGetIndex(Predicate predicate, out int index) - { - index = -1; - - var entries = OptionTable.GetValues(); - - for (int i = 0; i < entries.Count; i++) - { - if (predicate(entries[i])) - { - index = i; - return true; - } - } - - return false; - } - - /// - /// Gets the currently selected option - /// - /// - public T GetSelectedOption() => OptionTable.GetValue(selectedIndex); - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/MultiOptionGraphicSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/MultiOptionGraphicSetting.cs.meta deleted file mode 100644 index 7df2b44..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/MultiOptionGraphicSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 58469bbd4c3c3cb4fa41792392bf2ca4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/OptionTable.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/OptionTable.cs deleted file mode 100644 index 75efd2d..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/OptionTable.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Ilumisoft.GraphicsControl -{ - public class OptionTable - { - public struct OptionEntry - { - public string Name; - public T Value; - - public OptionEntry(string name, T value) - { - Name = name; - Value = value; - } - } - - List entries = new(); - - public void Add(string name, T value) - { - entries.Add(new OptionEntry(name, value)); - } - - public List GetNames() => entries.Select(x=>x.Name).ToList(); - public List GetValues() => entries.Select(x => x.Value).ToList(); - - public T GetValue(int index) => entries[index].Value; - - public string GetName(int index) => entries[index].Name; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/OptionTable.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/OptionTable.cs.meta deleted file mode 100644 index 6999d9a..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/OptionTable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bad7acddd156c9a4f88746f9c6bd4eb9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/SingletonBehaviour.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/SingletonBehaviour.cs deleted file mode 100644 index 5add419..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/SingletonBehaviour.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - public abstract class SingletonBehaviour : MonoBehaviour where T : SingletonBehaviour - { - protected static T instance = null; - - /// - /// Gets the active instance of the singleton - /// - public static T Instance => instance; - - /// - /// Creates the instance of the singleton - /// - protected virtual void Awake() - { - //Dont allow multiple instances of a singleton - if (instance != null) - { - Debug.LogError(string.Format("Multiple instances of {0} are not allowed", typeof(T))); - - Destroy(this); - - return; - } - - instance = (T)this; - } - - /// - /// Resets the static instance when the object gets destroyed. - /// This is necessary because static fields are not resolved by the garbage collector. - /// - protected virtual void OnDestroy() - { - if (instance == this) - { - instance = null; - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/SingletonBehaviour.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/SingletonBehaviour.cs.meta deleted file mode 100644 index c7e3c07..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/SingletonBehaviour.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a83b4774cf3525943838f3b397160952 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/ToggleGraphicSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/ToggleGraphicSetting.cs deleted file mode 100644 index bfbdf47..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/ToggleGraphicSetting.cs +++ /dev/null @@ -1,47 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - /// - /// Toggle Graphic Settings can either be on or off. - /// This for example used for Bloom, Motion Blur or Grain Post Processing effects. - /// - public abstract class ToggleGraphicSetting : MultiOptionGraphicSetting - { - [Tooltip("Whether the option should be enabled by default or not")] - public bool IsEnabledByDefault = true; - - public override void Initialize() - { - // Toggle graphic settings can be eitehr on or off - AddOption("Off", false); - AddOption("On", true); - - SelectOption(IsEnabledByDefault); - } - - /// - /// Returns true if the setting is on, false otherwise - /// - /// - public bool IsEnabled() => GetSelectedOption(); - - /// - /// Loads the stored settings - /// - public override void LoadSetting() - { - bool value = GraphicSettingsStorage.GetBool(GetSettingName(), IsEnabled()); - - SelectOption(value); - } - - /// - /// Saves the selected option - /// - public override void SaveSetting() - { - GraphicSettingsStorage.SetBool(GetSettingName(), IsEnabled()); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/ToggleGraphicSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/ToggleGraphicSetting.cs.meta deleted file mode 100644 index 8413d29..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Core/ToggleGraphicSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a77a8124e4600dc46a0fa337984bfb25 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsManager.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsManager.cs deleted file mode 100644 index e3c93e0..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsManager.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [DisallowMultipleComponent()] - [DefaultExecutionOrder(-1)] - public class DefaultGraphicSettingsManager : GraphicSettingsManager - { - List settings = new(); - - public override List GetGraphicSettings() => settings; - - public override T Get() - { - foreach (var setting in settings) - { - if (setting is T targetSetting) - { - return targetSetting; - } - } - - return default; - } - - public override bool TryGet(out T graphicSetting) - { - foreach (var setting in settings) - { - if (setting is T targetSetting) - { - graphicSetting = targetSetting; - return true; - } - } - - graphicSetting = default; - - return false; - } - - protected override void Awake() - { - base.Awake(); - - settings = GetComponents().ToList(); - } - - private void Start() - { - foreach (var setting in settings) - { - setting.Initialize(); - } - - LoadSettings(); - ApplySettings(); - } - - public override void LoadSettings() - { - foreach (var setting in settings) - { - if (setting is GraphicSetting storeable) - { - storeable.LoadSetting(); - } - } - } - - public override void SaveSettings() - { - foreach (var setting in settings) - { - if (setting is GraphicSetting storeable) - { - storeable.SaveSetting(); - } - } - } - - public override void ApplySettings() - { - foreach (var settingApplier in GraphicSettingsAppliers) - { - settingApplier.ApplySettings(); - } - } - - private void Reset() - { - if(!TryGetComponent(out _)) - { - gameObject.AddComponent(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsManager.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsManager.cs.meta deleted file mode 100644 index d444e75..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d746c2c65da7e444cbdffb049efbcd08 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: e7051facbc4e30c4d9a591e094d964c6, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsStorage.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsStorage.cs deleted file mode 100644 index 361673f..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsStorage.cs +++ /dev/null @@ -1,43 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - /// - /// Default settings storage using PlayerPrefs. You can write your own storage class by extending the - /// - [DisallowMultipleComponent()] - public class DefaultGraphicSettingsStorage : GraphicSettingsStorage - { - public override void SetFloat(string key, float value) => PlayerPrefs.SetFloat(key, value); - public override void SetInt(string key, int value) => PlayerPrefs.SetInt(key, value); - public override void SetString(string key, string value) => PlayerPrefs.SetString(key, value); - public override void SetBool(string key, bool value) => PlayerPrefs.SetInt(key, value ? 1 : 0); - public override float GetFloat(string key, float defaultValue) => PlayerPrefs.GetFloat(key, defaultValue); - public override int GetInt(string key, int defaultValue) => PlayerPrefs.GetInt(key, defaultValue); - public override string GetString(string key, string defaultValue) => PlayerPrefs.GetString(key, defaultValue); - public override bool GetBool(string key, bool defaultValue) - { - int value = PlayerPrefs.GetInt(key, defaultValue ? 1 : 0); - - return value != 0; - } - - private void OnDisable() - { - PlayerPrefs.Save(); - } - - private void OnApplicationFocus(bool focus) - { - if(!focus) - { - PlayerPrefs.Save(); - } - } - - private void OnApplicationPause(bool pause) - { - PlayerPrefs.Save(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsStorage.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsStorage.cs.meta deleted file mode 100644 index d761970..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/DefaultGraphicSettingsStorage.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dd455d9a41581ae4d9e05ce3218d7ae7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 7dad77b6f99af7c449e384b57c7b7519, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor.meta deleted file mode 100644 index 8adb249..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 66920749c7de7374c85a26cdaa220366 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicSettingEditor.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicSettingEditor.cs deleted file mode 100644 index 249ada2..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicSettingEditor.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UnityEditor; - -namespace Ilumisoft.GraphicsControl.Editor -{ - [CustomEditor(typeof(GraphicSetting), true)] - public class GraphicSettingEditor : UnityEditor.Editor - { - public override void OnInspectorGUI() - { - serializedObject.Update(); - - EditorGUI.BeginChangeCheck(); - - DrawPropertiesExcluding(serializedObject, "m_Script"); - - if (EditorGUI.EndChangeCheck()) - { - serializedObject.ApplyModifiedProperties(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicSettingEditor.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicSettingEditor.cs.meta deleted file mode 100644 index 4760795..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicSettingEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f87684af450126c44896e4b52fbd408e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicsControlSettingsProvider.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicsControlSettingsProvider.cs deleted file mode 100644 index 42271b8..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicsControlSettingsProvider.cs +++ /dev/null @@ -1,19 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Ilumisoft.GraphicsControl.Editor -{ - class GraphicsCotnrolSettingsProvider - { - [SettingsProvider] - public static SettingsProvider CreateStartupProfileConfigurationProvider() => CreateProvider("Project/Graphics Control", Configuration.Find()); - - static SettingsProvider CreateProvider(string settingsWindowPath, Object asset) - { - var provider = AssetSettingsProvider.CreateProviderFromObject(settingsWindowPath, asset); - - provider.keywords = SettingsProvider.GetSearchKeywordsFromSerializedObject(new SerializedObject(asset)); - return provider; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicsControlSettingsProvider.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicsControlSettingsProvider.cs.meta deleted file mode 100644 index 62ce95b..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/GraphicsControlSettingsProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7039f079b3dfc6b45b850a93d88857a9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/Ilumisoft.GraphicsControl.Editor.asmdef b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/Ilumisoft.GraphicsControl.Editor.asmdef deleted file mode 100644 index a203b70..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/Ilumisoft.GraphicsControl.Editor.asmdef +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "Ilumisoft.GraphicsControl.Editor", - "rootNamespace": "", - "references": [ - "GUID:7f595fd175e67274183d17fac15b74c9" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/Ilumisoft.GraphicsControl.Editor.asmdef.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/Ilumisoft.GraphicsControl.Editor.asmdef.meta deleted file mode 100644 index 92100bd..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/Ilumisoft.GraphicsControl.Editor.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e85b0f2ab2cb4fd4396d9ce383d836d9 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/MenuItems.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/MenuItems.cs deleted file mode 100644 index 01b6caa..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/MenuItems.cs +++ /dev/null @@ -1,36 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Ilumisoft.GraphicsControl.Editor -{ - public static class MenuItems - { - // Add a menu item to create custom GameObjects. - // Priority 1 ensures it is grouped with the other menu items of the same kind - // and propagated to the hierarchy dropdown and hierarchy context menus. - [MenuItem("GameObject/UI/Graphic Settings Panel", false, 10)] - static void CreateCustomGameObject(MenuCommand menuCommand) - { - Configuration configuration = Configuration.Find(); - - if(configuration.GraphicSettingsPanel == null) - { - Debug.LogWarning("Could not create Graphic Settings Panel, because no prefab has been assigned in the project settings."); - return; - } - - // Create a custom game object - GameObject go = PrefabUtility.InstantiatePrefab(configuration.GraphicSettingsPanel) as GameObject;// new GameObject("Graphic Settings Panel"); - - go.name = "Graphic Settings Panel"; - - // Ensure it gets reparented if this was a context click (otherwise does nothing) - GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); - - // Register the creation in the undo system - Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); - - Selection.activeObject = go; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/MenuItems.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/MenuItems.cs.meta deleted file mode 100644 index f4aacb8..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Editor/MenuItems.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a00eef7e69de0bd46a508e735bcde211 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Ilumisoft.GraphicsControl.asmdef b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Ilumisoft.GraphicsControl.asmdef deleted file mode 100644 index cb738b6..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Ilumisoft.GraphicsControl.asmdef +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "Ilumisoft.GraphicsControl", - "rootNamespace": "", - "references": [ - "GUID:6055be8ebefd69e48b49212b09b47b2f" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Ilumisoft.GraphicsControl.asmdef.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Ilumisoft.GraphicsControl.asmdef.meta deleted file mode 100644 index 9a3bf03..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Ilumisoft.GraphicsControl.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 7f595fd175e67274183d17fac15b74c9 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings.meta deleted file mode 100644 index 0ee20af..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bd6c5fe9f2f5a5e4694c7d6100933e77 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/FullScreenModeSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/FullScreenModeSetting.cs deleted file mode 100644 index fe23bf6..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/FullScreenModeSetting.cs +++ /dev/null @@ -1,95 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [System.Serializable, System.Flags] - public enum FullScreenModeOptions - { - ExclusiveFullScreen = 1, - FullScreenWindow = 2, - MaximizedWindow = 4, - Windowed = 8, - Everything = 0b1111 - } - - - [DisallowMultipleComponent] - [AddComponentMenu("Graphics Control/Settings/Full Screen Mode Setting")] - public class FullScreenModeSetting : MultiOptionGraphicSetting - { - [SerializeField] - FullScreenModeOptions EnabledOptions = FullScreenModeOptions.Everything; - - public FullScreenMode DefaultOption = FullScreenMode.ExclusiveFullScreen; - - public override void Initialize() - { - AddOptionIfEnabled(FullScreenMode.Windowed); - AddOptionIfEnabled(FullScreenMode.FullScreenWindow); - AddOptionIfEnabled(FullScreenMode.MaximizedWindow); - AddOptionIfEnabled(FullScreenMode.ExclusiveFullScreen); - - // Always add the default option if not already added - if(!IsEnabled(DefaultOption)) - { - AddOption(GetDisplayName(DefaultOption), DefaultOption); - } - - SelectOption(DefaultOption); - } - - bool IsEnabled(FullScreenMode fullScreenMode) - { - return fullScreenMode switch - { - FullScreenMode.ExclusiveFullScreen => EnabledOptions.HasFlag(FullScreenModeOptions.ExclusiveFullScreen), - FullScreenMode.FullScreenWindow => EnabledOptions.HasFlag(FullScreenModeOptions.FullScreenWindow), - FullScreenMode.MaximizedWindow => EnabledOptions.HasFlag(FullScreenModeOptions.MaximizedWindow), - FullScreenMode.Windowed => EnabledOptions.HasFlag(FullScreenModeOptions.Windowed), - _ => false, - }; - } - - /// - /// Adds the given option to the option table if it has been set in the EnabledOptions - /// - /// - /// - void AddOptionIfEnabled(FullScreenMode option) - { - if (IsEnabled(option)) - { - AddOption(GetDisplayName(option), option); - } - } - - /// - /// Gets the display name the given - /// - /// - /// - /// - string GetDisplayName(FullScreenMode fullScreenMode) => fullScreenMode switch - { - FullScreenMode.ExclusiveFullScreen => "Exclusive Fullscreen", - FullScreenMode.FullScreenWindow => "Full Screen Window", - FullScreenMode.MaximizedWindow => "Maximized Window", - FullScreenMode.Windowed => "Window", - _ => throw new System.NotImplementedException(), - }; - - public override string GetSettingName() => "Full Screen Mode"; - - public override void SaveSetting() - { - GraphicSettingsStorage.SetInt("Full Screen Mode", (int)GetSelectedOption()); - } - - public override void LoadSetting() - { - int value = GraphicSettingsStorage.GetInt("Full Screen Mode", (int)DefaultOption); - - SelectOption((FullScreenMode)value); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/FullScreenModeSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/FullScreenModeSetting.cs.meta deleted file mode 100644 index 81c3342..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/FullScreenModeSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 43e4b0176d7b9c8458e46f9587b50868 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing.meta deleted file mode 100644 index 3e69f96..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e9ec92119fc6ebe458677efe991f486b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/AmbientOcclusionSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/AmbientOcclusionSetting.cs deleted file mode 100644 index c0291f1..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/AmbientOcclusionSetting.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [AddComponentMenu("Graphics Control/Settings/Ambient Occlusion Setting")] - [DisallowMultipleComponent()] - public class AmbientOcclusionSetting : ToggleGraphicSetting - { - public override string GetSettingName() => "Ambient Occlusion"; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/AmbientOcclusionSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/AmbientOcclusionSetting.cs.meta deleted file mode 100644 index 06e1381..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/AmbientOcclusionSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: faecca85295be1440be1629220477394 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/BloomSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/BloomSetting.cs deleted file mode 100644 index 123c7df..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/BloomSetting.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [AddComponentMenu("Graphics Control/Settings/Bloom Setting")] - [DisallowMultipleComponent()] - public class BloomSetting : ToggleGraphicSetting - { - public override string GetSettingName() => "Bloom"; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/BloomSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/BloomSetting.cs.meta deleted file mode 100644 index 0bf1018..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/BloomSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d77ee60ff507582488de1b21409b4ffd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/ChromaticAberrationSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/ChromaticAberrationSetting.cs deleted file mode 100644 index 6b3f19b..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/ChromaticAberrationSetting.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [AddComponentMenu("Graphics Control/Settings/Chromatic Aberration Setting")] - [DisallowMultipleComponent()] - public class ChromaticAberrationSetting : ToggleGraphicSetting - { - public override string GetSettingName() => "Chromatic Aberration"; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/ChromaticAberrationSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/ChromaticAberrationSetting.cs.meta deleted file mode 100644 index f680c99..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/ChromaticAberrationSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 06578898b8ae5ba408a50bdc92f95b6a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/GrainSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/GrainSetting.cs deleted file mode 100644 index 30d93ae..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/GrainSetting.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [AddComponentMenu("Graphics Control/Settings/Grain Setting")] - [DisallowMultipleComponent()] - public class GrainSetting : ToggleGraphicSetting - { - public override string GetSettingName() => "Grain"; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/GrainSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/GrainSetting.cs.meta deleted file mode 100644 index 4a50125..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/GrainSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a34ac59a2b342ac4d95043f9d43cd773 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/MotionBlurSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/MotionBlurSetting.cs deleted file mode 100644 index 90b7ada..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/MotionBlurSetting.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [AddComponentMenu("Graphics Control/Settings/Motion Blur Setting")] - [DisallowMultipleComponent()] - public class MotionBlurSetting : ToggleGraphicSetting - { - public override string GetSettingName() => "Motion Blur"; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/MotionBlurSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/MotionBlurSetting.cs.meta deleted file mode 100644 index 04d2fbd..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/Post Processing/MotionBlurSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ab1af6deb663e5047800769e92315fb1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/QualitySetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/QualitySetting.cs deleted file mode 100644 index 48f5773..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/QualitySetting.cs +++ /dev/null @@ -1,43 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [DisallowMultipleComponent] - [AddComponentMenu("Graphics Control/Settings/Quality Setting")] - public class QualitySetting : MultiOptionGraphicSetting - { - public override void Initialize() - { - var names = QualitySettings.names; - - for (int i = 0; i < names.Length; i++) - { - AddOption(names[i], i); - } - - SetIndex(QualitySettings.GetQualityLevel()); - } - - public override string GetSettingName() => "Quality"; - - public override void SaveSetting() - { - GraphicSettingsStorage.SetInt(key: GetSettingName(), value: GetIndex()); - } - - public override void LoadSetting() - { - // The key of the setting - string key = GetSettingName(); - - // Default value used as a fallback option - int defaultValue = QualitySettings.GetQualityLevel(); - - // Get the stored value - int storedValue = GraphicSettingsStorage.GetInt(key, defaultValue); - - // Apply the stored value - SetIndex(storedValue); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/QualitySetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/QualitySetting.cs.meta deleted file mode 100644 index 2ed0706..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/QualitySetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0db9cdd8379cfca4b8d2230daaacfd5d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/ResolutionSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/ResolutionSetting.cs deleted file mode 100644 index 43af018..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/ResolutionSetting.cs +++ /dev/null @@ -1,47 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [DisallowMultipleComponent] - [AddComponentMenu("Graphics Control/Settings/Resolution Setting")] - public class ResolutionSetting : MultiOptionGraphicSetting - { - public override void Initialize() - { - var supportedResolutions = Screen.resolutions; - - foreach (var resolution in supportedResolutions) - { - AddOption($"{resolution.width}x{resolution.height}", resolution); - } - - SelectOption(r => AreEqual(r, Screen.currentResolution), defaultIndex: 0); - } - - public override string GetSettingName() => "Resolution"; - - public override void SaveSetting() - { - GraphicSettingsStorage.SetInt("Resolution_Width", GetSelectedOption().width); - GraphicSettingsStorage.SetInt("Resolution_Height", GetSelectedOption().height); - } - - public override void LoadSetting() - { - var currentResolution = Screen.currentResolution; - - Resolution resolution = new() - { - width = GraphicSettingsStorage.GetInt("Resolution_Width", currentResolution.width), - height = GraphicSettingsStorage.GetInt("Resolution_Height", currentResolution.height) - }; - - SelectOption(r => AreEqual(r, resolution), defaultIndex: 0); - } - - bool AreEqual(Resolution a, Resolution b) - { - return a.width == b.width && a.height == b.height; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/ResolutionSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/ResolutionSetting.cs.meta deleted file mode 100644 index d80c792..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/ResolutionSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 438c606e3c3e3b440bbc978d859f759b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/VSyncSetting.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/VSyncSetting.cs deleted file mode 100644 index b3a8f9a..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/VSyncSetting.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; - -namespace Ilumisoft.GraphicsControl -{ - [DisallowMultipleComponent] - [AddComponentMenu("Graphics Control/Settings/VSync Setting")] - public class VSyncSetting : ToggleGraphicSetting - { - public override string GetSettingName() => "VSync"; - } -} \ No newline at end of file diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/VSyncSetting.cs.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/VSyncSetting.cs.meta deleted file mode 100644 index 48cda64..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/Settings/VSyncSetting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3f677a30b5f601d4aac04bd65aeb366a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 688fa00e4a40a034eacc71c7a11ff9d0, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/UI.meta b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/UI.meta deleted file mode 100644 index 862e0fb..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/UI.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d641d93a2afc3454cb4a61f18a43067a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/UI/ApplySettingsButton.cs b/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/UI/ApplySettingsButton.cs deleted file mode 100644 index c886357..0000000 --- a/Assets/Plugins/Ilumisoft/Graphics Control/Scripts/UI/ApplySettingsButton.cs +++ /dev/null @@ -1,23 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -namespace Ilumisoft.GraphicsControl.UI -{ - [RequireComponent(typeof(Button))] - public class ApplySettingsButton : MonoBehaviour - { - Button Button { get; set; } - - private void Awake() - { - Button = GetComponent